From 1e2976b1e9413a0666463f32412585e69dc71f40 Mon Sep 17 00:00:00 2001 From: Cosmin Sabou Date: Sat, 23 Feb 2019 22:48:53 +0200 Subject: [PATCH] Backed out 2 changesets (bug 1516337) for causing windows AArch64 build bustages. Backed out changeset c5e856d5edba (bug 1516337) Backed out changeset d4dff8b8974e (bug 1516337) --- .gitignore | 2 + .hgignore | 3 + Cargo.lock | 134 +- .../block-buffer-0.3.3/.cargo-checksum.json | 1 + .../rust/block-buffer-0.3.3/Cargo.toml | 27 + .../rust/block-buffer-0.3.3/LICENSE-APACHE | 201 + .../rust/block-buffer-0.3.3/LICENSE-MIT | 25 + .../rust/block-buffer-0.3.3/src/lib.rs | 144 + .../rust/block-buffer-0.3.3/src/paddings.rs | 129 + .../byte-tools-0.2.0/.cargo-checksum.json | 1 + third_party/rust/byte-tools-0.2.0/Cargo.toml | 21 + .../rust/byte-tools-0.2.0/LICENSE-APACHE | 201 + third_party/rust/byte-tools-0.2.0/LICENSE-MIT | 26 + third_party/rust/byte-tools-0.2.0/src/lib.rs | 37 + .../rust/byte-tools-0.2.0/src/read_single.rs | 38 + .../rust/byte-tools-0.2.0/src/read_slice.rs | 44 + .../rust/byte-tools-0.2.0/src/write_single.rs | 39 + .../rust/byte-tools-0.2.0/src/write_slice.rs | 46 + .../rust/digest-0.7.6/.cargo-checksum.json | 1 + third_party/rust/digest-0.7.6/Cargo.toml | 32 + third_party/rust/digest-0.7.6/LICENSE-APACHE | 201 + third_party/rust/digest-0.7.6/LICENSE-MIT | 25 + third_party/rust/digest-0.7.6/src/dev.rs | 171 + third_party/rust/digest-0.7.6/src/digest.rs | 86 + third_party/rust/digest-0.7.6/src/errors.rs | 37 + third_party/rust/digest-0.7.6/src/lib.rs | 98 + third_party/rust/docopt/.cargo-checksum.json | 2 +- third_party/rust/docopt/Cargo.toml | 7 +- third_party/rust/docopt/Makefile | 18 + third_party/rust/docopt/README.md | 168 +- third_party/rust/docopt/ctags.rust | 11 + third_party/rust/docopt/scripts/mk-testcases | 80 + third_party/rust/docopt/session.vim | 3 + third_party/rust/docopt/src/dopt.rs | 1 + third_party/rust/docopt/src/lib.rs | 47 + third_party/rust/ena/.cargo-checksum.json | 2 +- third_party/rust/ena/Cargo.toml | 2 +- third_party/rust/ena/src/snapshot_vec.rs | 19 +- third_party/rust/ena/src/unify/backing_vec.rs | 34 +- third_party/rust/ena/src/unify/mod.rs | 12 +- .../generic-array-0.9.0/.cargo-checksum.json | 1 + .../rust/generic-array-0.9.0/Cargo.toml | 32 + third_party/rust/generic-array-0.9.0/LICENSE | 21 + .../rust/generic-array-0.9.0/README.md | 34 + .../rust/generic-array-0.9.0/rustfmt.toml | 3 + .../rust/generic-array-0.9.0/src/arr.rs | 57 + .../rust/generic-array-0.9.0/src/hex.rs | 101 + .../generic-array-0.9.0/src/impl_serde.rs | 68 + .../rust/generic-array-0.9.0/src/impls.rs | 171 + .../rust/generic-array-0.9.0/src/iter.rs | 117 + .../rust/generic-array-0.9.0/src/lib.rs | 464 + .../rust/generic-array-0.9.0/tests/hex.rs | 44 + .../generic-array-0.9.0/tests/import_name.rs | 10 + .../rust/generic-array-0.9.0/tests/mod.rs | 169 + .../rust/lalrpop-snap/.cargo-checksum.json | 1 + third_party/rust/lalrpop-snap/Cargo.toml | 65 + third_party/rust/lalrpop-snap/src/api/mod.rs | 182 + .../rust/lalrpop-snap/src/build/action.rs | 422 + .../rust/lalrpop-snap/src/build/fake_term.rs | 84 + .../rust/lalrpop-snap/src/build/mod.rs | 585 + .../rust/lalrpop-snap/src/collections/map.rs | 15 + .../rust/lalrpop-snap/src/collections/mod.rs | 7 + .../lalrpop-snap/src/collections/multimap.rs | 140 + .../rust/lalrpop-snap/src/collections/set.rs | 8 + .../rust/lalrpop-snap/src/file_text.rs | 144 + third_party/rust/lalrpop-snap/src/generate.rs | 78 + .../rust/lalrpop-snap/src/grammar/consts.rs | 26 + .../rust/lalrpop-snap/src/grammar/mod.rs | 7 + .../lalrpop-snap/src/grammar/parse_tree.rs | 1103 + .../rust/lalrpop-snap/src/grammar/pattern.rs | 129 + .../rust/lalrpop-snap/src/grammar/repr.rs | 600 + .../lalrpop-snap/src/grammar/token/mod.rs | 28 + .../lalrpop-snap/src/grammar/token/test.rs | 1 + .../rust/lalrpop-snap/src/kernel_set.rs | 41 + .../lalrpop-snap/src/lexer/dfa/interpret.rs | 40 + .../rust/lalrpop-snap/src/lexer/dfa/mod.rs | 326 + .../lalrpop-snap/src/lexer/dfa/overlap.rs | 149 + .../rust/lalrpop-snap/src/lexer/dfa/test.rs | 76 + .../src/lexer/intern_token/mod.rs | 293 + .../rust/lalrpop-snap/src/lexer/mod.rs | 8 + .../lalrpop-snap/src/lexer/nfa/interpret.rs | 72 + .../rust/lalrpop-snap/src/lexer/nfa/mod.rs | 637 + .../rust/lalrpop-snap/src/lexer/nfa/test.rs | 159 + .../rust/lalrpop-snap/src/lexer/re/mod.rs | 23 + .../rust/lalrpop-snap/src/lexer/re/test.rs | 11 + third_party/rust/lalrpop-snap/src/lib.rs | 56 + third_party/rust/lalrpop-snap/src/log.rs | 64 + .../rust/lalrpop-snap/src/lr1/build/mod.rs | 357 + .../rust/lalrpop-snap/src/lr1/build/test.rs | 354 + .../lalrpop-snap/src/lr1/build_lalr/mod.rs | 163 + .../lalrpop-snap/src/lr1/build_lalr/test.rs | 49 + .../lalrpop-snap/src/lr1/codegen/ascent.rs | 1019 + .../rust/lalrpop-snap/src/lr1/codegen/base.rs | 279 + .../rust/lalrpop-snap/src/lr1/codegen/mod.rs | 4 + .../src/lr1/codegen/parse_table.rs | 2220 + .../lalrpop-snap/src/lr1/codegen/test_all.rs | 147 + .../rust/lalrpop-snap/src/lr1/core/mod.rs | 333 + .../rust/lalrpop-snap/src/lr1/error/mod.rs | 839 + .../rust/lalrpop-snap/src/lr1/error/test.rs | 187 + .../rust/lalrpop-snap/src/lr1/example/mod.rs | 409 + .../rust/lalrpop-snap/src/lr1/example/test.rs | 195 + .../rust/lalrpop-snap/src/lr1/first/mod.rs | 97 + .../rust/lalrpop-snap/src/lr1/first/test.rs | 93 + .../rust/lalrpop-snap/src/lr1/interpret.rs | 206 + third_party/rust/lalrpop-snap/src/lr1/item.rs | 1 + .../lalrpop-snap/src/lr1/lane_table/README.md | 417 + .../src/lr1/lane_table/construct/merge.rs | 218 + .../src/lr1/lane_table/construct/mod.rs | 264 + .../src/lr1/lane_table/construct/state_set.rs | 46 + .../src/lr1/lane_table/lane/mod.rs | 149 + .../lalrpop-snap/src/lr1/lane_table/mod.rs | 27 + .../lr1/lane_table/table/context_set/mod.rs | 98 + .../lr1/lane_table/table/context_set/test.rs | 1 + .../src/lr1/lane_table/table/mod.rs | 203 + .../lalrpop-snap/src/lr1/lane_table/test.rs | 376 + .../rust/lalrpop-snap/src/lr1/lookahead.rs | 299 + third_party/rust/lalrpop-snap/src/lr1/mod.rs | 43 + .../rust/lalrpop-snap/src/lr1/report/mod.rs | 446 + .../rust/lalrpop-snap/src/lr1/state_graph.rs | 94 + third_party/rust/lalrpop-snap/src/lr1/tls.rs | 40 + .../rust/lalrpop-snap/src/lr1/trace/mod.rs | 31 + .../lalrpop-snap/src/lr1/trace/reduce/mod.rs | 111 + .../lalrpop-snap/src/lr1/trace/reduce/test.rs | 364 + .../lalrpop-snap/src/lr1/trace/shift/mod.rs | 101 + .../lalrpop-snap/src/lr1/trace/shift/test.rs | 78 + .../src/lr1/trace/trace_graph/mod.rs | 452 + .../src/lr1/trace/trace_graph/test.rs | 162 + .../rust/lalrpop-snap/src/message/builder.rs | 309 + .../rust/lalrpop-snap/src/message/horiz.rs | 44 + .../rust/lalrpop-snap/src/message/indent.rs | 32 + .../rust/lalrpop-snap/src/message/message.rs | 84 + .../rust/lalrpop-snap/src/message/mod.rs | 79 + .../rust/lalrpop-snap/src/message/styled.rs | 41 + .../rust/lalrpop-snap/src/message/test.rs | 142 + .../rust/lalrpop-snap/src/message/text.rs | 37 + .../rust/lalrpop-snap/src/message/vert.rs | 39 + .../rust/lalrpop-snap/src/message/wrap.rs | 54 + .../src/normalize/inline/graph/mod.rs | 119 + .../src/normalize/inline/graph/test.rs | 52 + .../lalrpop-snap/src/normalize/inline/mod.rs | 156 + .../lalrpop-snap/src/normalize/inline/test.rs | 102 + .../lalrpop-snap/src/normalize/lower/mod.rs | 459 + .../src/normalize/macro_expand/mod.rs | 603 + .../src/normalize/macro_expand/test.rs | 112 + .../rust/lalrpop-snap/src/normalize/mod.rs | 119 + .../lalrpop-snap/src/normalize/norm_util.rs | 134 + .../src/normalize/prevalidate/mod.rs | 296 + .../src/normalize/prevalidate/test.rs | 151 + .../lalrpop-snap/src/normalize/resolve/mod.rs | 298 + .../src/normalize/resolve/test.rs | 82 + .../src/normalize/token_check/mod.rs | 424 + .../src/normalize/token_check/test.rs | 203 + .../lalrpop-snap/src/normalize/tyinfer/mod.rs | 356 + .../src/normalize/tyinfer/test.rs | 243 + .../rust/lalrpop-snap/src/parser/lrgrammar.rs | 89292 ++++++++++++++++ .../rust/lalrpop-snap/src/parser/mod.rs | 54 + .../rust/lalrpop-snap/src/parser/test.rs | 151 + third_party/rust/lalrpop-snap/src/rust/mod.rs | 191 + third_party/rust/lalrpop-snap/src/session.rs | 154 + .../rust/lalrpop-snap/src/test_util.rs | 68 + third_party/rust/lalrpop-snap/src/tls/mod.rs | 77 + third_party/rust/lalrpop-snap/src/tok/mod.rs | 738 + third_party/rust/lalrpop-snap/src/tok/test.rs | 707 + third_party/rust/lalrpop-snap/src/util.rs | 52 + .../rust/lalrpop-util/.cargo-checksum.json | 2 +- third_party/rust/lalrpop-util/Cargo.toml | 2 +- third_party/rust/lalrpop-util/src/lib.rs | 404 +- third_party/rust/lalrpop/.cargo-checksum.json | 2 +- third_party/rust/lalrpop/Cargo.toml | 23 +- third_party/rust/lalrpop/build.rs | 5 + third_party/rust/lalrpop/src/api/mod.rs | 464 +- third_party/rust/lalrpop/src/build/action.rs | 859 +- .../rust/lalrpop/src/build/fake_term.rs | 168 +- third_party/rust/lalrpop/src/build/mod.rs | 1141 +- .../rust/lalrpop/src/collections/map.rs | 30 +- .../rust/lalrpop/src/collections/mod.rs | 14 +- .../rust/lalrpop/src/collections/multimap.rs | 281 +- .../rust/lalrpop/src/collections/set.rs | 16 +- third_party/rust/lalrpop/src/file_text.rs | 288 +- third_party/rust/lalrpop/src/generate.rs | 158 +- .../rust/lalrpop/src/grammar/consts.rs | 55 +- third_party/rust/lalrpop/src/grammar/mod.rs | 14 +- .../rust/lalrpop/src/grammar/parse_tree.rs | 2208 +- .../rust/lalrpop/src/grammar/pattern.rs | 258 +- third_party/rust/lalrpop/src/grammar/repr.rs | 1204 +- .../rust/lalrpop/src/grammar/token/mod.rs | 56 +- .../rust/lalrpop/src/grammar/token/test.rs | 2 +- third_party/rust/lalrpop/src/kernel_set.rs | 82 +- .../rust/lalrpop/src/lexer/dfa/interpret.rs | 81 +- third_party/rust/lalrpop/src/lexer/dfa/mod.rs | 655 +- .../rust/lalrpop/src/lexer/dfa/overlap.rs | 298 +- .../rust/lalrpop/src/lexer/dfa/test.rs | 153 +- .../lalrpop/src/lexer/intern_token/mod.rs | 586 +- third_party/rust/lalrpop/src/lexer/mod.rs | 16 +- .../rust/lalrpop/src/lexer/nfa/interpret.rs | 144 +- third_party/rust/lalrpop/src/lexer/nfa/mod.rs | 1177 +- .../rust/lalrpop/src/lexer/nfa/test.rs | 318 +- third_party/rust/lalrpop/src/lexer/re/mod.rs | 48 +- third_party/rust/lalrpop/src/lexer/re/test.rs | 22 +- third_party/rust/lalrpop/src/lib.rs | 115 +- third_party/rust/lalrpop/src/log.rs | 131 +- third_party/rust/lalrpop/src/lr1/build/mod.rs | 715 +- .../rust/lalrpop/src/lr1/build/test.rs | 708 +- .../rust/lalrpop/src/lr1/build_lalr/mod.rs | 326 +- .../rust/lalrpop/src/lr1/build_lalr/test.rs | 98 +- .../rust/lalrpop/src/lr1/codegen/ascent.rs | 2040 +- .../rust/lalrpop/src/lr1/codegen/base.rs | 558 +- .../rust/lalrpop/src/lr1/codegen/mod.rs | 8 +- .../lalrpop/src/lr1/codegen/parse_table.rs | 4444 +- .../rust/lalrpop/src/lr1/codegen/test_all.rs | 295 +- third_party/rust/lalrpop/src/lr1/core/mod.rs | 669 +- third_party/rust/lalrpop/src/lr1/error/mod.rs | 1680 +- .../rust/lalrpop/src/lr1/error/test.rs | 374 +- .../rust/lalrpop/src/lr1/example/mod.rs | 818 +- .../rust/lalrpop/src/lr1/example/test.rs | 397 +- third_party/rust/lalrpop/src/lr1/first/mod.rs | 197 +- .../rust/lalrpop/src/lr1/first/test.rs | 186 +- third_party/rust/lalrpop/src/lr1/interpret.rs | 412 +- third_party/rust/lalrpop/src/lr1/item.rs | 2 +- .../rust/lalrpop/src/lr1/lane_table/README.md | 834 +- .../src/lr1/lane_table/construct/merge.rs | 437 +- .../src/lr1/lane_table/construct/mod.rs | 530 +- .../src/lr1/lane_table/construct/state_set.rs | 92 +- .../lalrpop/src/lr1/lane_table/lane/mod.rs | 298 +- .../rust/lalrpop/src/lr1/lane_table/mod.rs | 54 +- .../lr1/lane_table/table/context_set/mod.rs | 196 +- .../lr1/lane_table/table/context_set/test.rs | 2 +- .../lalrpop/src/lr1/lane_table/table/mod.rs | 408 +- .../rust/lalrpop/src/lr1/lane_table/test.rs | 755 +- third_party/rust/lalrpop/src/lr1/lookahead.rs | 600 +- third_party/rust/lalrpop/src/lr1/mod.rs | 86 +- .../rust/lalrpop/src/lr1/report/mod.rs | 892 +- .../rust/lalrpop/src/lr1/state_graph.rs | 188 +- third_party/rust/lalrpop/src/lr1/tls.rs | 80 +- third_party/rust/lalrpop/src/lr1/trace/mod.rs | 62 +- .../rust/lalrpop/src/lr1/trace/reduce/mod.rs | 222 +- .../rust/lalrpop/src/lr1/trace/reduce/test.rs | 733 +- .../rust/lalrpop/src/lr1/trace/shift/mod.rs | 202 +- .../rust/lalrpop/src/lr1/trace/shift/test.rs | 158 +- .../lalrpop/src/lr1/trace/trace_graph/mod.rs | 908 +- .../lalrpop/src/lr1/trace/trace_graph/test.rs | 326 +- third_party/rust/lalrpop/src/main.rs | 352 +- .../rust/lalrpop/src/message/builder.rs | 618 +- third_party/rust/lalrpop/src/message/horiz.rs | 88 +- .../rust/lalrpop/src/message/indent.rs | 64 +- .../rust/lalrpop/src/message/message.rs | 169 +- third_party/rust/lalrpop/src/message/mod.rs | 158 +- .../rust/lalrpop/src/message/styled.rs | 82 +- third_party/rust/lalrpop/src/message/test.rs | 293 +- third_party/rust/lalrpop/src/message/text.rs | 74 +- third_party/rust/lalrpop/src/message/vert.rs | 78 +- third_party/rust/lalrpop/src/message/wrap.rs | 108 +- .../lalrpop/src/normalize/inline/graph/mod.rs | 239 +- .../src/normalize/inline/graph/test.rs | 107 +- .../rust/lalrpop/src/normalize/inline/mod.rs | 313 +- .../rust/lalrpop/src/normalize/inline/test.rs | 206 +- .../rust/lalrpop/src/normalize/lower/mod.rs | 938 +- .../lalrpop/src/normalize/macro_expand/mod.rs | 1204 +- .../src/normalize/macro_expand/test.rs | 230 +- third_party/rust/lalrpop/src/normalize/mod.rs | 238 +- .../rust/lalrpop/src/normalize/norm_util.rs | 270 +- .../lalrpop/src/normalize/prevalidate/mod.rs | 610 +- .../lalrpop/src/normalize/prevalidate/test.rs | 302 +- .../rust/lalrpop/src/normalize/resolve/mod.rs | 597 +- .../lalrpop/src/normalize/resolve/test.rs | 164 +- .../lalrpop/src/normalize/token_check/mod.rs | 851 +- .../lalrpop/src/normalize/token_check/test.rs | 406 +- .../rust/lalrpop/src/normalize/tyinfer/mod.rs | 714 +- .../lalrpop/src/normalize/tyinfer/test.rs | 487 +- .../rust/lalrpop/src/parser/lrgrammar.lalrpop | 40 +- .../rust/lalrpop/src/parser/lrgrammar.rs | 34834 ------ third_party/rust/lalrpop/src/parser/mod.rs | 138 +- third_party/rust/lalrpop/src/parser/test.rs | 5 +- third_party/rust/lalrpop/src/rust/mod.rs | 387 +- third_party/rust/lalrpop/src/session.rs | 319 +- third_party/rust/lalrpop/src/test_util.rs | 136 +- third_party/rust/lalrpop/src/tls/mod.rs | 154 +- third_party/rust/lalrpop/src/tok/mod.rs | 1512 +- third_party/rust/lalrpop/src/tok/test.rs | 99 +- third_party/rust/lalrpop/src/util.rs | 104 +- third_party/rust/regex/.cargo-checksum.json | 2 +- third_party/rust/regex/CHANGELOG.md | 47 - third_party/rust/regex/Cargo.toml | 9 +- third_party/rust/regex/HACKING.md | 11 - third_party/rust/regex/README.md | 22 +- third_party/rust/regex/build.rs | 81 +- third_party/rust/regex/ci/script.sh | 17 +- third_party/rust/regex/ci/test-regex-capi | 7 - third_party/rust/regex/scripts/generate.py | 45 - .../rust/regex/scripts/scrape_crates_io.py | 189 - third_party/rust/regex/src/exec.rs | 10 +- third_party/rust/regex/src/lib.rs | 12 +- .../rust/regex/src/literal/teddy_avx2/mod.rs | 6 +- .../rust/regex/src/literal/teddy_ssse3/mod.rs | 6 +- third_party/rust/regex/src/re_builder.rs | 6 +- third_party/rust/regex/src/re_bytes.rs | 140 +- third_party/rust/regex/src/re_set.rs | 8 - third_party/rust/regex/src/re_trait.rs | 14 +- third_party/rust/regex/src/re_unicode.rs | 130 +- third_party/rust/regex/src/vector/mod.rs | 2 +- third_party/rust/regex/tests/consistent.rs | 213 - third_party/rust/regex/tests/crates_regex.rs | 3129 - .../rust/regex/tests/test_crates_regex.rs | 57 - .../rust/sha2-0.7.1/.cargo-checksum.json | 1 + third_party/rust/sha2-0.7.1/Cargo.toml | 45 + third_party/rust/sha2-0.7.1/LICENSE-APACHE | 201 + third_party/rust/sha2-0.7.1/LICENSE-MIT | 27 + third_party/rust/sha2-0.7.1/benches/sha256.rs | 7 + third_party/rust/sha2-0.7.1/benches/sha512.rs | 7 + .../rust/sha2-0.7.1/examples/sha256sum.rs | 49 + .../rust/sha2-0.7.1/examples/sha512sum.rs | 49 + third_party/rust/sha2-0.7.1/src/consts.rs | 200 + third_party/rust/sha2-0.7.1/src/lib.rs | 85 + third_party/rust/sha2-0.7.1/src/sha256.rs | 127 + .../rust/sha2-0.7.1/src/sha256_utils.rs | 267 + third_party/rust/sha2-0.7.1/src/sha512.rs | 209 + .../rust/sha2-0.7.1/src/sha512_utils.rs | 287 + .../tests/data/sha224/test1.input.bin | 0 .../tests/data/sha224/test1.output.bin | 1 + .../tests/data/sha224/test2.input.bin | 1 + .../tests/data/sha224/test2.output.bin | 1 + .../tests/data/sha224/test3.input.bin | 1 + .../tests/data/sha224/test3.output.bin | 2 + .../data/sha256/one_million_a.output.bin | 1 + .../tests/data/sha256/test1.input.bin | 0 .../tests/data/sha256/test1.output.bin | 1 + .../tests/data/sha256/test2.input.bin | 1 + .../tests/data/sha256/test2.output.bin | 1 + .../tests/data/sha256/test3.input.bin | 1 + .../tests/data/sha256/test3.output.bin | 1 + .../tests/data/sha384/test1.input.bin | 0 .../tests/data/sha384/test1.output.bin | 1 + .../tests/data/sha384/test2.input.bin | 1 + .../tests/data/sha384/test2.output.bin | 1 + .../tests/data/sha384/test3.input.bin | 1 + .../tests/data/sha384/test3.output.bin | 1 + .../data/sha512/one_million_a.output.bin | Bin 0 -> 64 bytes .../tests/data/sha512/test1.input.bin | 0 .../tests/data/sha512/test1.output.bin | 1 + .../tests/data/sha512/test2.input.bin | 1 + .../tests/data/sha512/test2.output.bin | 1 + .../tests/data/sha512/test3.input.bin | 1 + .../tests/data/sha512/test3.output.bin | 1 + .../tests/data/sha512_224/test1.input.bin | 0 .../tests/data/sha512_224/test1.output.bin | 1 + .../tests/data/sha512_224/test2.input.bin | 1 + .../tests/data/sha512_224/test2.output.bin | Bin 0 -> 28 bytes .../tests/data/sha512_224/test3.input.bin | 1 + .../tests/data/sha512_224/test3.output.bin | 1 + .../tests/data/sha512_256/test1.input.bin | 0 .../tests/data/sha512_256/test1.output.bin | 1 + .../tests/data/sha512_256/test2.input.bin | 1 + .../tests/data/sha512_256/test2.output.bin | Bin 0 -> 32 bytes .../tests/data/sha512_256/test3.input.bin | 1 + .../tests/data/sha512_256/test3.output.bin | Bin 0 -> 32 bytes third_party/rust/sha2-0.7.1/tests/lib.rs | 54 + .../rust/strsim-0.6.0/.cargo-checksum.json | 1 + third_party/rust/strsim-0.6.0/.editorconfig | 13 + third_party/rust/strsim-0.6.0/.travis.yml | 11 + third_party/rust/strsim-0.6.0/CHANGELOG.md | 103 + third_party/rust/strsim-0.6.0/Cargo.toml | 17 + third_party/rust/strsim-0.6.0/LICENSE | 22 + third_party/rust/strsim-0.6.0/README.md | 95 + third_party/rust/strsim-0.6.0/appveyor.yml | 13 + third_party/rust/strsim-0.6.0/dev | 14 + third_party/rust/strsim-0.6.0/src/lib.rs | 911 + third_party/rust/strsim-0.6.0/tests/lib.rs | 89 + .../rust/thread_local/.cargo-checksum.json | 2 +- third_party/rust/thread_local/Cargo.toml | 5 +- third_party/rust/thread_local/src/lib.rs | 4 +- .../rust/thread_local/src/unreachable.rs | 74 - 371 files changed, 142214 insertions(+), 62399 deletions(-) create mode 100644 third_party/rust/block-buffer-0.3.3/.cargo-checksum.json create mode 100644 third_party/rust/block-buffer-0.3.3/Cargo.toml create mode 100644 third_party/rust/block-buffer-0.3.3/LICENSE-APACHE create mode 100644 third_party/rust/block-buffer-0.3.3/LICENSE-MIT create mode 100644 third_party/rust/block-buffer-0.3.3/src/lib.rs create mode 100644 third_party/rust/block-buffer-0.3.3/src/paddings.rs create mode 100644 third_party/rust/byte-tools-0.2.0/.cargo-checksum.json create mode 100644 third_party/rust/byte-tools-0.2.0/Cargo.toml create mode 100644 third_party/rust/byte-tools-0.2.0/LICENSE-APACHE create mode 100644 third_party/rust/byte-tools-0.2.0/LICENSE-MIT create mode 100644 third_party/rust/byte-tools-0.2.0/src/lib.rs create mode 100644 third_party/rust/byte-tools-0.2.0/src/read_single.rs create mode 100644 third_party/rust/byte-tools-0.2.0/src/read_slice.rs create mode 100644 third_party/rust/byte-tools-0.2.0/src/write_single.rs create mode 100644 third_party/rust/byte-tools-0.2.0/src/write_slice.rs create mode 100644 third_party/rust/digest-0.7.6/.cargo-checksum.json create mode 100644 third_party/rust/digest-0.7.6/Cargo.toml create mode 100644 third_party/rust/digest-0.7.6/LICENSE-APACHE create mode 100644 third_party/rust/digest-0.7.6/LICENSE-MIT create mode 100644 third_party/rust/digest-0.7.6/src/dev.rs create mode 100644 third_party/rust/digest-0.7.6/src/digest.rs create mode 100644 third_party/rust/digest-0.7.6/src/errors.rs create mode 100644 third_party/rust/digest-0.7.6/src/lib.rs create mode 100644 third_party/rust/docopt/Makefile create mode 100644 third_party/rust/docopt/ctags.rust create mode 100755 third_party/rust/docopt/scripts/mk-testcases create mode 100644 third_party/rust/docopt/session.vim create mode 100644 third_party/rust/generic-array-0.9.0/.cargo-checksum.json create mode 100644 third_party/rust/generic-array-0.9.0/Cargo.toml create mode 100644 third_party/rust/generic-array-0.9.0/LICENSE create mode 100644 third_party/rust/generic-array-0.9.0/README.md create mode 100644 third_party/rust/generic-array-0.9.0/rustfmt.toml create mode 100644 third_party/rust/generic-array-0.9.0/src/arr.rs create mode 100644 third_party/rust/generic-array-0.9.0/src/hex.rs create mode 100644 third_party/rust/generic-array-0.9.0/src/impl_serde.rs create mode 100644 third_party/rust/generic-array-0.9.0/src/impls.rs create mode 100644 third_party/rust/generic-array-0.9.0/src/iter.rs create mode 100644 third_party/rust/generic-array-0.9.0/src/lib.rs create mode 100644 third_party/rust/generic-array-0.9.0/tests/hex.rs create mode 100644 third_party/rust/generic-array-0.9.0/tests/import_name.rs create mode 100644 third_party/rust/generic-array-0.9.0/tests/mod.rs create mode 100644 third_party/rust/lalrpop-snap/.cargo-checksum.json create mode 100644 third_party/rust/lalrpop-snap/Cargo.toml create mode 100644 third_party/rust/lalrpop-snap/src/api/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/build/action.rs create mode 100644 third_party/rust/lalrpop-snap/src/build/fake_term.rs create mode 100644 third_party/rust/lalrpop-snap/src/build/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/collections/map.rs create mode 100644 third_party/rust/lalrpop-snap/src/collections/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/collections/multimap.rs create mode 100644 third_party/rust/lalrpop-snap/src/collections/set.rs create mode 100644 third_party/rust/lalrpop-snap/src/file_text.rs create mode 100644 third_party/rust/lalrpop-snap/src/generate.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/consts.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/parse_tree.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/pattern.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/repr.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/token/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/grammar/token/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/kernel_set.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/dfa/interpret.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/dfa/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/dfa/overlap.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/dfa/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/intern_token/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/nfa/interpret.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/nfa/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/nfa/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/re/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lexer/re/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lib.rs create mode 100644 third_party/rust/lalrpop-snap/src/log.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/build/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/build/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/build_lalr/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/build_lalr/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/codegen/ascent.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/codegen/base.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/codegen/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/codegen/parse_table.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/codegen/test_all.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/core/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/error/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/error/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/example/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/example/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/first/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/first/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/interpret.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/item.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/README.md create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/merge.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/state_set.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/lane/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/table/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lane_table/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/lookahead.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/report/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/state_graph.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/tls.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/reduce/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/reduce/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/shift/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/shift/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/builder.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/horiz.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/indent.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/message.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/styled.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/text.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/vert.rs create mode 100644 third_party/rust/lalrpop-snap/src/message/wrap.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/inline/graph/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/inline/graph/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/inline/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/inline/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/lower/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/macro_expand/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/macro_expand/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/norm_util.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/prevalidate/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/prevalidate/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/resolve/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/resolve/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/token_check/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/token_check/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/tyinfer/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/normalize/tyinfer/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/parser/lrgrammar.rs create mode 100644 third_party/rust/lalrpop-snap/src/parser/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/parser/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/rust/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/session.rs create mode 100644 third_party/rust/lalrpop-snap/src/test_util.rs create mode 100644 third_party/rust/lalrpop-snap/src/tls/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/tok/mod.rs create mode 100644 third_party/rust/lalrpop-snap/src/tok/test.rs create mode 100644 third_party/rust/lalrpop-snap/src/util.rs create mode 100644 third_party/rust/lalrpop/build.rs delete mode 100644 third_party/rust/lalrpop/src/parser/lrgrammar.rs delete mode 100755 third_party/rust/regex/ci/test-regex-capi delete mode 100755 third_party/rust/regex/scripts/generate.py delete mode 100755 third_party/rust/regex/scripts/scrape_crates_io.py delete mode 100644 third_party/rust/regex/tests/consistent.rs delete mode 100644 third_party/rust/regex/tests/crates_regex.rs delete mode 100644 third_party/rust/regex/tests/test_crates_regex.rs create mode 100644 third_party/rust/sha2-0.7.1/.cargo-checksum.json create mode 100644 third_party/rust/sha2-0.7.1/Cargo.toml create mode 100644 third_party/rust/sha2-0.7.1/LICENSE-APACHE create mode 100644 third_party/rust/sha2-0.7.1/LICENSE-MIT create mode 100644 third_party/rust/sha2-0.7.1/benches/sha256.rs create mode 100644 third_party/rust/sha2-0.7.1/benches/sha512.rs create mode 100644 third_party/rust/sha2-0.7.1/examples/sha256sum.rs create mode 100644 third_party/rust/sha2-0.7.1/examples/sha512sum.rs create mode 100644 third_party/rust/sha2-0.7.1/src/consts.rs create mode 100644 third_party/rust/sha2-0.7.1/src/lib.rs create mode 100644 third_party/rust/sha2-0.7.1/src/sha256.rs create mode 100644 third_party/rust/sha2-0.7.1/src/sha256_utils.rs create mode 100644 third_party/rust/sha2-0.7.1/src/sha512.rs create mode 100644 third_party/rust/sha2-0.7.1/src/sha512_utils.rs create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha224/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/one_million_a.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha256/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha384/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/one_million_a.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.input.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.output.bin create mode 100644 third_party/rust/sha2-0.7.1/tests/lib.rs create mode 100644 third_party/rust/strsim-0.6.0/.cargo-checksum.json create mode 100644 third_party/rust/strsim-0.6.0/.editorconfig create mode 100644 third_party/rust/strsim-0.6.0/.travis.yml create mode 100644 third_party/rust/strsim-0.6.0/CHANGELOG.md create mode 100644 third_party/rust/strsim-0.6.0/Cargo.toml create mode 100644 third_party/rust/strsim-0.6.0/LICENSE create mode 100644 third_party/rust/strsim-0.6.0/README.md create mode 100644 third_party/rust/strsim-0.6.0/appveyor.yml create mode 100755 third_party/rust/strsim-0.6.0/dev create mode 100644 third_party/rust/strsim-0.6.0/src/lib.rs create mode 100644 third_party/rust/strsim-0.6.0/tests/lib.rs delete mode 100644 third_party/rust/thread_local/src/unreachable.rs diff --git a/.gitignore b/.gitignore index 90a4005347af..3dde8bbeec72 100644 --- a/.gitignore +++ b/.gitignore @@ -157,3 +157,5 @@ lextab.py !.vscode/extensions.json !.vscode/tasks.json +# Ignore file generated by lalrpop at build time. +third_party/rust/lalrpop/src/parser/lrgrammar.rs diff --git a/.hgignore b/.hgignore index d72adfa3e0de..cb1cfe025eba 100644 --- a/.hgignore +++ b/.hgignore @@ -188,5 +188,8 @@ tps_result\.json ^testing/raptor/raptor/tests/.*.json ^testing/raptor/webext/raptor/auto_gen_test_config.js +# Ignore file generated by lalrpop at build time. +^third_party/rust/lalrpop/src/parser/lrgrammar.rs + # Ignore the build directories of WebRender standalone builds. gfx/wr/target/ diff --git a/Cargo.lock b/Cargo.lock index 2453ac006655..9b8d8df81111 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -229,7 +229,7 @@ dependencies = [ "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "which 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -276,6 +276,15 @@ dependencies = [ "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "block-buffer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "block-buffer" version = "0.7.0" @@ -305,6 +314,11 @@ name = "build_const" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "byte-tools" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "byte-tools" version = "0.3.0" @@ -758,6 +772,14 @@ name = "diff" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "digest" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "digest" version = "0.8.0" @@ -778,14 +800,14 @@ dependencies = [ [[package]] name = "docopt" -version = "1.0.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)", - "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -827,7 +849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ena" -version = "0.10.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1024,7 +1046,7 @@ dependencies = [ "mozprofile 0.5.0", "mozrunner 0.9.0", "mozversion 0.2.0", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)", "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1053,6 +1075,14 @@ dependencies = [ "style_traits 0.0.1", ] +[[package]] +name = "generic-array" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "generic-array" version = "0.12.0" @@ -1332,23 +1362,45 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.16.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ena 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", + "docopt 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lalrpop-util 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-snap 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-util 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)", - "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lalrpop-snap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-util 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1356,7 +1408,7 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.16.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1665,7 +1717,7 @@ dependencies = [ name = "mozversion" version = "0.2.0" dependencies = [ - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rust-ini 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2102,19 +2154,19 @@ dependencies = [ "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "1.0.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2328,6 +2380,17 @@ dependencies = [ "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "sha2" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "sha2" version = "0.8.0" @@ -2428,6 +2491,11 @@ name = "string_cache_shared" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "strsim" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "strsim" version = "0.7.0" @@ -2468,7 +2536,7 @@ dependencies = [ "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.21.0", "servo_arc 0.1.1", "smallbitvec 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2523,7 +2591,7 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "malloc_size_of 0.0.1", "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.21.0", "size_of_test 0.0.1", "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2651,10 +2719,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "0.3.6" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2990,7 +3059,7 @@ dependencies = [ "hyper 0.12.7 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)", "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3005,8 +3074,8 @@ name = "webidl" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lalrpop 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lalrpop-util 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-util 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3241,10 +3310,12 @@ dependencies = [ "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" "checksum bitreader 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80b13e2ab064ff3aa0bdbf1eff533f9822dc37899821f5f98c67f263eab51707" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +"checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" "checksum block-buffer 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49665c62e0e700857531fa5d3763e91b539ff1abeebd56808d378b495870d60d" "checksum block-padding 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc4358306e344bf9775d0197fd00d2603e5afb0771bb353538630f022068ea3" "checksum boxfnonce 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8380105befe91099e6f69206164072c05bc92427ff6aa8a5171388317346dd75" "checksum build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e90dc84f5e62d2ebe7676b83c22d33b6db8bd27340fb6ffbff0a364efa0cb9c9" +"checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "checksum byte-tools 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "980479e6fde23246dfb54d47580d66b4e99202e7579c5eaa9fe10ecb5ebd2182" "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" "checksum bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e178b8e0e239e844b083d5a0d4a156b2654e67f9f80144d48398fcd736a24fb8" @@ -3294,14 +3365,15 @@ dependencies = [ "checksum derive_more 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f57d78cf3bd45270dad4e70c21ec77a960b36c7a841ff9db76aaa775a8fb871" "checksum devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7c9ac481c38baf400d3b732e4a06850dfaa491d1b6379a249d9d40d14c2434c" "checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a" +"checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" "checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" "checksum dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "88972de891f6118092b643d85a0b28e0678e0f948d7f879aa32f2d5aafe97d2a" -"checksum docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db2906c2579b5b7207fc1e328796a9a8835dc44e22dbe8e460b1d636f9a7b225" +"checksum docopt 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d8acd393692c503b168471874953a2531df0e9ab77d0b6bbc582395743300a4a" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" "checksum dtoa-short 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "068d4026697c1a18f0b0bb8cfcad1b0c151b90d8edb9bf4c235ad68128920d1d" "checksum dwrote 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c31c624339dab99c223a4b26c2e803b7c248adaca91549ce654c76f39a03f5c8" "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a" -"checksum ena 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "25b4e5febb25f08c49f1b07dc33a182729a6b21edfb562b5aef95f78e0dbe5bb" +"checksum ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "88dc8393b3c7352f94092497f6b52019643e493b6b890eb417cdb7c46117e621" "checksum encoding_c 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "769ecb8b33323998e482b218c0d13cd64c267609023b4b7ec3ee740714c318ee" "checksum encoding_rs 0.8.14 (registry+https://github.com/rust-lang/crates.io-index)" = "a69d152eaa438a291636c1971b0a370212165ca8a75759eb66818c5ce9b538f7" "checksum env_logger 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0561146661ae44c579e993456bc76d11ce1e0c7d745e57b2fa7146b6e49fa2ad" @@ -3324,6 +3396,7 @@ dependencies = [ "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum gl_generator 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0ffaf173cf76c73a73e080366bf556b4776ece104b06961766ff11449f38604" "checksum gleam 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4b47f5b15742aee359c7895ab98cf2cceecc89bb4feb6f4e42f802d7899877da" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" @@ -3341,8 +3414,9 @@ dependencies = [ "checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum khronos_api 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62237e6d326bd5871cd21469323bf096de81f1618cd82cbaf5d87825335aeb49" -"checksum lalrpop 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02888049e197dff0c5c9fd503bd2458ea373c5e845c2f5460db1f9e43050d55e" -"checksum lalrpop-util 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "488da0d45c65af229321623c62660627d02b0e7fbc768a4c3fcd121815404ef1" +"checksum lalrpop 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f7014afd5642680074fd5dcc624d544f9eabfa281cba2c3ac56c3db6d21ad1b" +"checksum lalrpop-snap 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b85aa455529344133d7ecaaac04c01ed87f459deeaa0fe5422885e2095d8cdc" +"checksum lalrpop-util 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2400aeebcd11259370d038c24821b93218dd2f33a53f53e9c8fcccca70be6696" "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" "checksum lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce12306c4739d86ee97c23139f3a34ddf0387bbf181bc7929d287025a8c3ef6b" "checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" @@ -3414,7 +3488,7 @@ dependencies = [ "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum redox_users 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "214a97e49be64fd2c86f568dd0cb2c757d2cc53de95b273b6ad0a1c908482f26" "checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b" -"checksum regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3d8c9f33201f46669484bacc312b00e7541bed6aaf296dffe2bb4e0ac6b8ce2a" +"checksum regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75ecf88252dce580404a22444fc7d626c01815debba56a7f4f536772a5ff19d3" "checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" "checksum regex-syntax 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8f1ac0f60d675cc6cf13a20ec076568254472551051ad5dd050364d70671bf6b" "checksum rkv 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "becd7f5278be3b97250a8035455116f9fc63f5fc68cc8293213051d7d751c373" @@ -3437,6 +3511,7 @@ dependencies = [ "checksum serde_bytes 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "adb6e51a6b3696b301bc221d785f898b4457c619b51d7ce195a6d20baecb37b3" "checksum serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)" = "" "checksum serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "44dd2cfde475037451fa99b7e5df77aa3cfd1536575fa8e7a538ab36dcde49ae" +"checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" "checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d" "checksum simd 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0048b17eb9577ac545c61d85c3559b41dfb4cbea41c9bd9ca6a4f73ff05fda84" "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84" @@ -3449,6 +3524,7 @@ dependencies = [ "checksum string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25d70109977172b127fe834e5449e5ab1740b9ba49fa18a2020f509174f25423" "checksum string_cache_codegen 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eea1eee654ef80933142157fdad9dd8bc43cf7c74e999e369263496f04ff4da" "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" +"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" "checksum syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59" "checksum syn 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4e4b5274d4a0a3d2749d5c158dc64d3403e60554dc61194648787ada5212473d" @@ -3463,7 +3539,7 @@ dependencies = [ "checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693" "checksum thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" "checksum thin-vec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "73fdf4b84c65a85168477b7fb6c498e0716bc9487fba24623389ea7f51708044" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" "checksum thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf947d192a9be60ef5131cc7a4648886ba89d712f16700ebbf80c8a69d05d48f" "checksum threadbound 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d23e87ee7a1ef5bd2d38cef24ff360f6e02beee13c6a7eb64dddde4a3da427a3" "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" diff --git a/third_party/rust/block-buffer-0.3.3/.cargo-checksum.json b/third_party/rust/block-buffer-0.3.3/.cargo-checksum.json new file mode 100644 index 000000000000..97c5faad9543 --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"373908618d7bdf561f84ddc5add92f69dab295c97ab0908d3a4ec428fad23bad","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba","src/lib.rs":"bdf23c8a00fb4d51beabeb6600fe45ebf1be618632db885013b6f60a5666c124","src/paddings.rs":"7a18850dab9dca0a3e6cc49d6a94a9566ea2473628f42f726a69f8e07f95872a"},"package":"a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab"} \ No newline at end of file diff --git a/third_party/rust/block-buffer-0.3.3/Cargo.toml b/third_party/rust/block-buffer-0.3.3/Cargo.toml new file mode 100644 index 000000000000..81515f96716b --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/Cargo.toml @@ -0,0 +1,27 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "block-buffer" +version = "0.3.3" +authors = ["RustCrypto Developers"] +description = "Fixed size buffer for block processing of data" +documentation = "https://docs.rs/block-buffer" +keywords = ["block", "padding", "pkcs7", "ansix923", "iso7816"] +categories = ["cryptography", "no-std"] +license = "MIT/Apache-2.0" +repository = "https://github.com/RustCrypto/utils" +[dependencies.arrayref] +version = "0.3" + +[dependencies.byte-tools] +version = "0.2" diff --git a/third_party/rust/block-buffer-0.3.3/LICENSE-APACHE b/third_party/rust/block-buffer-0.3.3/LICENSE-APACHE new file mode 100644 index 000000000000..78173fa2e753 --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/third_party/rust/block-buffer-0.3.3/LICENSE-MIT b/third_party/rust/block-buffer-0.3.3/LICENSE-MIT new file mode 100644 index 000000000000..8dcb85b30273 --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/LICENSE-MIT @@ -0,0 +1,25 @@ +Copyright (c) 2017 Artyom Pavlov + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/third_party/rust/block-buffer-0.3.3/src/lib.rs b/third_party/rust/block-buffer-0.3.3/src/lib.rs new file mode 100644 index 000000000000..7f5c8af2c984 --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/src/lib.rs @@ -0,0 +1,144 @@ +#![no_std] +#[macro_use] +extern crate arrayref; +extern crate byte_tools; + +use byte_tools::{zero, write_u64_le}; + +mod paddings; + +pub use paddings::*; + +macro_rules! impl_buffer { + ($name:ident, $len:expr) => { + + pub struct $name { + buffer: [u8; $len], + pos: usize, + } + + impl Copy for $name {} + + impl Clone for $name { + fn clone(&self) -> Self { + *self + } + } + + impl Default for $name { + fn default() -> Self { + $name {buffer: [0; $len], pos: 0} + } + } + + impl $name { + #[inline] + pub fn input(&mut self, mut input: &[u8], mut func: F) { + // If there is already data in the buffer, copy as much as we can + // into it and process the data if the buffer becomes full. + if self.pos != 0 { + let rem = self.remaining(); + + if input.len() >= rem { + let (l, r) = input.split_at(rem); + input = r; + self.buffer[self.pos..].copy_from_slice(l); + self.pos = 0; + func(&self.buffer); + } else { + let end = self.pos + input.len(); + self.buffer[self.pos..end].copy_from_slice(input); + self.pos = end; + return; + } + } + + // While we have at least a full buffer size chunks's worth of data, + // process that data without copying it into the buffer + while input.len() >= self.size() { + let (l, r) = input.split_at(self.size()); + input = r; + func(array_ref!(l, 0, $len)); + } + + // Copy any input data into the buffer. At this point in the method, + // the ammount of data left in the input vector will be less than + // the buffer size and the buffer will be empty. + self.buffer[..input.len()].copy_from_slice(input); + self.pos = input.len(); + } + + #[inline] + fn digest_pad(&mut self, up_to: usize, func: &mut F) + where F: FnMut(&[u8; $len]) + { + self.buffer[self.pos] = 0x80; + self.pos += 1; + + zero(&mut self.buffer[self.pos..]); + + if self.remaining() < up_to { + func(&self.buffer); + zero(&mut self.buffer[..self.pos]); + } + } + + #[inline] + /// Will pad message with message length in big-endian format + pub fn len_padding(&mut self, data_len: u64, mut func: F) + where F: FnMut(&[u8; $len]) + { + self.digest_pad(8, &mut func); + let s = self.size(); + write_u64_le(&mut self.buffer[s-8..], data_len); + func(&self.buffer); + self.pos = 0; + } + + #[inline] + pub fn len_padding_u128(&mut self, hi: u64, lo: u64, mut func: F) + where F: FnMut(&[u8; $len]) + { + self.digest_pad(16, &mut func); + let s = self.size(); + write_u64_le(&mut self.buffer[s-16..s-8], hi); + write_u64_le(&mut self.buffer[s-8..], lo); + func(&self.buffer); + self.pos = 0; + } + + #[inline] + pub fn pad_with(&mut self) -> &mut [u8; $len] { + P::pad(&mut self.buffer[..], self.pos); + self.pos = 0; + &mut self.buffer + } + + #[inline] + pub fn size(&self) -> usize { + $len + } + + #[inline] + pub fn position(&self) -> usize { + self.pos + } + + #[inline] + pub fn remaining(&self) -> usize { + self.size() - self.pos + } + } + } +} + +impl_buffer!(BlockBuffer128, 16); +impl_buffer!(BlockBuffer256, 32); +impl_buffer!(BlockBuffer512, 64); +impl_buffer!(BlockBuffer1024, 128); + +impl_buffer!(BlockBuffer576, 72); +impl_buffer!(BlockBuffer832, 104); +impl_buffer!(BlockBuffer1088, 136); +impl_buffer!(BlockBuffer1152, 144); +impl_buffer!(BlockBuffer1344, 168); diff --git a/third_party/rust/block-buffer-0.3.3/src/paddings.rs b/third_party/rust/block-buffer-0.3.3/src/paddings.rs new file mode 100644 index 000000000000..06719c697b04 --- /dev/null +++ b/third_party/rust/block-buffer-0.3.3/src/paddings.rs @@ -0,0 +1,129 @@ +use byte_tools::{zero, set}; + +/// Trait for padding messages divided into blocks +pub trait Padding { + /// Pads `block` filled with data up to `pos` + fn pad(block: &mut [u8], pos: usize); +} + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +/// Error for indicating failed unpadding process +pub struct UnpadError; + +/// Trait for extracting oringinal message from padded medium +pub trait Unpadding { + /// Unpad given `data` by truncating it according to the used padding. + /// In case of the malformed padding will return `UnpadError` + fn unpad(data: &[u8]) -> Result<&[u8], UnpadError>; +} + + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum ZeroPadding{} + +impl Padding for ZeroPadding { + #[inline] + fn pad(block: &mut [u8], pos: usize) { + zero(&mut block[pos..]) + } +} + +impl Unpadding for ZeroPadding { + #[inline] + fn unpad(data: &[u8]) -> Result<&[u8], UnpadError> { + let mut n = data.len() - 1; + while n != 0 { + if data[n] != 0 { + break; + } + n -= 1; + } + Ok(&data[..n+1]) + } +} + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum Pkcs7{} + +impl Padding for Pkcs7 { + #[inline] + fn pad(block: &mut [u8], pos: usize) { + let n = block.len() - pos; + set(&mut block[pos..], n as u8); + } +} + +impl Unpadding for Pkcs7 { + #[inline] + fn unpad(data: &[u8]) -> Result<&[u8], UnpadError> { + if data.is_empty() { return Err(UnpadError); } + let l = data.len(); + let n = data[l-1]; + if n == 0 { + return Err(UnpadError) + } + for v in &data[l-n as usize..l-1] { + if *v != n { return Err(UnpadError); } + } + Ok(&data[..l-n as usize]) + } +} + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum AnsiX923{} + +impl Padding for AnsiX923 { + #[inline] + fn pad(block: &mut [u8], pos: usize) { + let n = block.len() - 1; + zero(&mut block[pos..n]); + block[n] = (n - pos) as u8; + } +} + +impl Unpadding for AnsiX923 { + #[inline] + fn unpad(data: &[u8]) -> Result<&[u8], UnpadError> { + if data.is_empty() { return Err(UnpadError); } + let l = data.len(); + let n = data[l-1] as usize; + if n == 0 { + return Err(UnpadError) + } + for v in &data[l-n..l-1] { + if *v != 0 { return Err(UnpadError); } + } + Ok(&data[..l-n]) + } +} + + + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum Iso7816{} + +impl Padding for Iso7816 { + #[inline] + fn pad(block: &mut [u8], pos: usize) { + let n = block.len() - pos; + block[pos] = 0x80; + for b in block[pos+1..].iter_mut() { + *b = n as u8; + } + } +} + +impl Unpadding for Iso7816 { + fn unpad(data: &[u8]) -> Result<&[u8], UnpadError> { + if data.is_empty() { return Err(UnpadError); } + let mut n = data.len() - 1; + while n != 0 { + if data[n] != 0 { + break; + } + n -= 1; + } + if data[n] != 0x80 { return Err(UnpadError); } + Ok(&data[..n]) + } +} diff --git a/third_party/rust/byte-tools-0.2.0/.cargo-checksum.json b/third_party/rust/byte-tools-0.2.0/.cargo-checksum.json new file mode 100644 index 000000000000..0e07b2def735 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"af6af6ea1dfa296af5dc58986d1afb46952328588069ec0b08723db439e9972d","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"52232c2cee3bb7d8cabe47ef367f1bf8bb607c22bdfca0219d6156cb7f446e9d","src/lib.rs":"9c96cffef7458fc7bd9e4e61270b69d539ff3a9225a0319b7996155c25ff96ab","src/read_single.rs":"3ab78b15754c2a7848a1be871ff6ee2a31a099f8f4f89be44ad210cda0dbcc9a","src/read_slice.rs":"b3790f2fd080db97e239c05c63da123ea375fb9b354dc9cacb859ed9c44f552e","src/write_single.rs":"1cee4f2f5d8690e47840ea7017539ead417a26abc0717137442a6d9d2875afe4","src/write_slice.rs":"de90e6b9cfca67125871bee7cef55c63574b1871a6584e51fc00a97e5877fe69"},"package":"560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40"} \ No newline at end of file diff --git a/third_party/rust/byte-tools-0.2.0/Cargo.toml b/third_party/rust/byte-tools-0.2.0/Cargo.toml new file mode 100644 index 000000000000..32bf0cedc2be --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/Cargo.toml @@ -0,0 +1,21 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "byte-tools" +version = "0.2.0" +authors = ["The Rust-Crypto Project Developers"] +description = "Utility functions for working with bytes" +documentation = "https://docs.rs/byte-tools" +keywords = ["bytes"] +license = "MIT/Apache-2.0" +repository = "https://github.com/RustCrypto/utils" diff --git a/third_party/rust/byte-tools-0.2.0/LICENSE-APACHE b/third_party/rust/byte-tools-0.2.0/LICENSE-APACHE new file mode 100644 index 000000000000..78173fa2e753 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/third_party/rust/byte-tools-0.2.0/LICENSE-MIT b/third_party/rust/byte-tools-0.2.0/LICENSE-MIT new file mode 100644 index 000000000000..1da3a5f6d2e6 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/LICENSE-MIT @@ -0,0 +1,26 @@ +Copyright (c) 2006-2009 Graydon Hoare +Copyright (c) 2009-2013 Mozilla Foundation + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/third_party/rust/byte-tools-0.2.0/src/lib.rs b/third_party/rust/byte-tools-0.2.0/src/lib.rs new file mode 100644 index 000000000000..323bf38f582e --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/src/lib.rs @@ -0,0 +1,37 @@ +#![no_std] +use core::ptr; + +mod read_single; +mod write_single; +mod read_slice; +mod write_slice; + +pub use read_single::*; +pub use write_single::*; +pub use read_slice::*; +pub use write_slice::*; + +/// Copy bytes from src to dest +#[inline] +pub fn copy_memory(src: &[u8], dst: &mut [u8]) { + assert!(dst.len() >= src.len()); + unsafe { + let srcp = src.as_ptr(); + let dstp = dst.as_mut_ptr(); + ptr::copy_nonoverlapping(srcp, dstp, src.len()); + } +} + +/// Zero all bytes in dst +#[inline] +pub fn zero(dst: &mut [u8]) { + set(dst, 0); +} + +/// Sets all bytes in `dst` equal to `value` +#[inline] +pub fn set(dst: &mut [u8], value: u8) { + unsafe { + ptr::write_bytes(dst.as_mut_ptr(), value, dst.len()); + } +} \ No newline at end of file diff --git a/third_party/rust/byte-tools-0.2.0/src/read_single.rs b/third_party/rust/byte-tools-0.2.0/src/read_single.rs new file mode 100644 index 000000000000..76e7feb92ad1 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/src/read_single.rs @@ -0,0 +1,38 @@ +use core::{mem, ptr}; + +macro_rules! read_single { + ($src:expr, $size:expr, $ty:ty, $which:ident) => ({ + assert!($size == mem::size_of::<$ty>()); + assert!($size == $src.len()); + unsafe { + let mut tmp: $ty = mem::uninitialized(); + let p = &mut tmp as *mut _ as *mut u8; + ptr::copy_nonoverlapping($src.as_ptr(), p, $size); + tmp.$which() + } + }); +} + +/// Read the value of a vector of bytes as a u32 value in little-endian format. +#[inline] +pub fn read_u32_le(src: &[u8]) -> u32 { + read_single!(src, 4, u32, to_le) +} + +/// Read the value of a vector of bytes as a u32 value in big-endian format. +#[inline] +pub fn read_u32_be(src: &[u8]) -> u32 { + read_single!(src, 4, u32, to_be) +} + +/// Read the value of a vector of bytes as a u64 value in little-endian format. +#[inline] +pub fn read_u64_le(src: &[u8]) -> u64 { + read_single!(src, 8, u64, to_le) +} + +/// Read the value of a vector of bytes as a u64 value in big-endian format. +#[inline] +pub fn read_u64_be(src: &[u8]) -> u64 { + read_single!(src, 8, u64, to_be) +} diff --git a/third_party/rust/byte-tools-0.2.0/src/read_slice.rs b/third_party/rust/byte-tools-0.2.0/src/read_slice.rs new file mode 100644 index 000000000000..858e34b82e13 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/src/read_slice.rs @@ -0,0 +1,44 @@ +use core::ptr; + +macro_rules! read_slice { + ($src:expr, $dst:expr, $size:expr, $which:ident) => ({ + assert_eq!($size*$dst.len(), $src.len()); + unsafe { + ptr::copy_nonoverlapping( + $src.as_ptr(), + $dst.as_mut_ptr() as *mut u8, + $src.len()); + } + for v in $dst.iter_mut() { + *v = v.$which(); + } + }); +} + +/// Read a vector of bytes into a vector of u32s. The values are read in +/// little-endian format. +#[inline] +pub fn read_u32v_le(dst: &mut [u32], src: &[u8]) { + read_slice!(src, dst, 4, to_le); +} + +/// Read a vector of bytes into a vector of u32s. The values are read in +/// big-endian format. +#[inline] +pub fn read_u32v_be(dst: &mut [u32], src: &[u8]) { + read_slice!(src, dst, 4, to_be); +} + +/// Read a vector of bytes into a vector of u64s. The values are read in +/// little-endian format. +#[inline] +pub fn read_u64v_le(dst: &mut [u64], src: &[u8]) { + read_slice!(src, dst, 8, to_le); +} + +/// Read a vector of bytes into a vector of u64s. The values are read in +/// big-endian format. +#[inline] +pub fn read_u64v_be(dst: &mut [u64], src: &[u8]) { + read_slice!(src, dst, 8, to_be); +} diff --git a/third_party/rust/byte-tools-0.2.0/src/write_single.rs b/third_party/rust/byte-tools-0.2.0/src/write_single.rs new file mode 100644 index 000000000000..a075ec38b326 --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/src/write_single.rs @@ -0,0 +1,39 @@ +use core::{mem, ptr}; + +macro_rules! write_single { + ($dst:expr, $n:expr, $size:expr, $which:ident) => ({ + assert!($size == $dst.len()); + unsafe { + let bytes = mem::transmute::<_, [u8; $size]>($n.$which()); + ptr::copy_nonoverlapping((&bytes).as_ptr(), $dst.as_mut_ptr(), $size); + } + }); +} + +/// Write a u32 into a vector, which must be 4 bytes long. The value is written +/// in little-endian format. +#[inline] +pub fn write_u32_le(dst: &mut [u8], n: u32) { + write_single!(dst, n, 4, to_le); +} + +/// Write a u32 into a vector, which must be 4 bytes long. The value is written +/// in big-endian format. +#[inline] +pub fn write_u32_be(dst: &mut [u8], n: u32) { + write_single!(dst, n, 4, to_be); +} + +/// Write a u64 into a vector, which must be 8 bytes long. The value is written +/// in little-endian format. +#[inline] +pub fn write_u64_le(dst: &mut [u8], n: u64) { + write_single!(dst, n, 8, to_le); +} + +/// Write a u64 into a vector, which must be 8 bytes long. The value is written +/// in big-endian format. +#[inline] +pub fn write_u64_be(dst: &mut [u8], n: u64) { + write_single!(dst, n, 8, to_be); +} diff --git a/third_party/rust/byte-tools-0.2.0/src/write_slice.rs b/third_party/rust/byte-tools-0.2.0/src/write_slice.rs new file mode 100644 index 000000000000..827877d82ddd --- /dev/null +++ b/third_party/rust/byte-tools-0.2.0/src/write_slice.rs @@ -0,0 +1,46 @@ +use core::{ptr, mem}; + +macro_rules! write_slice { + ($src:expr, $dst:expr, $ty:ty, $size:expr, $which:ident) => ({ + assert!($size == mem::size_of::<$ty>()); + assert_eq!($dst.len(), $size*$src.len()); + unsafe { + ptr::copy_nonoverlapping( + $src.as_ptr() as *const u8, + $dst.as_mut_ptr(), + $dst.len()); + let tmp: &mut [$ty] = mem::transmute($dst); + for v in tmp[..$src.len()].iter_mut() { + *v = v.$which(); + } + } + }); +} + +/// Write a vector of u32s into a vector of bytes. The values are written in +/// little-endian format. +#[inline] +pub fn write_u32v_le(dst: &mut [u8], src: &[u32]) { + write_slice!(src, dst, u32, 4, to_le); +} + +/// Write a vector of u32s into a vector of bytes. The values are written in +/// big-endian format. +#[inline] +pub fn write_u32v_be(dst: &mut [u8], src: &[u32]) { + write_slice!(src, dst, u32, 4, to_be); +} + +/// Write a vector of u64s into a vector of bytes. The values are written in +/// little-endian format. +#[inline] +pub fn write_u64v_le(dst: &mut [u8], src: &[u64]) { + write_slice!(src, dst, u64, 8, to_le); +} + +/// Write a vector of u64s into a vector of bytes. The values are written in +/// little-endian format. +#[inline] +pub fn write_u64v_be(dst: &mut [u8], src: &[u64]) { + write_slice!(src, dst, u64, 8, to_be); +} diff --git a/third_party/rust/digest-0.7.6/.cargo-checksum.json b/third_party/rust/digest-0.7.6/.cargo-checksum.json new file mode 100644 index 000000000000..bcc3f10575a3 --- /dev/null +++ b/third_party/rust/digest-0.7.6/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"b3667b1e1a3985dd2c9e7873f6945c2d7163ed7da95569f40c2097285a325ec4","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba","src/dev.rs":"c824f834fa8b8c729024e4ec61138e89c26a56bfb6b50295600dddb5ff8fff62","src/digest.rs":"6710ac33c80e6159a2396839794fc76a61b94ab573516a69486457b3e291c793","src/errors.rs":"cff5bf2350bc109ad4f08caacf6780ff1e7016d9995f0847e84e96a8e31ab9d5","src/lib.rs":"bf4e93ebd066513001f3d6d77024ae8addf4df4fd89f76549fd1b73df386f3e4"},"package":"03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90"} \ No newline at end of file diff --git a/third_party/rust/digest-0.7.6/Cargo.toml b/third_party/rust/digest-0.7.6/Cargo.toml new file mode 100644 index 000000000000..d4202475759a --- /dev/null +++ b/third_party/rust/digest-0.7.6/Cargo.toml @@ -0,0 +1,32 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "digest" +version = "0.7.6" +authors = ["RustCrypto Developers"] +description = "Traits for cryptographic hash functions" +documentation = "https://docs.rs/digest" +keywords = ["digest", "crypto", "hash"] +categories = ["cryptography", "no-std"] +license = "MIT/Apache-2.0" +repository = "https://github.com/RustCrypto/traits" +[package.metadata.docs.rs] +features = ["std"] +[dependencies.generic-array] +version = "0.9" + +[features] +dev = [] +std = [] +[badges.travis-ci] +repository = "RustCrypto/traits" diff --git a/third_party/rust/digest-0.7.6/LICENSE-APACHE b/third_party/rust/digest-0.7.6/LICENSE-APACHE new file mode 100644 index 000000000000..78173fa2e753 --- /dev/null +++ b/third_party/rust/digest-0.7.6/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/third_party/rust/digest-0.7.6/LICENSE-MIT b/third_party/rust/digest-0.7.6/LICENSE-MIT new file mode 100644 index 000000000000..8dcb85b30273 --- /dev/null +++ b/third_party/rust/digest-0.7.6/LICENSE-MIT @@ -0,0 +1,25 @@ +Copyright (c) 2017 Artyom Pavlov + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/third_party/rust/digest-0.7.6/src/dev.rs b/third_party/rust/digest-0.7.6/src/dev.rs new file mode 100644 index 000000000000..35778cd6e09f --- /dev/null +++ b/third_party/rust/digest-0.7.6/src/dev.rs @@ -0,0 +1,171 @@ +use super::{Digest, Input, VariableOutput, ExtendableOutput, XofReader}; +use core::fmt::Debug; + +pub struct Test { + pub name: &'static str, + pub input: &'static [u8], + pub output: &'static [u8], +} + +#[macro_export] +macro_rules! new_tests { + ( $( $name:expr ),* ) => { + [$( + Test { + name: $name, + input: include_bytes!(concat!("data/", $name, ".input.bin")), + output: include_bytes!(concat!("data/", $name, ".output.bin")), + }, + )*] + }; + ( $( $name:expr ),+, ) => (new_tests!($($name),+)) +} + +pub fn main_test(tests: &[Test]) { + // Test that it works when accepting the message all at once + for t in tests.iter() { + let mut sh = D::default(); + sh.input(t.input); + + let out = sh.result(); + + assert_eq!(out[..], t.output[..]); + } + + // Test that it works when accepting the message in pieces + for t in tests.iter() { + let mut sh = D::default(); + let len = t.input.len(); + let mut left = len; + while left > 0 { + let take = (left + 1) / 2; + sh.input(&t.input[len - left..take + len - left]); + left = left - take; + } + + let out = sh.result(); + + assert_eq!(out[..], t.output[..]); + } +} + +pub fn variable_test(tests: &[Test]) + where D: Input + VariableOutput + Clone + Debug +{ + let mut buf = [0u8; 1024]; + // Test that it works when accepting the message all at once + for t in tests.iter() { + let mut sh = D::new(t.output.len()).unwrap(); + sh.process(t.input); + + let out = sh.variable_result(&mut buf[..t.output.len()]).unwrap(); + + assert_eq!(out[..], t.output[..]); + } + + // Test that it works when accepting the message in pieces + for t in tests.iter() { + let mut sh = D::new(t.output.len()).unwrap(); + let len = t.input.len(); + let mut left = len; + while left > 0 { + let take = (left + 1) / 2; + sh.process(&t.input[len - left..take + len - left]); + left = left - take; + } + + let out = sh.variable_result(&mut buf[..t.output.len()]).unwrap(); + + assert_eq!(out[..], t.output[..]); + } +} + + +pub fn xof_test(tests: &[Test]) + where D: Input + ExtendableOutput + Default + Debug + Clone +{ + let mut buf = [0u8; 1024]; + // Test that it works when accepting the message all at once + for t in tests.iter() { + let mut sh = D::default(); + sh.process(t.input); + + let out = &mut buf[..t.output.len()]; + sh.xof_result().read(out); + + assert_eq!(out[..], t.output[..]); + } + + // Test that it works when accepting the message in pieces + for t in tests.iter() { + let mut sh = D::default(); + let len = t.input.len(); + let mut left = len; + while left > 0 { + let take = (left + 1) / 2; + sh.process(&t.input[len - left..take + len - left]); + left = left - take; + } + + let out = &mut buf[..t.output.len()]; + sh.xof_result().read(out); + + assert_eq!(out[..], t.output[..]); + } + + // Test reeading from reader byte by byte + for t in tests.iter() { + let mut sh = D::default(); + sh.process(t.input); + + let mut reader = sh.xof_result(); + let out = &mut buf[..t.output.len()]; + for chunk in out.chunks_mut(1) { + reader.read(chunk); + } + + assert_eq!(out[..], t.output[..]); + } +} + +pub fn one_million_a(expected: &[u8]) { + let mut sh = D::default(); + for _ in 0..50000 { + sh.input(&[b'a'; 10]); + } + sh.input(&[b'a'; 500000]); + let out = sh.result(); + assert_eq!(out[..], expected[..]); +} + + +#[macro_export] +macro_rules! bench_digest { + ($name:ident, $engine:path, $bs:expr) => { + #[bench] + fn $name(b: &mut Bencher) { + let mut d = <$engine>::default(); + let data = [0; $bs]; + + b.iter(|| { + d.input(&data); + }); + + b.bytes = $bs; + } + }; + + ($engine:path) => { + extern crate test; + + use test::Bencher; + use digest::Digest; + + bench_digest!(bench1_16, $engine, 1<<4); + bench_digest!(bench2_64, $engine, 1<<6); + bench_digest!(bench3_256, $engine, 1<<8); + bench_digest!(bench4_1k, $engine, 1<<10); + bench_digest!(bench5_4k, $engine, 1<<12); + bench_digest!(bench6_16k, $engine, 1<<14); + } +} diff --git a/third_party/rust/digest-0.7.6/src/digest.rs b/third_party/rust/digest-0.7.6/src/digest.rs new file mode 100644 index 000000000000..ab4ad392645d --- /dev/null +++ b/third_party/rust/digest-0.7.6/src/digest.rs @@ -0,0 +1,86 @@ +use super::{Input, BlockInput, FixedOutput}; +use generic_array::GenericArray; +#[cfg(feature = "std")] +use std::io; + +type Output = GenericArray; + +/// The `Digest` trait specifies an interface common for digest functions. +/// +/// It's a convinience wrapper around `Input`, `FixedOutput`, `BlockInput` and +/// `Default` traits. It also provides additional convenience methods. +pub trait Digest: Input + BlockInput + FixedOutput + Default { + /// Create new hasher instance + fn new() -> Self { + Self::default() + } + + /// Digest input data. This method can be called repeatedly + /// for use with streaming messages. + fn input(&mut self, input: &[u8]) { + self.process(input); + } + + /// Retrieve the digest result. This method consumes digest instance. + fn result(self) -> Output { + self.fixed_result() + } + + /// Convenience function to compute hash of the `data`. It will handle + /// hasher creation, data feeding and finalization. + /// + /// Example: + /// + /// ```rust,ignore + /// println!("{:x}", sha2::Sha256::digest(b"Hello world")); + /// ``` + #[inline] + fn digest(data: &[u8]) -> Output { + let mut hasher = Self::default(); + hasher.process(data); + hasher.fixed_result() + } + + /// Convenience function to compute hash of the string. It's equivalent to + /// `digest(input_string.as_bytes())`. + #[inline] + fn digest_str(str: &str) -> Output { + Self::digest(str.as_bytes()) + } + + /// Convenience function which takes `std::io::Read` as a source and computes + /// value of digest function `D`, e.g. SHA-2, SHA-3, BLAKE2, etc. using 1 KB + /// blocks. + /// + /// Usage example: + /// + /// ```rust,ignore + /// use std::fs; + /// use sha2::{Sha256, Digest}; + /// + /// let mut file = fs::File::open("Cargo.toml")?; + /// let result = Sha256::digest_reader(&mut file)?; + /// println!("{:x}", result); + /// ``` + #[cfg(feature = "std")] + #[inline] + fn digest_reader(source: &mut io::Read) + -> io::Result> + { + let mut hasher = Self::default(); + + let mut buf = [0u8; 8 * 1024]; + + loop { + let len = match source.read(&mut buf) { + Ok(0) => return Ok(hasher.result()), + Ok(len) => len, + Err(ref e) if e.kind() == io::ErrorKind::Interrupted => continue, + Err(e) => Err(e)?, + }; + hasher.process(&buf[..len]); + } + } +} + +impl Digest for D {} diff --git a/third_party/rust/digest-0.7.6/src/errors.rs b/third_party/rust/digest-0.7.6/src/errors.rs new file mode 100644 index 000000000000..7182a31ae93a --- /dev/null +++ b/third_party/rust/digest-0.7.6/src/errors.rs @@ -0,0 +1,37 @@ +use core::fmt; +#[cfg(feature = "std")] +use std::error; + +/// The error type for variable hasher initialization +#[derive(Clone, Copy, Debug, Default)] +pub struct InvalidOutputSize; + +/// The error type for variable hasher result +#[derive(Clone, Copy, Debug, Default)] +pub struct InvalidBufferLength; + +impl fmt::Display for InvalidOutputSize { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str("invalid output size") + } +} + +impl fmt::Display for InvalidBufferLength { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str("invalid buffer length") + } +} + +#[cfg(feature = "std")] +impl error::Error for InvalidOutputSize { + fn description(&self) -> &str { + "invalid output size" + } +} + +#[cfg(feature = "std")] +impl error::Error for InvalidBufferLength { + fn description(&self) -> &str { + "invalid buffer size" + } +} diff --git a/third_party/rust/digest-0.7.6/src/lib.rs b/third_party/rust/digest-0.7.6/src/lib.rs new file mode 100644 index 000000000000..9806caa935a1 --- /dev/null +++ b/third_party/rust/digest-0.7.6/src/lib.rs @@ -0,0 +1,98 @@ +//! This crate provides traits for describing funcionality of cryptographic hash +//! functions. +//! +//! By default std functionality in this crate disabled. (e.g. method for +//! hashing `Read`ers) To enable it turn on `std` feature in your `Cargo.toml` +//! for this crate. +#![cfg_attr(not(feature = "std"), no_std)] +pub extern crate generic_array; + +#[cfg(feature = "std")] +use std as core; +use generic_array::{GenericArray, ArrayLength}; + +mod digest; +mod errors; +#[cfg(feature = "dev")] +pub mod dev; + +pub use errors::{InvalidOutputSize, InvalidBufferLength}; +pub use digest::Digest; + +// `process` is choosen to not overlap with `input` method in the digest trait +// change it on trait alias stabilization + +/// Trait for processing input data +pub trait Input { + /// Digest input data. This method can be called repeatedly + /// for use with streaming messages. + fn process(&mut self, input: &[u8]); +} + +/// Trait to indicate that digest function processes data in blocks of size +/// `BlockSize`. Main usage of this trait is for implementing HMAC generically. +pub trait BlockInput { + type BlockSize: ArrayLength; +} + +/// Trait for returning digest result with the fixed size +pub trait FixedOutput { + type OutputSize: ArrayLength; + + /// Retrieve the digest result. This method consumes digest instance. + fn fixed_result(self) -> GenericArray; +} + +/// The error type for variable digest output +#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct InvalidLength; + +/// Trait for returning digest result with the varaible size +pub trait VariableOutput: core::marker::Sized { + /// Create new hasher instance with given output size. Will return + /// `Err(InvalidLength)` in case if hasher can not work with the given + /// output size. Will always return an error if output size equals to zero. + fn new(output_size: usize) -> Result; + + /// Get output size of the hasher instance provided to the `new` method + fn output_size(&self) -> usize; + + /// Retrieve the digest result into provided buffer. Length of the buffer + /// must be equal to output size provided to the `new` method, otherwise + /// `Err(InvalidLength)` will be returned + fn variable_result(self, buffer: &mut [u8]) -> Result<&[u8], InvalidLength>; +} + +/// Trait for decribing readers which are used to extract extendable output +/// from the resulting state of hash function. +pub trait XofReader { + /// Read output into the `buffer`. Can be called unlimited number of times. + fn read(&mut self, buffer: &mut [u8]); +} + +/// Trait which describes extendable output (XOF) of hash functions. Using this +/// trait you first need to get structure which implements `XofReader`, using +/// which you can read extendable output. +pub trait ExtendableOutput { + type Reader: XofReader; + + /// Finalize hash function and return XOF reader + fn xof_result(self) -> Self::Reader; +} + +/// Macro for defining opaque `Debug` implementation. It will use the following +/// format: "HasherName { ... }". While it's convinient to have it +/// (e.g. for including in other structs), it could be undesirable to leak +/// internall state, which can happen for example through uncareful logging. +#[macro_export] +macro_rules! impl_opaque_debug { + ($state:ty) => { + impl ::core::fmt::Debug for $state { + fn fmt(&self, f: &mut ::core::fmt::Formatter) + -> Result<(), ::core::fmt::Error> + { + write!(f, concat!(stringify!($state), " {{ ... }}")) + } + } + } +} diff --git a/third_party/rust/docopt/.cargo-checksum.json b/third_party/rust/docopt/.cargo-checksum.json index 388f597e7a27..f9897848aac4 100644 --- a/third_party/rust/docopt/.cargo-checksum.json +++ b/third_party/rust/docopt/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"COPYING":"01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f","Cargo.toml":"9b11b3f077cb37e9314fd44a9c385662bebd96f6858e0886e28b00ab1beee421","LICENSE-MIT":"0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f","README.md":"9a9d39001433160095de7a297b51052c91c9ef7f25a94d6f67ebe50343977926","UNLICENSE":"7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c","completions/docopt-wordlist.bash":"213bf1baea244eeb32af3a24a9ad895212cb538e3cdaee3bfed842b11a2a64d8","examples/cargo.rs":"6a5012a3359e574a61607eca0c15add23ea9e312e8f20fb90d6438740483fefd","examples/cp.rs":"35e705c59968c22a965b7ba9afc4b7a3af5d411e929432b2fb6bd2ed08a7c9ce","examples/decode.rs":"85f5033cf6450a771d6be2af819718d316b92fb98b201e247cdbe0eb39039487","examples/hashmap.rs":"9066a7b7192e15b3b667702519645d31926a371bc54ab8d70b211d98458d5a8d","examples/optional_command.rs":"44d8dda079e237ac140b1d81d34d065cb2427a6edb4e60eadaa2c8ceaff0831c","examples/verbose_multiple.rs":"3279c76c7f3bde135deca90085b9f9d5a86ea3bd619e57ddfed35f4200bb5f4a","src/dopt.rs":"df0132f0e4ddc4f0bc6fa5789cf24b5fe01d1a91338dc1431bf93c5a1d6ffc11","src/lib.rs":"e7089315c3ebd4d2774bad8b5a6b2899db6348a44f88dc4253c840bbb389f147","src/parse.rs":"e67d4a5ee95a9fcc1aa5c84e78605f32a1c2bbc5e772de9109ae1ce5fac6f16a","src/synonym.rs":"152b89b6f755222f81ebb63fd3d372d7407aa8046522fc1dcc2e40f417cfc65b","src/test/mod.rs":"1f3eb58d5740f8789dea7bdb2815b1313e948c6f5de9ea6d79cad5bbed484114","src/test/suggestions.rs":"51e044db856a424ef12d2bc2eb541ae922b93d81ac5548767c9c638ccd87d388","src/test/testcases.docopt":"13fcd2948a5625b76f93b98ac7b6cb53ef70c119fc2c5f85d2cb67e56bd4e9c3","src/test/testcases.rs":"cbecfab0c82249a7d8ad193ad5e9e10f45a7a41b37e69cfc025a9cdc6c213f04","src/wordlist.rs":"45ccc3441d1abf072c2079f15b7f5a7af68bd2989c99a8acd5554133fa8db7fa"},"package":"db2906c2579b5b7207fc1e328796a9a8835dc44e22dbe8e460b1d636f9a7b225"} \ No newline at end of file +{"files":{"COPYING":"01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f","Cargo.toml":"ef181d3a88c48c794a7f1a97974c83045bfa956eb5b1b8e5efc1f8c92938a135","LICENSE-MIT":"0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f","Makefile":"db1787c5c7d2daea87d92c0549976a18bbe0601acb2ab5bd8dc5edb9f2b46e63","README.md":"3b46f46ffd466fc3aa36becb0ce194820b4669ca75d0c186620abef6115317e0","UNLICENSE":"7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c","completions/docopt-wordlist.bash":"213bf1baea244eeb32af3a24a9ad895212cb538e3cdaee3bfed842b11a2a64d8","ctags.rust":"3d128d3cc59f702e68953ba2fe6c3f46bc6991fc575308db060482d5da0c79f3","examples/cargo.rs":"6a5012a3359e574a61607eca0c15add23ea9e312e8f20fb90d6438740483fefd","examples/cp.rs":"35e705c59968c22a965b7ba9afc4b7a3af5d411e929432b2fb6bd2ed08a7c9ce","examples/decode.rs":"85f5033cf6450a771d6be2af819718d316b92fb98b201e247cdbe0eb39039487","examples/hashmap.rs":"9066a7b7192e15b3b667702519645d31926a371bc54ab8d70b211d98458d5a8d","examples/optional_command.rs":"44d8dda079e237ac140b1d81d34d065cb2427a6edb4e60eadaa2c8ceaff0831c","examples/verbose_multiple.rs":"3279c76c7f3bde135deca90085b9f9d5a86ea3bd619e57ddfed35f4200bb5f4a","scripts/mk-testcases":"649f37d391650175c8462171f7a98fce81735c9317630a5eb13db532ddb22976","session.vim":"1d51566b00f8ff2021d56948c1c55f123959f3e24879a6ad9337eccb11fc8fe9","src/dopt.rs":"4bbdd90fca8f71e4d898bc0656d09dce219e255d4b92671716da8fce5180572a","src/lib.rs":"e916a13a1e7f16566b768f4b9906d2d1a7c31a0524767350b1063d9255a03997","src/parse.rs":"e67d4a5ee95a9fcc1aa5c84e78605f32a1c2bbc5e772de9109ae1ce5fac6f16a","src/synonym.rs":"152b89b6f755222f81ebb63fd3d372d7407aa8046522fc1dcc2e40f417cfc65b","src/test/mod.rs":"1f3eb58d5740f8789dea7bdb2815b1313e948c6f5de9ea6d79cad5bbed484114","src/test/suggestions.rs":"51e044db856a424ef12d2bc2eb541ae922b93d81ac5548767c9c638ccd87d388","src/test/testcases.docopt":"13fcd2948a5625b76f93b98ac7b6cb53ef70c119fc2c5f85d2cb67e56bd4e9c3","src/test/testcases.rs":"cbecfab0c82249a7d8ad193ad5e9e10f45a7a41b37e69cfc025a9cdc6c213f04","src/wordlist.rs":"45ccc3441d1abf072c2079f15b7f5a7af68bd2989c99a8acd5554133fa8db7fa"},"package":"d8acd393692c503b168471874953a2531df0e9ab77d0b6bbc582395743300a4a"} \ No newline at end of file diff --git a/third_party/rust/docopt/Cargo.toml b/third_party/rust/docopt/Cargo.toml index 65827838569e..e8141be60667 100644 --- a/third_party/rust/docopt/Cargo.toml +++ b/third_party/rust/docopt/Cargo.toml @@ -12,9 +12,8 @@ [package] name = "docopt" -version = "1.0.2" +version = "0.8.3" authors = ["Andrew Gallant "] -exclude = ["/.travis.yml", "/Makefile", "/ctags.rust", "/scripts/*", "/session.vim"] description = "Command line argument parsing." homepage = "https://github.com/docopt/docopt.rs" documentation = "http://burntsushi.net/rustdoc/docopt/" @@ -36,7 +35,7 @@ doc = false version = "1" [dependencies.regex] -version = "1.0.3" +version = "0.2" [dependencies.serde] version = "1.0" @@ -45,4 +44,4 @@ version = "1.0" version = "1.0" [dependencies.strsim] -version = "0.7" +version = "0.6" diff --git a/third_party/rust/docopt/Makefile b/third_party/rust/docopt/Makefile new file mode 100644 index 000000000000..30ededbf02e0 --- /dev/null +++ b/third_party/rust/docopt/Makefile @@ -0,0 +1,18 @@ +all: + @echo Nothing to do + +docs: $(LIB_FILES) + cargo doc + # WTF is rustdoc doing? + in-dir ./target/doc fix-perms + rscp ./target/doc/* gopher:~/www/burntsushi.net/rustdoc/ + +src/test/testcases.rs: src/test/testcases.docopt scripts/mk-testcases + ./scripts/mk-testcases ./src/test/testcases.docopt > ./src/test/testcases.rs + +ctags: + ctags --recurse --options=ctags.rust --languages=Rust + +push: + git push github master + git push origin master diff --git a/third_party/rust/docopt/README.md b/third_party/rust/docopt/README.md index 6abe57c1a49c..cc80c8bb1181 100644 --- a/third_party/rust/docopt/README.md +++ b/third_party/rust/docopt/README.md @@ -26,11 +26,15 @@ This crate is fully compatible with Cargo. Just add it to your `Cargo.toml`: ```toml [dependencies] -docopt = "1" +docopt = "0.8" serde = "1.0" # if you're using `derive(Deserialize)` serde_derive = "1.0" # if you're using `derive(Deserialize)` ``` +If you want to use the macro, then add `docopt_macros = "0.8"` instead. +Note that the **`docopt!` macro only works on a nightly Rust compiler** because +it is a compiler plugin. + ### Quick example @@ -83,6 +87,49 @@ fn main() { } ``` +Here is the same example, but with the use of the `docopt!` macro, which will +*generate a struct for you*. Note that this uses a compiler plugin, so it only +works on a **nightly Rust compiler**: + +```rust +#![feature(plugin)] +#![plugin(docopt_macros)] + +#[macro_use] +extern crate serde_derive; +extern crate docopt; + +use docopt::Docopt; + +docopt!(Args derive Debug, " +Naval Fate. + +Usage: + naval_fate.py ship new ... + naval_fate.py ship move [--speed=] + naval_fate.py ship shoot + naval_fate.py mine (set|remove) [--moored | --drifting] + naval_fate.py (-h | --help) + naval_fate.py --version + +Options: + -h --help Show this screen. + --version Show version. + --speed= Speed in knots [default: 10]. + --moored Moored (anchored) mine. + --drifting Drifting mine. +"); + +fn main() { + let args: Args = Args::docopt().deserialize().unwrap_or_else(|e| e.exit()); + println!("{:?}", args); +} +``` + +The `Args` struct has one static method defined for it: `docopt`. The method +returns a normal `Docopt` value, which can be used to set configuration +options, `argv` and parse or decode command line arguments. + ### Struct field name mapping @@ -98,6 +145,125 @@ build => cmd_build ``` +### Data validation example + +Here's another example that shows how to specify the types of your arguments: + +```rust +#![feature(plugin)] +#![plugin(docopt_macros)] + +#[macro_use] +extern crate serde_derive; + +extern crate docopt; + +docopt!(Args, "Usage: add ", arg_x: i32, arg_y: i32); + +fn main() { + let args: Args = Args::docopt().deserialize().unwrap_or_else(|e| e.exit()); + println!("x: {}, y: {}", args.arg_x, args.arg_y); +} +``` + +In this example, specific type annotations were added. They will be +automatically inserted into the generated struct. You can override as many (or +as few) fields as you want. If you don't specify a type, then one of `bool`, +`u64`, `String` or `Vec` will be chosen depending on the type of +argument. In this case, both `arg_x` and `arg_y` would have been `String`. + +If any value cannot be decoded into a value with the right type, then an error +will be shown to the user. + +And of course, you don't need the macro to do this. You can do the same thing +with a manually written struct too. + + +### Modeling `rustc` + +Here's a selected subset for some of `rustc`'s options. This also shows how to +restrict values to a list of choices via an `enum` type and demonstrates more +Docopt features. + +```rust +#![feature(plugin)] +#![plugin(docopt_macros)] + +#[macro_use] +extern crate serde_derive; +extern crate serde; + +extern crate docopt; + +use serde::de; + +docopt!(Args derive Debug, " +Usage: rustc [options] [--cfg SPEC... -L PATH...] INPUT + rustc (--help | --version) + +Options: + -h, --help Show this message. + --version Show the version of rustc. + --cfg SPEC Configure the compilation environment. + -L PATH Add a directory to the library search path. + --emit TYPE Configure the output that rustc will produce. + Valid values: asm, ir, bc, obj, link. + --opt-level LEVEL Optimize with possible levels 0-3. +", flag_opt_level: Option, flag_emit: Option); + +#[derive(Deserialize, Debug)] +enum Emit { Asm, Ir, Bc, Obj, Link } + +#[derive(Debug)] +enum OptLevel { Zero, One, Two, Three } + +impl<'de> de::Deserialize<'de> for OptLevel { + fn deserialize(deserializer: D) -> Result + where D: de::Deserializer<'de> + { + let level = match u8::deserialize(deserializer)? { + 0 => OptLevel::Zero, + 1 => OptLevel::One, + 2 => OptLevel::Two, + 3 => OptLevel::Three, + n => { + let value = de::Unexpected::Unsigned(n as u64); + let msg = "expected an integer between 0 and 3"; + return Err(de::Error::invalid_value(value, &msg)); + } + }; + Ok(level) + } +} + +fn main() { + let args: Args = Args::docopt().deserialize().unwrap_or_else(|e| e.exit()); + println!("{:?}", args); +} +``` + +### Viewing the generated struct + +Generating a struct is pretty magical, but if you want, you can look at it by +expanding all macros. Say you wrote the above example for `Usage: add ` +into a file called `add.rs`. Then running: + +```bash +rustc -L path/containing/docopt/lib -Z unstable-options --pretty=expanded add.rs +``` + +Will show all macros expanded. The `path/containing/docopt/lib` is usually +`target/debug/deps` or `target/release/deps` in a cargo project. In the generated code, you should be +able to find the generated struct: + +```rust +struct Args { + pub arg_x: int, + pub arg_y: int, +} +``` + + ### Traditional Docopt API The reference implementation of Docopt returns a Python dictionary with names diff --git a/third_party/rust/docopt/ctags.rust b/third_party/rust/docopt/ctags.rust new file mode 100644 index 000000000000..b42edf7579a6 --- /dev/null +++ b/third_party/rust/docopt/ctags.rust @@ -0,0 +1,11 @@ +--langdef=Rust +--langmap=Rust:.rs +--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?static[ \t]+([a-zA-Z0-9_]+)/\2/c,consts,static constants/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\2/t,traits,traits/ +--regex-Rust=/^[ \t]*(pub[ \t]+)?impl([ \t\n]+<.*>)?[ \t]+([a-zA-Z0-9_]+)/\3/i,impls,trait implementations/ +--regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/ diff --git a/third_party/rust/docopt/scripts/mk-testcases b/third_party/rust/docopt/scripts/mk-testcases new file mode 100755 index 000000000000..9f4f783471fb --- /dev/null +++ b/third_party/rust/docopt/scripts/mk-testcases @@ -0,0 +1,80 @@ +#!/usr/bin/env python2 + +from __future__ import absolute_import, division, print_function +import argparse +import json +import re + +retests = re.compile('(.*?)"""(.*?)(r"""|\s*$)', re.DOTALL) +reinvokes = re.compile('(.+?$)(.+?)\s*(\$|\Z)', re.DOTALL | re.MULTILINE) + +p = argparse.ArgumentParser( + description="Outputs src/test/testcases.rs to stdout") +p.add_argument("testcases", metavar="FILE", + help="The testcases.docopt language agnostic test suite.") +args = p.parse_args() + +with open(args.testcases) as f: + alltests = f.read() + +alltests = re.sub('^r"""', '', alltests) +alltests = re.sub('^\s*#.*$', '', alltests, flags=re.MULTILINE) + +tests = [] # [{usage, args, expect}] (expect is None ==> user-error) +for m in retests.finditer(alltests): + usage, invokes = m.group(1).strip(), m.group(2).strip() + assert invokes.startswith('$'), 'Bad test: "%s"' % invokes + invokes = re.sub('^\$', '', invokes) + + for mi in reinvokes.finditer(invokes): + invoke, expect = mi.group(1).strip(), mi.group(2).strip() + err = expect.startswith('"user-error"') + tests.append({ + 'usage': usage, + 'args': invoke.split()[1:], + 'expect': None if err else json.loads(expect), + }) + + +def show_test(i, t): + def show_expect(e): + kvs = [] + for k, v in e.iteritems(): + kvs.append('("%s", %s)' % (k, show_value(v))) + return ', '.join(kvs) + def show_value(v): + if v is None: + return 'Plain(None)' + elif isinstance(v, basestring): + return 'Plain(Some("%s".to_string()))' % v + elif isinstance(v, bool): + return 'Switch(%s)' % ('true' if v else 'false') + elif isinstance(v, int): + return 'Counted(%d)' % v + elif isinstance(v, list): + elms = ', '.join(['"%s".to_string()' % el for el in v]) + return 'List(vec!(%s))' % elms + else: + raise ValueError('Unrecognized value: "%s" (type: %s)' + % (v, type(v))) + + args = ', '.join(['"%s"' % arg for arg in t['args']]) + if t['expect'] is None: + return 'test_user_error!(test_%d_testcases, "%s", &[%s]);' \ + % (i, t['usage'], args) + else: + expect = show_expect(t['expect']) + return 'test_expect!(test_%d_testcases, "%s", &[%s], vec!(%s));' \ + % (i, t['usage'], args, expect) + +print( +"""// !!! ATTENTION !!! +// This file is automatically generated by `scripts/mk-testcases`. +// Please do not edit this file directly! + +use Value::{{Switch, Counted, Plain, List}}; +use test::{{get_args, map_from_alist, same_args}}; + +{tests} +""".format(tests='\n\n'.join([show_test(i, t) for i, t in enumerate(tests)]))) + diff --git a/third_party/rust/docopt/session.vim b/third_party/rust/docopt/session.vim new file mode 100644 index 000000000000..59eea67a1a47 --- /dev/null +++ b/third_party/rust/docopt/session.vim @@ -0,0 +1,3 @@ +au BufWritePost *.rs silent!make ctags > /dev/null 2>&1 +" let g:syntastic_rust_rustc_fname = "src/lib.rs" +" let g:syntastic_rust_rustc_args = "--no-trans" diff --git a/third_party/rust/docopt/src/dopt.rs b/third_party/rust/docopt/src/dopt.rs index e9b676130bf0..9c803023dc5d 100644 --- a/third_party/rust/docopt/src/dopt.rs +++ b/third_party/rust/docopt/src/dopt.rs @@ -307,6 +307,7 @@ impl Docopt { } #[doc(hidden)] + // Exposed for use in `docopt_macros`. pub fn parser(&self) -> &Parser { &self.p } diff --git a/third_party/rust/docopt/src/lib.rs b/third_party/rust/docopt/src/lib.rs index 7112c8bbcb8b..c7ae8d123df0 100644 --- a/third_party/rust/docopt/src/lib.rs +++ b/third_party/rust/docopt/src/lib.rs @@ -182,6 +182,53 @@ //! assert_eq!(args.flag_emit, Some(Emit::Ir)); //! # } //! ``` +//! +//! # The `docopt!` macro +//! +//! This package comes bundled with an additional crate, `docopt_macros`, +//! which provides a `docopt!` syntax extension. Its purpose is to automate +//! the creation of a Rust struct from a Docopt usage string. In particular, +//! this provides a single point of truth about the definition of command line +//! arguments in your program. +//! +//! Another advantage of using the macro is that errors in your Docopt usage +//! string will be caught at compile time. Stated differently, your program +//! will not compile with an invalid Docopt usage string. +//! +//! The example above using type based decoding can be simplified to this: +//! +//! ```ignore +//! #![feature(plugin)] +//! #![plugin(docopt_macros)] +//! +//! extern crate serde; +//! +//! extern crate docopt; +//! +//! // Write the Docopt usage string with the `docopt!` macro. +//! docopt!(Args, " +//! Usage: cp [-a] +//! cp [-a] ... +//! +//! Options: +//! -a, --archive Copy everything. +//! ") +//! +//! fn main() { +//! let argv = || vec!["cp", "-a", "file1", "file2", "dest/"]; +//! +//! // Your `Args` struct has a single static method defined on it, +//! // `docopt`, which will return a normal `Docopt` value. +//! let args: Args = Args::docopt().deserialize().unwrap_or_else(|e| e.exit()); +//! +//! // Now access your argv values. +//! fn s(x: &str) -> String { x.to_string() } +//! assert!(args.flag_archive); +//! assert_eq!(args.arg_source, vec![s("file1"), s("file2")]); +//! assert_eq!(args.arg_dir, s("dest/")); +//! assert_eq!(args.arg_dest, s("")); +//! } +//! ``` #![crate_name = "docopt"] #![doc(html_root_url = "http://burntsushi.net/rustdoc/docopt")] diff --git a/third_party/rust/ena/.cargo-checksum.json b/third_party/rust/ena/.cargo-checksum.json index 115374ad9f81..c9d8c9db902e 100644 --- a/third_party/rust/ena/.cargo-checksum.json +++ b/third_party/rust/ena/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"479607f839ec311f5b48754953c3b33bd2d170d2bcb3008e904bef21ecad7a6d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720","README.md":"4b02d7ebfb188b1f2cbef20ade3082197046ccaa89e49d2bcdef6102d48919e3","measurements.txt":"b209f98f2bc696904a48829e86952f4f09b59e4e685f7c12087c59d05ed31829","src/bitvec.rs":"c6c66c348776ff480b7ff6e4a3e0f64554a4194266f614408b45b5e3c324ec0a","src/lib.rs":"294aabf6fb846dbe35bba837d70ea9115f20cd808995a318c0fccb05f91d096f","src/snapshot_vec.rs":"4935b5eb8292e3b62d662ca01d0baef3d6b341f5479811d837e872ebc3c8518f","src/unify/backing_vec.rs":"0bcc5cd9d7a8bf1fd17e87b6388eeb0f9e3c21ed280fa31ab5dcc4a1ee69fcca","src/unify/mod.rs":"1bed8bd5c8f804fb4c225ed309940ede74b05e58d64f6182ff1ea3895c18a930","src/unify/tests.rs":"b18974faeebdf2c03e82035fe7281bf4db3360ab10ce34b1d3441547836b19f2"},"package":"25b4e5febb25f08c49f1b07dc33a182729a6b21edfb562b5aef95f78e0dbe5bb"} \ No newline at end of file +{"files":{"Cargo.toml":"13e445b6bc53bf1ea2379fd2ec33205daa9b1b74d5a41e4dd9ea8cb966185c5a","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720","README.md":"4b02d7ebfb188b1f2cbef20ade3082197046ccaa89e49d2bcdef6102d48919e3","measurements.txt":"b209f98f2bc696904a48829e86952f4f09b59e4e685f7c12087c59d05ed31829","src/bitvec.rs":"c6c66c348776ff480b7ff6e4a3e0f64554a4194266f614408b45b5e3c324ec0a","src/lib.rs":"294aabf6fb846dbe35bba837d70ea9115f20cd808995a318c0fccb05f91d096f","src/snapshot_vec.rs":"abc649bb42dc8592741b02d53ba1ed5f6ad64710b971070872b0c42665d73c93","src/unify/backing_vec.rs":"7d57036ce671169893d069f94454f1c4b95104517ffd62859f180d80cbe490e5","src/unify/mod.rs":"9fc90951778be635fbbf4fba8b3a0a4eb21e2c955660f019377465ac773b9563","src/unify/tests.rs":"b18974faeebdf2c03e82035fe7281bf4db3360ab10ce34b1d3441547836b19f2"},"package":"88dc8393b3c7352f94092497f6b52019643e493b6b890eb417cdb7c46117e621"} \ No newline at end of file diff --git a/third_party/rust/ena/Cargo.toml b/third_party/rust/ena/Cargo.toml index 008cc2bdd20d..4d93b30ace96 100644 --- a/third_party/rust/ena/Cargo.toml +++ b/third_party/rust/ena/Cargo.toml @@ -12,7 +12,7 @@ [package] name = "ena" -version = "0.10.1" +version = "0.9.3" authors = ["Niko Matsakis "] description = "Union-find, congruence closure, and other unification code. Based on code from rustc." homepage = "https://github.com/nikomatsakis/ena" diff --git a/third_party/rust/ena/src/snapshot_vec.rs b/third_party/rust/ena/src/snapshot_vec.rs index d828b0299281..172ae150cfa5 100644 --- a/third_party/rust/ena/src/snapshot_vec.rs +++ b/third_party/rust/ena/src/snapshot_vec.rs @@ -75,20 +75,13 @@ pub trait SnapshotVecDelegate { fn reverse(values: &mut Vec, action: Self::Undo); } -// HACK(eddyb) manual impl avoids `Default` bound on `D`. -impl Default for SnapshotVec { - fn default() -> Self { +impl SnapshotVec { + pub fn new() -> SnapshotVec { SnapshotVec { values: Vec::new(), undo_log: Vec::new(), } } -} - -impl SnapshotVec { - pub fn new() -> Self { - Self::default() - } pub fn with_capacity(c: usize) -> SnapshotVec { SnapshotVec { @@ -282,12 +275,8 @@ impl Extend for SnapshotVec { where T: IntoIterator, { - let initial_len = self.values.len(); - self.values.extend(iterable); - let final_len = self.values.len(); - - if self.in_snapshot() { - self.undo_log.extend((initial_len..final_len).map(|len| NewElem(len))); + for item in iterable { + self.push(item); } } } diff --git a/third_party/rust/ena/src/unify/backing_vec.rs b/third_party/rust/ena/src/unify/backing_vec.rs index f1e720cd0c2b..87363bad2447 100644 --- a/third_party/rust/ena/src/unify/backing_vec.rs +++ b/third_party/rust/ena/src/unify/backing_vec.rs @@ -7,19 +7,18 @@ use std::marker::PhantomData; use super::{VarValue, UnifyKey, UnifyValue}; #[allow(dead_code)] // rustc BUG -#[allow(type_alias_bounds)] -type Key = ::Key; +type Key = ::Key; /// Largely internal trait implemented by the unification table /// backing store types. The most common such type is `InPlace`, /// which indicates a standard, mutable unification table. -pub trait UnificationStore: - ops::Index>> + Clone + Default -{ +pub trait UnificationStore: ops::Index>> + Clone { type Key: UnifyKey; type Value: UnifyValue; type Snapshot; + fn new() -> Self; + fn start_snapshot(&mut self) -> Self::Snapshot; fn rollback_to(&mut self, snapshot: Self::Snapshot); @@ -52,18 +51,16 @@ pub struct InPlace { values: sv::SnapshotVec> } -// HACK(eddyb) manual impl avoids `Default` bound on `K`. -impl Default for InPlace { - fn default() -> Self { - InPlace { values: sv::SnapshotVec::new() } - } -} - impl UnificationStore for InPlace { type Key = K; type Value = K::Value; type Snapshot = sv::Snapshot; + #[inline] + fn new() -> Self { + InPlace { values: sv::SnapshotVec::new() } + } + #[inline] fn start_snapshot(&mut self) -> Self::Snapshot { self.values.start_snapshot() @@ -135,20 +132,17 @@ pub struct Persistent { values: DVec> } -// HACK(eddyb) manual impl avoids `Default` bound on `K`. -#[cfg(feature = "persistent")] -impl Default for Persistent { - fn default() -> Self { - Persistent { values: DVec::new() } - } -} - #[cfg(feature = "persistent")] impl UnificationStore for Persistent { type Key = K; type Value = K::Value; type Snapshot = Self; + #[inline] + fn new() -> Self { + Persistent { values: DVec::new() } + } + #[inline] fn start_snapshot(&mut self) -> Self::Snapshot { self.clone() diff --git a/third_party/rust/ena/src/unify/mod.rs b/third_party/rust/ena/src/unify/mod.rs index d8e871a725ab..0f65e7603769 100644 --- a/third_party/rust/ena/src/unify/mod.rs +++ b/third_party/rust/ena/src/unify/mod.rs @@ -174,20 +174,18 @@ pub struct VarValue { // FIXME pub /// cloning the table is an O(1) operation. /// - This implies that ordinary operations are quite a bit slower though. /// - Requires the `persistent` feature be selected in your Cargo.toml file. -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug)] pub struct UnificationTable { /// Indicates the current value of each key. values: S, } /// A unification table that uses an "in-place" vector. -#[allow(type_alias_bounds)] -pub type InPlaceUnificationTable = UnificationTable>; +pub type InPlaceUnificationTable = UnificationTable>; /// A unification table that uses a "persistent" vector. #[cfg(feature = "persistent")] -#[allow(type_alias_bounds)] -pub type PersistentUnificationTable = UnificationTable>; +pub type PersistentUnificationTable = UnificationTable>; /// At any time, users may snapshot a unification table. The changes /// made during the snapshot may either be *committed* or *rolled back*. @@ -239,7 +237,9 @@ impl VarValue { impl UnificationTable { pub fn new() -> Self { - Self::default() + UnificationTable { + values: S::new() + } } /// Starts a new snapshot. Each snapshot must be either diff --git a/third_party/rust/generic-array-0.9.0/.cargo-checksum.json b/third_party/rust/generic-array-0.9.0/.cargo-checksum.json new file mode 100644 index 000000000000..6616b505b573 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"87ff65d640c137c26d338f96e21e769af1e1b2e7fa615b40a1bcc755448bb118","LICENSE":"ad4fcfaf8d5b12b97409c137a03d4a4e4b21024c65c54f976cc3b609c1bd5b0f","README.md":"9a1a45416eac57050036b13df6ec84d21d555e820726af3c782896bd9d37d94b","rustfmt.toml":"2a298b4ce1fe6e16b8f281a0035567b8eb15042ed3062729fd28224f29c2f75a","src/arr.rs":"cc1ea0a9ef6a524b90767cc8a89f6b939394a2948a645ed313c0bf5ce5a258a4","src/hex.rs":"bfbf304fb4dea6f7edc0569b38bf2ac7657ce089c5761891321722509e3b5076","src/impl_serde.rs":"805885478728b3c205b842d46deb377b7dd6dd4c4c50254064431f49f0981a2a","src/impls.rs":"8c54e294a82a2bf344bdcb9949b8a84903fb65698d6b1b1e0ab9f5e7847be64f","src/iter.rs":"e52217f04d0dc046f13ef2e3539b90eabd4d55bb85cf40f76ba0bf86d5e55ef0","src/lib.rs":"da93fa505eee94b40fce0fe98e26ed3bb4d2bc4d4869af01598b6e54fc9c0f8d","tests/hex.rs":"e909bc0564e7d52c5fcf172dfc0fac7085010c6a21d38581bf73a54ab2e256e1","tests/import_name.rs":"1235729ecbde47fc9a38b3bf35c750a53ed55e3cf967c9d2b24fd759dc9e9e0c","tests/mod.rs":"f4100c5338906c038636f98f4d2b3d272f59580662afa89d915eafb96d7bbcf9"},"package":"ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d"} \ No newline at end of file diff --git a/third_party/rust/generic-array-0.9.0/Cargo.toml b/third_party/rust/generic-array-0.9.0/Cargo.toml new file mode 100644 index 000000000000..07c6064694ee --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/Cargo.toml @@ -0,0 +1,32 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "generic-array" +version = "0.9.0" +authors = ["Bartłomiej Kamiński "] +description = "Generic types implementing functionality of arrays" +documentation = "http://fizyk20.github.io/generic-array/generic_array/" +license = "MIT" +repository = "https://github.com/fizyk20/generic-array.git" + +[lib] +name = "generic_array" +[dependencies.typenum] +version = "1.9" + +[dependencies.serde] +version = "1.0" +optional = true +default-features = false +[dev-dependencies.serde_json] +version = "1.0" diff --git a/third_party/rust/generic-array-0.9.0/LICENSE b/third_party/rust/generic-array-0.9.0/LICENSE new file mode 100644 index 000000000000..5968bccccf99 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Bartłomiej Kamiński + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/third_party/rust/generic-array-0.9.0/README.md b/third_party/rust/generic-array-0.9.0/README.md new file mode 100644 index 000000000000..0864ed62736a --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/README.md @@ -0,0 +1,34 @@ +[![Crates.io](https://img.shields.io/crates/v/generic-array.svg)](https://crates.io/crates/generic-array) +[![Build Status](https://travis-ci.org/fizyk20/generic-array.svg?branch=master)](https://travis-ci.org/fizyk20/generic-array) +# generic-array + +This crate implements generic array types for Rust. + +[Documentation](http://fizyk20.github.io/generic-array/generic_array/) + +## Usage + +The Rust arrays `[T; N]` are problematic in that they can't be used generically with respect to `N`, so for example this won't work: + +```rust +struct Foo { + data: [i32; N] +} +``` + +**generic-array** defines a new trait `ArrayLength` and a struct `GenericArray>`, which let the above be implemented as: + +```rust +struct Foo> { + data: GenericArray +} +``` + +To actually define a type implementing `ArrayLength`, you can use unsigned integer types defined in [typenum](https://github.com/paholg/typenum) crate - for example, `GenericArray` would work almost like `[T; 5]` :) + +In version 0.1.1 an `arr!` macro was introduced, allowing for creation of arrays as shown below: + +```rust +let array = arr![u32; 1, 2, 3]; +assert_eq!(array[2], 3); +``` diff --git a/third_party/rust/generic-array-0.9.0/rustfmt.toml b/third_party/rust/generic-array-0.9.0/rustfmt.toml new file mode 100644 index 000000000000..3dc0db27b317 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/rustfmt.toml @@ -0,0 +1,3 @@ +reorder_imports = true +reorder_imported_names = true +use_try_shorthand = true diff --git a/third_party/rust/generic-array-0.9.0/src/arr.rs b/third_party/rust/generic-array-0.9.0/src/arr.rs new file mode 100644 index 000000000000..51d87f63ca7e --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/arr.rs @@ -0,0 +1,57 @@ +//! Implementation for `arr!` macro. + +use super::ArrayLength; +use core::ops::Add; +use typenum::U1; + +/// Helper trait for `arr!` macro +pub trait AddLength>: ArrayLength { + /// Resulting length + type Output: ArrayLength; +} + +impl AddLength for N1 +where + N1: ArrayLength + Add, + N2: ArrayLength, + >::Output: ArrayLength, +{ + type Output = >::Output; +} + +/// Helper type for `arr!` macro +pub type Inc = >::Output; + +#[doc(hidden)] +#[macro_export] +macro_rules! arr_impl { + ($T:ty; $N:ty, [$($x:expr),*], []) => ({ + unsafe { $crate::transmute::<_, $crate::GenericArray<$T, $N>>([$($x),*]) } + }); + ($T:ty; $N:ty, [], [$x1:expr]) => ( + arr_impl!($T; $crate::arr::Inc<$T, $N>, [$x1 as $T], []) + ); + ($T:ty; $N:ty, [], [$x1:expr, $($x:expr),+]) => ( + arr_impl!($T; $crate::arr::Inc<$T, $N>, [$x1 as $T], [$($x),*]) + ); + ($T:ty; $N:ty, [$($y:expr),+], [$x1:expr]) => ( + arr_impl!($T; $crate::arr::Inc<$T, $N>, [$($y),*, $x1 as $T], []) + ); + ($T:ty; $N:ty, [$($y:expr),+], [$x1:expr, $($x:expr),+]) => ( + arr_impl!($T; $crate::arr::Inc<$T, $N>, [$($y),*, $x1 as $T], [$($x),*]) + ); +} + +/// Macro allowing for easy generation of Generic Arrays. +/// Example: `let test = arr![u32; 1, 2, 3];` +#[macro_export] +macro_rules! arr { + ($T:ty;) => ({ + unsafe { $crate::transmute::<[$T; 0], $crate::GenericArray<$T, $crate::typenum::U0>>([]) } + }); + ($T:ty; $($x:expr),*) => ( + arr_impl!($T; $crate::typenum::U0, [], [$($x),*]) + ); + ($($x:expr,)+) => (arr![$($x),*]); + () => ("""Macro requires a type, e.g. `let array = arr![u32; 1, 2, 3];`") +} diff --git a/third_party/rust/generic-array-0.9.0/src/hex.rs b/third_party/rust/generic-array-0.9.0/src/hex.rs new file mode 100644 index 000000000000..1ce5332f781e --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/hex.rs @@ -0,0 +1,101 @@ +//! Generic array are commonly used as a return value for hash digests, so +//! it's a good idea to allow to hexlify them easily. This module implements +//! `std::fmt::LowerHex` and `std::fmt::UpperHex` traits. +//! +//! Example: +//! +//! ```rust +//! # #[macro_use] +//! # extern crate generic_array; +//! # extern crate typenum; +//! # fn main() { +//! let array = arr![u8; 10, 20, 30]; +//! assert_eq!(format!("{:x}", array), "0a141e"); +//! # } +//! ``` +//! + +use {ArrayLength, GenericArray}; +use core::fmt; +use core::ops::Add; +use core::str; +use typenum::*; + +static LOWER_CHARS: &'static [u8] = b"0123456789abcdef"; +static UPPER_CHARS: &'static [u8] = b"0123456789ABCDEF"; + +impl> fmt::LowerHex for GenericArray +where + T: Add, + >::Output: ArrayLength, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let max_digits = f.precision().unwrap_or_else(|| self.len()); + + if T::to_usize() < 1024 { + // For small arrays use a stack allocated + // buffer of 2x number of bytes + let mut res = GenericArray::>::default(); + + for (i, c) in self.iter().take(max_digits).enumerate() { + res[i * 2] = LOWER_CHARS[(c >> 4) as usize]; + res[i * 2 + 1] = LOWER_CHARS[(c & 0xF) as usize]; + } + f.write_str( + unsafe { str::from_utf8_unchecked(&res[..max_digits * 2]) }, + )?; + } else { + // For large array use chunks of up to 1024 bytes (2048 hex chars) + let mut buf = [0u8; 2048]; + + for chunk in self[..max_digits].chunks(1024) { + for (i, c) in chunk.iter().enumerate() { + buf[i * 2] = LOWER_CHARS[(c >> 4) as usize]; + buf[i * 2 + 1] = LOWER_CHARS[(c & 0xF) as usize]; + } + f.write_str(unsafe { + str::from_utf8_unchecked(&buf[..chunk.len() * 2]) + })?; + } + } + Ok(()) + } +} + +impl> fmt::UpperHex for GenericArray +where + T: Add, + >::Output: ArrayLength, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let max_digits = f.precision().unwrap_or_else(|| self.len()); + + if T::to_usize() < 1024 { + // For small arrays use a stack allocated + // buffer of 2x number of bytes + let mut res = GenericArray::>::default(); + + for (i, c) in self.iter().take(max_digits).enumerate() { + res[i * 2] = UPPER_CHARS[(c >> 4) as usize]; + res[i * 2 + 1] = UPPER_CHARS[(c & 0xF) as usize]; + } + f.write_str( + unsafe { str::from_utf8_unchecked(&res[..max_digits * 2]) }, + )?; + } else { + // For large array use chunks of up to 1024 bytes (2048 hex chars) + let mut buf = [0u8; 2048]; + + for chunk in self[..max_digits].chunks(1024) { + for (i, c) in chunk.iter().enumerate() { + buf[i * 2] = UPPER_CHARS[(c >> 4) as usize]; + buf[i * 2 + 1] = UPPER_CHARS[(c & 0xF) as usize]; + } + f.write_str(unsafe { + str::from_utf8_unchecked(&buf[..chunk.len() * 2]) + })?; + } + } + Ok(()) + } +} diff --git a/third_party/rust/generic-array-0.9.0/src/impl_serde.rs b/third_party/rust/generic-array-0.9.0/src/impl_serde.rs new file mode 100644 index 000000000000..fd7f4908053b --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/impl_serde.rs @@ -0,0 +1,68 @@ +//! Serde serialization/deserialization implementation + +use {ArrayLength, GenericArray}; +use core::fmt; +use core::marker::PhantomData; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde::de::{self, SeqAccess, Visitor}; + +impl Serialize for GenericArray +where + T: Serialize, + N: ArrayLength, +{ + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.collect_seq(self.iter()) + } +} + +struct GAVisitor { + _t: PhantomData, + _n: PhantomData, +} + +impl<'de, T, N> Visitor<'de> for GAVisitor +where + T: Deserialize<'de> + Default, + N: ArrayLength, +{ + type Value = GenericArray; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("struct GenericArray") + } + + fn visit_seq(self, mut seq: A) -> Result, A::Error> + where + A: SeqAccess<'de>, + { + let mut result = GenericArray::default(); + for i in 0..N::to_usize() { + result[i] = seq.next_element()?.ok_or_else( + || de::Error::invalid_length(i, &self), + )?; + } + Ok(result) + } +} + +impl<'de, T, N> Deserialize<'de> for GenericArray +where + T: Deserialize<'de> + Default, + N: ArrayLength, +{ + fn deserialize(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let visitor = GAVisitor { + _t: PhantomData, + _n: PhantomData, + }; + deserializer.deserialize_seq(visitor) + } +} diff --git a/third_party/rust/generic-array-0.9.0/src/impls.rs b/third_party/rust/generic-array-0.9.0/src/impls.rs new file mode 100644 index 000000000000..3055876661a6 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/impls.rs @@ -0,0 +1,171 @@ +use super::{ArrayLength, GenericArray}; +use core::borrow::{Borrow, BorrowMut}; +use core::cmp::Ordering; +use core::fmt::{self, Debug}; +use core::hash::{Hash, Hasher}; + +impl Default for GenericArray +where + N: ArrayLength, +{ + #[inline] + fn default() -> Self { + Self::generate(|_| T::default()) + } +} + +impl Clone for GenericArray +where + N: ArrayLength, +{ + fn clone(&self) -> GenericArray { + self.map_ref(|x| x.clone()) + } +} + +impl Copy for GenericArray +where + N: ArrayLength, + N::ArrayType: Copy, +{ +} + +impl PartialEq for GenericArray +where + N: ArrayLength, +{ + fn eq(&self, other: &Self) -> bool { + **self == **other + } +} +impl Eq for GenericArray +where + N: ArrayLength, +{ +} + +impl PartialOrd for GenericArray +where + N: ArrayLength, +{ + fn partial_cmp(&self, other: &GenericArray) -> Option { + PartialOrd::partial_cmp(self.as_slice(), other.as_slice()) + } +} + +impl Ord for GenericArray +where + N: ArrayLength, +{ + fn cmp(&self, other: &GenericArray) -> Ordering { + Ord::cmp(self.as_slice(), other.as_slice()) + } +} + +impl Debug for GenericArray +where + N: ArrayLength, +{ + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + self[..].fmt(fmt) + } +} + +impl Borrow<[T]> for GenericArray +where + N: ArrayLength, +{ + fn borrow(&self) -> &[T] { + &self[..] + } +} + +impl BorrowMut<[T]> for GenericArray +where + N: ArrayLength, +{ + fn borrow_mut(&mut self) -> &mut [T] { + &mut self[..] + } +} + +impl AsRef<[T]> for GenericArray +where + N: ArrayLength, +{ + fn as_ref(&self) -> &[T] { + &self[..] + } +} + +impl AsMut<[T]> for GenericArray +where + N: ArrayLength, +{ + fn as_mut(&mut self) -> &mut [T] { + &mut self[..] + } +} + +impl Hash for GenericArray +where + N: ArrayLength, +{ + fn hash(&self, state: &mut H) + where + H: Hasher, + { + Hash::hash(&self[..], state) + } +} + +macro_rules! impl_from { + ($($n: expr => $ty: ty),*) => { + $( + impl From<[T; $n]> for GenericArray { + fn from(arr: [T; $n]) -> Self { + use core::mem::{forget, transmute_copy}; + let x = unsafe { transmute_copy(&arr) }; + forget(arr); + x + } + } + )* + + } +} + +impl_from! { + 1 => ::typenum::U1, + 2 => ::typenum::U2, + 3 => ::typenum::U3, + 4 => ::typenum::U4, + 5 => ::typenum::U5, + 6 => ::typenum::U6, + 7 => ::typenum::U7, + 8 => ::typenum::U8, + 9 => ::typenum::U9, + 10 => ::typenum::U10, + 11 => ::typenum::U11, + 12 => ::typenum::U12, + 13 => ::typenum::U13, + 14 => ::typenum::U14, + 15 => ::typenum::U15, + 16 => ::typenum::U16, + 17 => ::typenum::U17, + 18 => ::typenum::U18, + 19 => ::typenum::U19, + 20 => ::typenum::U20, + 21 => ::typenum::U21, + 22 => ::typenum::U22, + 23 => ::typenum::U23, + 24 => ::typenum::U24, + 25 => ::typenum::U25, + 26 => ::typenum::U26, + 27 => ::typenum::U27, + 28 => ::typenum::U28, + 29 => ::typenum::U29, + 30 => ::typenum::U30, + 31 => ::typenum::U31, + 32 => ::typenum::U32 +} \ No newline at end of file diff --git a/third_party/rust/generic-array-0.9.0/src/iter.rs b/third_party/rust/generic-array-0.9.0/src/iter.rs new file mode 100644 index 000000000000..b9282761a45f --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/iter.rs @@ -0,0 +1,117 @@ +//! `GenericArray` iterator implementation. + +use super::{ArrayLength, GenericArray}; +use core::{cmp, ptr}; +use core::mem::ManuallyDrop; + +/// An iterator that moves out of a `GenericArray` +pub struct GenericArrayIter> { + // Invariants: index <= index_back <= N + // Only values in array[index..index_back] are alive at any given time. + // Values from array[..index] and array[index_back..] are already moved/dropped. + array: ManuallyDrop>, + index: usize, + index_back: usize, +} + +impl IntoIterator for GenericArray +where + N: ArrayLength, +{ + type Item = T; + type IntoIter = GenericArrayIter; + + fn into_iter(self) -> Self::IntoIter { + GenericArrayIter { + array: ManuallyDrop::new(self), + index: 0, + index_back: N::to_usize(), + } + } +} + +impl Drop for GenericArrayIter +where + N: ArrayLength, +{ + fn drop(&mut self) { + // Drop values that are still alive. + for p in &mut self.array[self.index..self.index_back] { + unsafe { + ptr::drop_in_place(p); + } + } + } +} + +impl Iterator for GenericArrayIter +where + N: ArrayLength, +{ + type Item = T; + + fn next(&mut self) -> Option { + if self.len() > 0 { + unsafe { + let p = self.array.get_unchecked(self.index); + self.index += 1; + Some(ptr::read(p)) + } + } else { + None + } + } + + fn size_hint(&self) -> (usize, Option) { + let len = self.len(); + (len, Some(len)) + } + + fn count(self) -> usize { + self.len() + } + + fn nth(&mut self, n: usize) -> Option { + // First consume values prior to the nth. + let ndrop = cmp::min(n, self.len()); + for p in &mut self.array[self.index..self.index + ndrop] { + self.index += 1; + unsafe { + ptr::drop_in_place(p); + } + } + + self.next() + } + + fn last(mut self) -> Option { + // Note, everything else will correctly drop first as `self` leaves scope. + self.next_back() + } +} + +impl DoubleEndedIterator for GenericArrayIter +where + N: ArrayLength, +{ + fn next_back(&mut self) -> Option { + if self.len() > 0 { + self.index_back -= 1; + unsafe { + let p = self.array.get_unchecked(self.index_back); + Some(ptr::read(p)) + } + } else { + None + } + } +} + +impl ExactSizeIterator for GenericArrayIter +where + N: ArrayLength, +{ + fn len(&self) -> usize { + self.index_back - self.index + } +} diff --git a/third_party/rust/generic-array-0.9.0/src/lib.rs b/third_party/rust/generic-array-0.9.0/src/lib.rs new file mode 100644 index 000000000000..ce478e5ec690 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/src/lib.rs @@ -0,0 +1,464 @@ +//! This crate implements a structure that can be used as a generic array type.use +//! Core Rust array types `[T; N]` can't be used generically with +//! respect to `N`, so for example this: +//! +//! ```{should_fail} +//! struct Foo { +//! data: [T; N] +//! } +//! ``` +//! +//! won't work. +//! +//! **generic-array** exports a `GenericArray` type, which lets +//! the above be implemented as: +//! +//! ``` +//! # use generic_array::{ArrayLength, GenericArray}; +//! struct Foo> { +//! data: GenericArray +//! } +//! ``` +//! +//! The `ArrayLength` trait is implemented by default for +//! [unsigned integer types](../typenum/uint/index.html) from +//! [typenum](../typenum/index.html). +//! +//! For ease of use, an `arr!` macro is provided - example below: +//! +//! ``` +//! # #[macro_use] +//! # extern crate generic_array; +//! # extern crate typenum; +//! # fn main() { +//! let array = arr![u32; 1, 2, 3]; +//! assert_eq!(array[2], 3); +//! # } +//! ``` + +//#![deny(missing_docs)] +#![no_std] + +pub extern crate typenum; +#[cfg(feature = "serde")] +extern crate serde; + +mod hex; +mod impls; + +#[cfg(feature = "serde")] +pub mod impl_serde; + +use core::{mem, ptr, slice}; + +use core::marker::PhantomData; +use core::mem::ManuallyDrop; +pub use core::mem::transmute; +use core::ops::{Deref, DerefMut}; + +use typenum::bit::{B0, B1}; +use typenum::uint::{UInt, UTerm, Unsigned}; + +#[cfg_attr(test, macro_use)] +pub mod arr; +pub mod iter; +pub use iter::GenericArrayIter; + +/// Trait making `GenericArray` work, marking types to be used as length of an array +pub unsafe trait ArrayLength: Unsigned { + /// Associated type representing the array type for the number + type ArrayType; +} + +unsafe impl ArrayLength for UTerm { + #[doc(hidden)] + type ArrayType = (); +} + +/// Internal type used to generate a struct of appropriate size +#[allow(dead_code)] +#[repr(C)] +#[doc(hidden)] +pub struct GenericArrayImplEven { + parent1: U, + parent2: U, + _marker: PhantomData, +} + +impl Clone for GenericArrayImplEven { + fn clone(&self) -> GenericArrayImplEven { + GenericArrayImplEven { + parent1: self.parent1.clone(), + parent2: self.parent2.clone(), + _marker: PhantomData, + } + } +} + +impl Copy for GenericArrayImplEven {} + +/// Internal type used to generate a struct of appropriate size +#[allow(dead_code)] +#[repr(C)] +#[doc(hidden)] +pub struct GenericArrayImplOdd { + parent1: U, + parent2: U, + data: T, +} + +impl Clone for GenericArrayImplOdd { + fn clone(&self) -> GenericArrayImplOdd { + GenericArrayImplOdd { + parent1: self.parent1.clone(), + parent2: self.parent2.clone(), + data: self.data.clone(), + } + } +} + +impl Copy for GenericArrayImplOdd {} + +unsafe impl> ArrayLength for UInt { + #[doc(hidden)] + type ArrayType = GenericArrayImplEven; +} + +unsafe impl> ArrayLength for UInt { + #[doc(hidden)] + type ArrayType = GenericArrayImplOdd; +} + +/// Struct representing a generic array - `GenericArray` works like [T; N] +#[allow(dead_code)] +pub struct GenericArray> { + data: U::ArrayType, +} + +impl Deref for GenericArray +where + N: ArrayLength, +{ + type Target = [T]; + + fn deref(&self) -> &[T] { + unsafe { slice::from_raw_parts(self as *const Self as *const T, N::to_usize()) } + } +} + +impl DerefMut for GenericArray +where + N: ArrayLength, +{ + fn deref_mut(&mut self) -> &mut [T] { + unsafe { slice::from_raw_parts_mut(self as *mut Self as *mut T, N::to_usize()) } + } +} + +struct ArrayBuilder> { + array: ManuallyDrop>, + position: usize, +} + +impl> ArrayBuilder { + fn new() -> ArrayBuilder { + ArrayBuilder { + array: ManuallyDrop::new(unsafe { mem::uninitialized() }), + position: 0, + } + } + + fn into_inner(self) -> GenericArray { + let array = unsafe { ptr::read(&self.array) }; + + mem::forget(self); + + ManuallyDrop::into_inner(array) + } +} + +impl> Drop for ArrayBuilder { + fn drop(&mut self) { + for value in self.array.iter_mut().take(self.position) { + unsafe { + ptr::drop_in_place(value); + } + } + } +} + +struct ArrayConsumer> { + array: ManuallyDrop>, + position: usize, +} + +impl> ArrayConsumer { + fn new(array: GenericArray) -> ArrayConsumer { + ArrayConsumer { + array: ManuallyDrop::new(array), + position: 0, + } + } +} + +impl> Drop for ArrayConsumer { + fn drop(&mut self) { + for i in self.position..N::to_usize() { + unsafe { + ptr::drop_in_place(self.array.get_unchecked_mut(i)); + } + } + } +} + +impl GenericArray +where + N: ArrayLength, +{ + /// Initializes a new `GenericArray` instance using the given function. + /// + /// If the generator function panics while initializing the array, + /// any already initialized elements will be dropped. + pub fn generate(f: F) -> GenericArray + where + F: Fn(usize) -> T, + { + let mut destination = ArrayBuilder::new(); + + for (i, dst) in destination.array.iter_mut().enumerate() { + unsafe { + ptr::write(dst, f(i)); + } + + destination.position += 1; + } + + destination.into_inner() + } + + /// Map a function over a slice to a `GenericArray`. + /// + /// The length of the slice *must* be equal to the length of the array. + #[inline] + pub fn map_slice T>(s: &[S], f: F) -> GenericArray { + assert_eq!(s.len(), N::to_usize()); + + Self::generate(|i| f(unsafe { s.get_unchecked(i) })) + } + + /// Maps a `GenericArray` to another `GenericArray`. + /// + /// If the mapping function panics, any already initialized elements in the new array + /// will be dropped, AND any unused elements in the source array will also be dropped. + pub fn map(self, f: F) -> GenericArray + where + F: Fn(T) -> U, + N: ArrayLength, + { + let mut source = ArrayConsumer::new(self); + let mut destination = ArrayBuilder::new(); + + for (dst, src) in destination.array.iter_mut().zip(source.array.iter()) { + unsafe { + ptr::write(dst, f(ptr::read(src))); + } + + source.position += 1; + destination.position += 1; + } + + destination.into_inner() + } + + /// Maps a `GenericArray` to another `GenericArray` by reference. + /// + /// If the mapping function panics, any already initialized elements will be dropped. + #[inline] + pub fn map_ref(&self, f: F) -> GenericArray + where + F: Fn(&T) -> U, + N: ArrayLength, + { + GenericArray::generate(|i| f(unsafe { self.get_unchecked(i) })) + } + + /// Combines two `GenericArray` instances and iterates through both of them, + /// initializing a new `GenericArray` with the result of the zipped mapping function. + /// + /// If the mapping function panics, any already initialized elements in the new array + /// will be dropped, AND any unused elements in the source arrays will also be dropped. + pub fn zip(self, rhs: GenericArray, f: F) -> GenericArray + where + F: Fn(T, B) -> U, + N: ArrayLength + ArrayLength, + { + let mut left = ArrayConsumer::new(self); + let mut right = ArrayConsumer::new(rhs); + + let mut destination = ArrayBuilder::new(); + + for (dst, (lhs, rhs)) in + destination.array.iter_mut().zip(left.array.iter().zip( + right.array.iter(), + )) + { + unsafe { + ptr::write(dst, f(ptr::read(lhs), ptr::read(rhs))); + } + + destination.position += 1; + left.position += 1; + right.position += 1; + } + + destination.into_inner() + } + + /// Combines two `GenericArray` instances and iterates through both of them by reference, + /// initializing a new `GenericArray` with the result of the zipped mapping function. + /// + /// If the mapping function panics, any already initialized elements will be dropped. + pub fn zip_ref(&self, rhs: &GenericArray, f: F) -> GenericArray + where + F: Fn(&T, &B) -> U, + N: ArrayLength + ArrayLength, + { + GenericArray::generate(|i| unsafe { + f(self.get_unchecked(i), rhs.get_unchecked(i)) + }) + } + + /// Extracts a slice containing the entire array. + #[inline] + pub fn as_slice(&self) -> &[T] { + self.deref() + } + + /// Extracts a mutable slice containing the entire array. + #[inline] + pub fn as_mut_slice(&mut self) -> &mut [T] { + self.deref_mut() + } + + /// Converts slice to a generic array reference with inferred length; + /// + /// Length of the slice must be equal to the length of the array. + #[inline] + pub fn from_slice(slice: &[T]) -> &GenericArray { + assert_eq!(slice.len(), N::to_usize()); + + unsafe { &*(slice.as_ptr() as *const GenericArray) } + } + + /// Converts mutable slice to a mutable generic array reference + /// + /// Length of the slice must be equal to the length of the array. + #[inline] + pub fn from_mut_slice(slice: &mut [T]) -> &mut GenericArray { + assert_eq!(slice.len(), N::to_usize()); + + unsafe { &mut *(slice.as_mut_ptr() as *mut GenericArray) } + } +} + +impl GenericArray +where + N: ArrayLength, +{ + /// Construct a `GenericArray` from a slice by cloning its content + /// + /// Length of the slice must be equal to the length of the array + #[inline] + pub fn clone_from_slice(list: &[T]) -> GenericArray { + Self::from_exact_iter(list.iter().cloned()).expect( + "Slice must be the same length as the array", + ) + } +} + +impl GenericArray +where + N: ArrayLength, +{ + pub fn from_exact_iter(iter: I) -> Option + where + I: IntoIterator, + ::IntoIter: ExactSizeIterator, + { + let iter = iter.into_iter(); + + if iter.len() == N::to_usize() { + let mut destination = ArrayBuilder::new(); + + for (dst, src) in destination.array.iter_mut().zip(iter.into_iter()) { + unsafe { + ptr::write(dst, src); + } + + destination.position += 1; + } + + let array = unsafe { ptr::read(&destination.array) }; + + mem::forget(destination); + + Some(ManuallyDrop::into_inner(array)) + } else { + None + } + } +} + +impl ::core::iter::FromIterator for GenericArray +where + N: ArrayLength, + T: Default, +{ + fn from_iter(iter: I) -> GenericArray + where + I: IntoIterator, + { + let mut destination = ArrayBuilder::new(); + + let defaults = ::core::iter::repeat(()).map(|_| T::default()); + + for (dst, src) in destination.array.iter_mut().zip( + iter.into_iter().chain(defaults), + ) + { + unsafe { + ptr::write(dst, src); + } + } + + destination.into_inner() + } +} + +#[cfg(test)] +mod test { + // Compile with: + // cargo rustc --lib --profile test --release -- + // -C target-cpu=native -C opt-level=3 --emit asm + // and view the assembly to make sure test_assembly generates + // SIMD instructions instead of a niave loop. + + #[inline(never)] + pub fn black_box(val: T) -> T { + use core::{mem, ptr}; + + let ret = unsafe { ptr::read_volatile(&val) }; + mem::forget(val); + ret + } + + #[test] + fn test_assembly() { + let a = black_box(arr![i32; 1, 3, 5, 7]); + let b = black_box(arr![i32; 2, 4, 6, 8]); + + let c = a.zip_ref(&b, |l, r| l + r); + + assert_eq!(c, arr![i32; 3, 7, 11, 15]); + } +} diff --git a/third_party/rust/generic-array-0.9.0/tests/hex.rs b/third_party/rust/generic-array-0.9.0/tests/hex.rs new file mode 100644 index 000000000000..aed69e424979 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/tests/hex.rs @@ -0,0 +1,44 @@ +#[macro_use] +extern crate generic_array; +extern crate typenum; + +use generic_array::GenericArray; +use std::str::from_utf8; +use typenum::U2048; + + +#[test] +fn short_lower_hex() { + let ar = arr![u8; 10, 20, 30]; + assert_eq!(format!("{:x}", ar), "0a141e"); +} + +#[test] +fn short_upper_hex() { + let ar = arr![u8; 30, 20, 10]; + assert_eq!(format!("{:X}", ar), "1E140A"); +} + +#[test] +fn long_lower_hex() { + let ar = GenericArray::::default(); + assert_eq!(format!("{:x}", ar), from_utf8(&[b'0'; 4096]).unwrap()); +} + +#[test] +fn long_upper_hex() { + let ar = GenericArray::::default(); + assert_eq!(format!("{:X}", ar), from_utf8(&[b'0'; 4096]).unwrap()); +} + +#[test] +fn truncated_lower_hex() { + let ar = arr![u8; 10, 20, 30, 40, 50]; + assert_eq!(format!("{:.2x}", ar), "0a14"); +} + +#[test] +fn truncated_upper_hex() { + let ar = arr![u8; 30, 20, 10, 17, 0]; + assert_eq!(format!("{:.4X}", ar), "1E140A11"); +} diff --git a/third_party/rust/generic-array-0.9.0/tests/import_name.rs b/third_party/rust/generic-array-0.9.0/tests/import_name.rs new file mode 100644 index 000000000000..27653c9a85d7 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/tests/import_name.rs @@ -0,0 +1,10 @@ +#[macro_use] +extern crate generic_array as gen_arr; + +use gen_arr::typenum; + +#[test] +fn test_different_crate_name() { + let _: gen_arr::GenericArray = arr![u32; 0, 1, 2, 3]; + let _: gen_arr::GenericArray = arr![u32;]; +} diff --git a/third_party/rust/generic-array-0.9.0/tests/mod.rs b/third_party/rust/generic-array-0.9.0/tests/mod.rs new file mode 100644 index 000000000000..2a2f2e15f7c5 --- /dev/null +++ b/third_party/rust/generic-array-0.9.0/tests/mod.rs @@ -0,0 +1,169 @@ +#![recursion_limit="128"] +#![no_std] +#[macro_use] +extern crate generic_array; +use core::cell::Cell; +use core::ops::Drop; +use generic_array::GenericArray; +use generic_array::typenum::{U1, U3, U4, U97}; + +#[test] +fn test() { + let mut list97 = [0; 97]; + for i in 0..97 { + list97[i] = i as i32; + } + let l: GenericArray = GenericArray::clone_from_slice(&list97); + assert_eq!(l[0], 0); + assert_eq!(l[1], 1); + assert_eq!(l[32], 32); + assert_eq!(l[56], 56); +} + +#[test] +fn test_drop() { + #[derive(Clone)] + struct TestDrop<'a>(&'a Cell); + + impl<'a> Drop for TestDrop<'a> { + fn drop(&mut self) { + self.0.set(self.0.get() + 1); + } + } + + let drop_counter = Cell::new(0); + { + let _: GenericArray = + arr![TestDrop; TestDrop(&drop_counter), + TestDrop(&drop_counter), + TestDrop(&drop_counter)]; + } + assert_eq!(drop_counter.get(), 3); +} + +#[test] +fn test_arr() { + let test: GenericArray = arr![u32; 1, 2, 3]; + assert_eq!(test[1], 2); +} + +#[test] +fn test_copy() { + let test = arr![u32; 1, 2, 3]; + let test2 = test; + // if GenericArray is not copy, this should fail as a use of a moved value + assert_eq!(test[1], 2); + assert_eq!(test2[0], 1); +} + +#[test] +fn test_iter_flat_map() { + assert!((0..5).flat_map(|i| arr![i32; 2 * i, 2 * i + 1]).eq(0..10)); +} + +#[derive(Debug, PartialEq, Eq)] +struct NoClone(T); + +#[test] +fn test_from_slice() { + let arr = [1, 2, 3, 4]; + let gen_arr = GenericArray::<_, U3>::from_slice(&arr[..3]); + assert_eq!(&arr[..3], gen_arr.as_slice()); + let arr = [NoClone(1u32), NoClone(2), NoClone(3), NoClone(4)]; + let gen_arr = GenericArray::<_, U3>::from_slice(&arr[..3]); + assert_eq!(&arr[..3], gen_arr.as_slice()); +} + +#[test] +fn test_from_mut_slice() { + let mut arr = [1, 2, 3, 4]; + { + let gen_arr = GenericArray::<_, U3>::from_mut_slice(&mut arr[..3]); + gen_arr[2] = 10; + } + assert_eq!(arr, [1, 2, 10, 4]); + let mut arr = [NoClone(1u32), NoClone(2), NoClone(3), NoClone(4)]; + { + let gen_arr = GenericArray::<_, U3>::from_mut_slice(&mut arr[..3]); + gen_arr[2] = NoClone(10); + } + assert_eq!(arr, [NoClone(1), NoClone(2), NoClone(10), NoClone(4)]); +} + +#[test] +fn test_default() { + let arr = GenericArray::::default(); + assert_eq!(arr[0], 0); +} + +#[test] +fn test_from() { + let data = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]; + let garray: GenericArray<(usize, usize, usize), U3> = data.into(); + assert_eq!(&data, garray.as_slice()); +} + +#[test] +fn test_unit_macro() { + let arr = arr![f32; 3.14]; + assert_eq!(arr[0], 3.14); +} + +#[test] +fn test_empty_macro() { + let _arr = arr![f32;]; +} + +#[test] +fn test_cmp() { + arr![u8; 0x00].cmp(&arr![u8; 0x00]); +} + +/// This test should cause a helpful compile error if uncommented. +// #[test] +// fn test_empty_macro2(){ +// let arr = arr![]; +// } +#[cfg(feature = "serde")] +mod impl_serde { + extern crate serde_json; + + use generic_array::GenericArray; + use generic_array::typenum::U6; + + #[test] + fn test_serde_implementation() { + let array: GenericArray = arr![f64; 0.0, 5.0, 3.0, 7.07192, 76.0, -9.0]; + let string = serde_json::to_string(&array).unwrap(); + assert_eq!(string, "[0.0,5.0,3.0,7.07192,76.0,-9.0]"); + + let test_array: GenericArray = serde_json::from_str(&string).unwrap(); + assert_eq!(test_array, array); + } +} + +#[test] +fn test_map() { + let b: GenericArray = GenericArray::generate(|i| i as i32 * 4).map(|x| x - 3); + + assert_eq!(b, arr![i32; -3, 1, 5, 9]); +} + +#[test] +fn test_zip() { + let a: GenericArray<_, U4> = GenericArray::generate(|i| i + 1); + let b: GenericArray<_, U4> = GenericArray::generate(|i| i as i32 * 4); + + let c = a.zip(b, |r, l| r as i32 + l); + + assert_eq!(c, arr![i32; 1, 6, 11, 16]); +} + +#[test] +fn test_from_iter() { + use core::iter::repeat; + + let a: GenericArray<_, U4> = repeat(11).take(3).collect(); + + assert_eq!(a, arr![i32; 11, 11, 11, 0]); +} diff --git a/third_party/rust/lalrpop-snap/.cargo-checksum.json b/third_party/rust/lalrpop-snap/.cargo-checksum.json new file mode 100644 index 000000000000..1ef0e8b56328 --- /dev/null +++ b/third_party/rust/lalrpop-snap/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"70e6c252f3b474e859bacedc1ea3762e3394dc9d9a1b190ae7786bc869e567fa","src/api/mod.rs":"3140db5d97aae171c820f09b8217b51fdbfbcb011279581dacc98d6dfbe1fd1a","src/build/action.rs":"a0fdb1a9228e5043cd3da3d0effb46d29bbbb01c8a5be820862692b674393460","src/build/fake_term.rs":"0356fa66487dc6bce478deafb1ad9a1976499281f79172ed049228d0e454cb2a","src/build/mod.rs":"fe4218095bf9f530d30d8c49f0c25f9ce4843a1fa8585e5f5105565d5175bb8c","src/collections/map.rs":"12042df3cede0e7b76539aa10068a7a143490dbbc6463ba10a33ab49fe70d760","src/collections/mod.rs":"51c4f28da5d201b3ed7e06f9c12883a288e5a55f4ee49824414b30d661c1a380","src/collections/multimap.rs":"aa84c44400fef4635b772f78e09be56aaea370feac045ef6336f8309cfb58a64","src/collections/set.rs":"55c9f8942bcdc79b6f404e9b3ec0b0de33b1ff73b97c46ec7ac337b728d92a70","src/file_text.rs":"39ea19ed379054fcea047a879f178aa801ba9ce41db4d4389e3bba46ee0c0cf3","src/generate.rs":"084ff538a44ea7c1a67e56ffd66060ec9f3c389f40a723989a3048e8aef8a050","src/grammar/consts.rs":"ac3d60118674c065b99c69428842f6a4e389563ebc51aead98568495c13133d6","src/grammar/mod.rs":"6b8bd7a7df0ed18486c8e0ac12304135c3277aeffe6f6faf8bf49a29edb50f6b","src/grammar/parse_tree.rs":"1f147a0ce70dd0cc03cfdf64c8b4df2dcc84b9dc1a3ffe8d1cfc5b418dac978e","src/grammar/pattern.rs":"7314b4e6321aa2811f92d1ed605ebf993007e54a91aae875d8186d7008fbef98","src/grammar/repr.rs":"a6f10b639e28f1d0b5dacea4bfd54898392aabdd495d8842b60a728bbbd8968f","src/grammar/token/mod.rs":"347c171330eed42c23356e42c9e9b30cc7564b5fdc5bf6625573c44fdb885cdf","src/grammar/token/test.rs":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","src/kernel_set.rs":"c6da6013debabd7e4624571a31984ba8cb3902b4e4afb61f48ae2277e61a2e8e","src/lexer/dfa/interpret.rs":"3fe65d62acada89c3d39c4f89f96860573a55ccb0195ee518361aca2b24b4cd7","src/lexer/dfa/mod.rs":"8b8e75795cbfdd121d7c905e8cf0b03df21dfc5693a8190adcf6eec7960b7ad2","src/lexer/dfa/overlap.rs":"5373f47905ca913ba747a44295dce338b085d30a2fa47fe740e832fd526000ca","src/lexer/dfa/test.rs":"f3b8510b644906d7529a45574f24edbe78238bd7b92dc4f27eeb47c875873273","src/lexer/intern_token/mod.rs":"661a1f335cc24fa890cf30e682850e0bab5f392f45714971bb15990559a634ff","src/lexer/mod.rs":"427cd764234bc844b1653a3e32f5d2aed344e3dbd5b16d10d318ae337bc03a4e","src/lexer/nfa/interpret.rs":"0232acd16c1f74b4b10b4e2b62362d0c638ccedfb2d39c4ed6578fecb55090df","src/lexer/nfa/mod.rs":"a7fc713397a91f7617adf5bd1724bb6032a570ff56a331085ef7b33b9bec838c","src/lexer/nfa/test.rs":"c4fc89d218d67a56b414635991409061ba8c7c34c539f83118748b5f2ddbd699","src/lexer/re/mod.rs":"6dbe87ded5f2354e3ca1f02867f0101be478b9a8ff39155a5c3941ca89773c0b","src/lexer/re/test.rs":"c32af553e10cafc7d5c975fd347041dc065e1e17d380f9c8800282a3f0bb7957","src/lib.rs":"d97614ef5559e858e76ec9e2cc4d2c26a95230c9d8cf2c945cdf1412537935a7","src/log.rs":"44b4d616801c0bc46bb07051d393b21dd3c9f9686627a0b7583a06664a2ef4ea","src/lr1/build/mod.rs":"658217bd35f43c6761b480ef66dbb4e4d74385f8d46f8f8aa136d2572361111c","src/lr1/build/test.rs":"d3082486e4836d979fc71adc661429f9bcb2255e73785de3aa7afb1f98579cbb","src/lr1/build_lalr/mod.rs":"ec59df171ce24317b22be2eb2efddf8fcdd732e12c6f90c0f9f4efbf1c666f9a","src/lr1/build_lalr/test.rs":"ee40db2b645373440720577e57d1b54c4d8f302e448246ed44ee41129f80e295","src/lr1/codegen/ascent.rs":"708e016e83cb158a5c62355d1f130f44661ae53109931a472fd09344f45a2e0f","src/lr1/codegen/base.rs":"0301b6a742a7411e298b0f54b216247d06c9b8a90c1de6faf47e38ae0dbc82bd","src/lr1/codegen/mod.rs":"7189f8aa348bd2b6fcf37daa5f7e819849f5b6f0915f1c31d21b356d2f9df7b6","src/lr1/codegen/parse_table.rs":"f5289b8559877a2fae81c420105e727dbe70a9a34bfe25afc8dd6e0332345e5b","src/lr1/codegen/test_all.rs":"7e560a2ea981d7dab60b39db6d000cacbad9fa186212c748499b21254f705a66","src/lr1/core/mod.rs":"c953b6ae599a0ea0c71fe8f33c349d70c5a5b7772cf94228da7fd2c01efb7460","src/lr1/error/mod.rs":"58f1ddabccf7a59548148b49cd014994afc2e21545b3e9d7bce71dc744ab0fa8","src/lr1/error/test.rs":"0399afaa009a760ffe0fde63ffa8ff7e77dc83edd76c4681caecafc3e9151baa","src/lr1/example/mod.rs":"5fa766e7ea6baefe9b8c8766e5b772e0d13d800007eb9e96b38c67f3ab21e6e4","src/lr1/example/test.rs":"53bb8d20c8673ab67490c18004505c676b2a9d0cc171283dbfcd7f28f681f7d5","src/lr1/first/mod.rs":"1480361d3d468506f02755d562f2c7717b22a3f60b20ff1261de40796b199111","src/lr1/first/test.rs":"483c4c555f46136db01fcadb3cf205019b2337870aca42c6881c75570919f5da","src/lr1/interpret.rs":"c6b988be0adf7c5e833a2ba0d80be40875f4d9073ea82e1ec8e86c5484a93b87","src/lr1/item.rs":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","src/lr1/lane_table/README.md":"494de731bd3ac5c44dc05c84497e59e713bbc1e50c24b4dd199a6576ae72f925","src/lr1/lane_table/construct/merge.rs":"f0632f5fb091148a6843744b9ae15736aa083981604188b2301ddf6368740e7c","src/lr1/lane_table/construct/mod.rs":"df28da66af2152f25c1d3ccba1c403a2982a208fe1346bfee65274ed69d16766","src/lr1/lane_table/construct/state_set.rs":"89d860ca09c30a65d13db8944d1dd0bca749aa1d4312cd28d828e831b6ca0d9a","src/lr1/lane_table/lane/mod.rs":"690efee0f32af107dd4ee05f90c0dcb0b67ae4b553c0f95e7d92fc9e896e1475","src/lr1/lane_table/mod.rs":"6f671cc10a8df06f7dc807193521b4af27a207b74e181e9a073f0d43da0415df","src/lr1/lane_table/table/context_set/mod.rs":"94cc5922b13126b88dd452845803c6ce0d96f23e527a60fb9240315589d0192d","src/lr1/lane_table/table/context_set/test.rs":"b4f8ea549fe8247264aa8d8d891894f45f409aab247d3989638e480d5d9686d2","src/lr1/lane_table/table/mod.rs":"535084856c85e1e7d6de47ec5b19c8bcaba9b9c3b917a4c7c245e3a6c722528e","src/lr1/lane_table/test.rs":"1ab1447a5a16e95fc2e0a2674da3091041aafb6156ad4cfbe8bddd8f2d6d651a","src/lr1/lookahead.rs":"5c368c28e8101d59f18b5ee57adcc0fe34462ae39884a13bc1d6b652e3838ca9","src/lr1/mod.rs":"0c968f46ac56b4606d1e2119411e3e65a49c15cc3a7d0c79d298f139bb9b233c","src/lr1/report/mod.rs":"b67fc309b725d9eff58ea57ea5c219001d8023d93ab6e40f1a796f6d4f331d1a","src/lr1/state_graph.rs":"4168fa99fee5e7ac47e23a4506c90f16239c3b6a1dc756d9b3efbdca4a8505ce","src/lr1/tls.rs":"f40f9bacab9a471b58029eea4244996fe48dc41ee41cfb31c51b015bf20f4dfe","src/lr1/trace/mod.rs":"d71cf150567f3f0af3bf2c3bcaf1c443d9785edb27d9900393c6b3515cb1f17a","src/lr1/trace/reduce/mod.rs":"fe976f6de97d8dd4c9d582ba538fc0fdde0489313f07ab4fcb8769f0aab27eb7","src/lr1/trace/reduce/test.rs":"56789d4af6b330c65cac4099e31bf54a02c98d8a7607f010e9d404dbce208bdc","src/lr1/trace/shift/mod.rs":"a85b17d3ec5c60990b438f5912eda8fe41d878e11fc613d897aee414780f8bf5","src/lr1/trace/shift/test.rs":"2c727135de13d45198d9fd62abf3bbabb356cf6888071e9d35aa1cb1cf39742b","src/lr1/trace/trace_graph/mod.rs":"e37bb24a2b37e780e83735a8fc33005bcd1a5117caa956c23a2b462954fbfd2e","src/lr1/trace/trace_graph/test.rs":"be123da8f47641b49878eb6da1f77a237ea9e14f620de09de7eb5c93eaf1cba9","src/message/builder.rs":"9ba48b51f12a8f21210ba82e6dd51b37442d5a0e1a25cee13e967bf36a04ea7b","src/message/horiz.rs":"8354a19142434ab05958f1bbd26e36244fcf57f101997fcb1bf210d168ff7970","src/message/indent.rs":"0e739f0a445bcb5165d2d4406c89b139057df4cccbc6a37a9b63792e6996925d","src/message/message.rs":"c217f00b20243771b6d4c002a88321501ff78a66346f1cdc39bd49e3635d346b","src/message/mod.rs":"1df6aade06d6a56cfb23faeb27da328ff3e3281364f91376cea5a54e3dca067b","src/message/styled.rs":"f027ef2bd3fe90a865f2437cde9cbe857b5dc1ffff986e6eded7ed96252a5e60","src/message/test.rs":"5cb26ccff7242f2acde35e78077b77955c053da30f1badf7cc2e7962942b351a","src/message/text.rs":"c98f53953ed215e0933de12657ccc3cd97476cca0d8730ada51e8789bb6d2958","src/message/vert.rs":"d204e54edce130d45d830b4e5018863dc3be9083e037c357b38b61ced42921e2","src/message/wrap.rs":"a27c8d93e5d357b5ad0e451ea5b6476b0536cf458ecbdd421506bba6c4372c97","src/normalize/inline/graph/mod.rs":"26700d5d96ddd62433a83ac14f836e1a7bebf7b78e0fb0179f33f733d6a1a87e","src/normalize/inline/graph/test.rs":"ca2fc54bbe5187fcdbbeff2b13cf7d0df67d369c4b9b9a83ace5626c93f9f839","src/normalize/inline/mod.rs":"c2ce84a9fdfe77e8ddb6c2a0497a2da1c6165264dccf142c8885352eb8242a7f","src/normalize/inline/test.rs":"69b1c44e297c177efd0d929ff626583aab02ffcdf51b8772a629d3ce2b178e0e","src/normalize/lower/mod.rs":"1cf4dc078f4cc72be239ef84fa2f8054bf7c4f08b18eedca2fd2a2ad6c3594c7","src/normalize/macro_expand/mod.rs":"5ffe55674045d8b7be8036e2f36a87d7d5b74f76f4bad5c040b3a546b1a5ec5b","src/normalize/macro_expand/test.rs":"9745129ddfa458bc15923606904ca698b377c570776725b9b80e9969cb2ae87e","src/normalize/mod.rs":"5bf1a73ae9148cbac1c662520b56c7904a49ab367cd78909926253372c9642ab","src/normalize/norm_util.rs":"f1bbf8c58fc56670e5dd88d3f1fac7951fb79b5809dc6e734d2063405aa74930","src/normalize/prevalidate/mod.rs":"3abc85becedf6ba1fc499390ff2130bb8afa706dd0e00b17b8198504cf48481c","src/normalize/prevalidate/test.rs":"95bfc751eeb49b741ac0037628452e2db1637f17394fdffbc31fef7c7383c2bd","src/normalize/resolve/mod.rs":"8fae0ab78e3ca4ee1c8e1b2e84729316ec3c1d62f452fe48f59e83287156bb88","src/normalize/resolve/test.rs":"39007967a516be901f59a9f6b0846df2cd28233f77d0c7813b20318166db9c04","src/normalize/token_check/mod.rs":"f25cc20b45a68c185ec652b123190b2546fc903980e436bc88b96f02d0c2cbc7","src/normalize/token_check/test.rs":"51eefaf7f860ffb611206b7e591e3aef38984e5d530a3637eae55089eb401f3d","src/normalize/tyinfer/mod.rs":"cc258da8b5c8421cf9ae850d6356e8512c634a9c70f789f3c44f46a1b9972d20","src/normalize/tyinfer/test.rs":"0bfc25cedb4f683ffff5c9363439d8e6d92bcab30c14ef1a0608c6820cf92a1f","src/parser/lrgrammar.rs":"53d5ea45682b40a005efaab7908d50916d47a8e1bfe12b0c16141ee08713875e","src/parser/mod.rs":"ec25dcd0ca5a624f0394583a9fb7239ed904ecbaacf4e2622f69e1ae7bde23c0","src/parser/test.rs":"016dcd9d7bf443c427688f288d764a2149f8c8ae5f47a237c7260ed235a949c7","src/rust/mod.rs":"13eb8a26c8eba832ae31cbbcc228a6558988667421ef9d054daf357eb1fc3460","src/session.rs":"409ab312e9ed87bac43544cd5e63f282e2fa343871305bf789612139906637c1","src/test_util.rs":"5aa61b5051c1f5930ef80dbd0e88d19cff2477824cd40069b9735ba279e58da2","src/tls/mod.rs":"35463d95c5d0476da7ac94cc633d4ccff28d890c2e88401c54fe95314c9a5839","src/tok/mod.rs":"3373dcd94bd08d1fdc2ad3d5bb5d2729d4ddee562dd08fb97ae897d48ced4229","src/tok/test.rs":"9818d57f6c70a3bc1f2e41a80fb3e0760bc70ff2739e2e61f628587a76adac8e","src/util.rs":"228ef527b92dedbe3caa9b16d906254d7b3e6fe8bbb32b312b613640d5cf18a1"},"package":"0b85aa455529344133d7ecaaac04c01ed87f459deeaa0fe5422885e2095d8cdc"} \ No newline at end of file diff --git a/third_party/rust/lalrpop-snap/Cargo.toml b/third_party/rust/lalrpop-snap/Cargo.toml new file mode 100644 index 000000000000..4c70407ec673 --- /dev/null +++ b/third_party/rust/lalrpop-snap/Cargo.toml @@ -0,0 +1,65 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "lalrpop-snap" +version = "0.16.0" +authors = ["Niko Matsakis "] +description = "convenient LR(1) parser generator" +readme = "../README.md" +keywords = ["parser", "generator", "LR", "yacc", "grammar"] +categories = ["parsing"] +license = "Apache-2.0/MIT" +repository = "https://github.com/lalrpop/lalrpop" + +[lib] +doctest = false +[dependencies.ascii-canvas] +version = "1.0" + +[dependencies.atty] +version = "0.2" + +[dependencies.bit-set] +version = "0.5.0" + +[dependencies.diff] +version = "0.1.9" + +[dependencies.ena] +version = "0.9" + +[dependencies.itertools] +version = "0.7" + +[dependencies.lalrpop-util] +version = "0.16.0" + +[dependencies.petgraph] +version = "0.4.13" + +[dependencies.regex] +version = "1" + +[dependencies.regex-syntax] +version = "0.4.0" + +[dependencies.string_cache] +version = "0.7.1" + +[dependencies.term] +version = "0.4.5" + +[dependencies.unicode-xid] +version = "0.1" +[dev-dependencies.rand] +version = "0.4" diff --git a/third_party/rust/lalrpop-snap/src/api/mod.rs b/third_party/rust/lalrpop-snap/src/api/mod.rs new file mode 100644 index 000000000000..b3c3d5bc6f5a --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/api/mod.rs @@ -0,0 +1,182 @@ +use build; +use log::Level; +use session::{ColorConfig, Session}; +use std::default::Default; +use std::env; +use std::env::current_dir; +use std::error::Error; +use std::path::{Path, PathBuf}; +use std::rc::Rc; + +/// Configure various aspects of how LALRPOP works. +/// Intended for use within a `build.rs` script. +/// To get the default configuration, use `Configuration::new`. +#[derive(Clone, Default)] +pub struct Configuration { + session: Session, +} + +impl Configuration { + /// Creates the default configuration; equivalent to `Configuration::default`. + pub fn new() -> Configuration { + Configuration::default() + } + + /// Always use ANSI colors in output, even if output does not appear to be a TTY. + pub fn always_use_colors(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::Yes; + self + } + + /// Never use ANSI colors in output, even if output appears to be a TTY. + pub fn never_use_colors(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::No; + self + } + + /// Use ANSI colors in output if output appears to be a TTY, but + /// not otherwise. This is the default. + pub fn use_colors_if_tty(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::IfTty; + self + } + + /// Specify a custom directory to search for input files. This + /// directory is recursively searched for `.lalrpop` files to be + /// considered as input files. This configuration setting also + /// impacts where output files are placed; paths are made relative + /// to the input path before being resolved relative to the output + /// path. By default, the input directory is the current working + /// directory. + pub fn set_in_dir

(&mut self, dir: P) -> &mut Self + where + P: Into, + { + self.session.in_dir = Some(dir.into()); + self + } + + /// Specify a custom directory to use when writing output files. + /// By default, the output directory is the same as the input + /// directory. + pub fn set_out_dir

(&mut self, dir: P) -> &mut Self - where - P: Into, - { - self.session.in_dir = Some(dir.into()); - self - } - - /// Specify a custom directory to use when writing output files. - /// By default, the output directory is the same as the input - /// directory. - pub fn set_out_dir

(&mut self, dir: P) -> &mut Self - where - P: Into, - { - self.session.out_dir = Some(dir.into()); - self - } - - /// Apply `cargo` directory location conventions, by setting the - /// input directory to `src` and the output directory to - /// `$OUT_DIR`. - pub fn use_cargo_dir_conventions(&mut self) -> &mut Self { - self.set_in_dir("src") - .set_out_dir(env::var("OUT_DIR").unwrap()); - self - } - - /// Write output files in the same directory of the input files. - /// - /// If this option is enabled, you have to load the parser as a module: - /// - /// ```no_run - /// mod parser; // synthesized from parser.lalrpop - /// ``` - /// - /// This was the default behaviour up to version 0.15. - pub fn generate_in_source_tree(&mut self) -> &mut Self { - self.set_in_dir(Path::new(".")).set_out_dir(Path::new(".")) - } - - /// If true, always convert `.lalrpop` files into `.rs` files, even if the - /// `.rs` file is newer. Default is false. - pub fn force_build(&mut self, val: bool) -> &mut Configuration { - self.session.force_build = val; - self - } - - /// If true, emit comments into the generated code. This makes the - /// generated code significantly larger. Default is false. - pub fn emit_comments(&mut self, val: bool) -> &mut Configuration { - self.session.emit_comments = val; - self - } - - /// If false, shrinks the generated code by removing redundant white space. - /// Default is true. - pub fn emit_whitespace(&mut self, val: bool) -> &mut Configuration { - self.session.emit_whitespace = val; - self - } - - /// If true, emit report file about generated code. - pub fn emit_report(&mut self, val: bool) -> &mut Configuration { - self.session.emit_report = val; - self - } - - /// Minimal logs: only for errors that halt progress. - pub fn log_quiet(&mut self) -> &mut Configuration { - self.session.log.set_level(Level::Taciturn); - self - } - - /// Informative logs: give some high-level indications of - /// progress (default). - pub fn log_info(&mut self) -> &mut Configuration { - self.session.log.set_level(Level::Informative); - self - } - - /// Verbose logs: more than info, but still not overwhelming. - pub fn log_verbose(&mut self) -> &mut Configuration { - self.session.log.set_level(Level::Verbose); - self - } - - /// Debug logs: better redirect this to a file. Intended for - /// debugging LALRPOP itself. - pub fn log_debug(&mut self) -> &mut Configuration { - self.session.log.set_level(Level::Debug); - self - } - - /// Sets the features used during compilation, disables the use of cargo features. - /// (Default: Loaded from `CARGO_FEATURE_{}` environment variables). - pub fn set_features(&mut self, iterable: I) -> &mut Configuration - where - I: IntoIterator, - { - self.session.features = Some(iterable.into_iter().collect()); - self - } - - /// Enables "unit-testing" configuration. This is only for - /// lalrpop-test. - #[doc(hidden)] - pub fn unit_test(&mut self) -> &mut Configuration { - self.session.unit_test = true; - self - } - - /// Process all files according to the `set_in_dir` and - /// `set_out_dir` configuration. - pub fn process(&self) -> Result<(), Box> { - let root = if let Some(ref d) = self.session.in_dir { - d.as_path() - } else { - Path::new(".") - }; - self.process_dir(root) - } - - /// Process all files in the current directory, which -- unless you - /// have changed it -- is typically the root of the crate being compiled. - pub fn process_current_dir(&self) -> Result<(), Box> { - self.process_dir(try!(current_dir())) - } - - /// Process all `.lalrpop` files in `path`. - pub fn process_dir>(&self, path: P) -> Result<(), Box> { - let mut session = self.session.clone(); - - // If in/out dir are empty, use cargo conventions by default. - // See https://github.com/lalrpop/lalrpop/issues/280 - if session.in_dir.is_none() { - let mut in_dir = try!(env::current_dir()); - in_dir.push("src"); - session.in_dir = Some(in_dir); - } - - if session.out_dir.is_none() { - let out_dir = match env::var_os("OUT_DIR") { - Some(var) => var, - None => return Err("missing OUT_DIR variable")?, - }; - session.out_dir = Some(PathBuf::from(out_dir)); - } - - if self.session.features.is_none() { - // Pick up the features cargo sets for build scripts - session.features = Some( - env::vars() - .filter_map(|(feature_var, _)| { - let prefix = "CARGO_FEATURE_"; - if feature_var.starts_with(prefix) { - Some( - feature_var[prefix.len()..] - .replace("_", "-") - .to_ascii_lowercase(), - ) - } else { - None - } - }) - .collect(), - ); - } - - let session = Rc::new(session); - try!(build::process_dir(session, path)); - Ok(()) - } - - /// Process the given `.lalrpop` file. - pub fn process_file>(&self, path: P) -> Result<(), Box> { - let session = Rc::new(self.session.clone()); - try!(build::process_file(session, path)); - Ok(()) - } -} - -/// Process all files in the current directory, which -- unless you -/// have changed it -- is typically the root of the crate being compiled. -/// -/// Equivalent to `Configuration::new().process_current_dir()`. -pub fn process_root() -> Result<(), Box> { - Configuration::new().process_current_dir() -} - -/// Deprecated in favor of `Configuration`. Try: -/// -/// ```rust -/// Configuration::new().force_build(true).process_current_dir() -/// ``` -/// -/// instead. -pub fn process_root_unconditionally() -> Result<(), Box> { - Configuration::new().force_build(true).process_current_dir() -} +use build; +use log::Level; +use session::{ColorConfig, Session}; +use std::default::Default; +use std::env; +use std::env::current_dir; +use std::error::Error; +use std::path::{Path, PathBuf}; +use std::rc::Rc; + +/// Configure various aspects of how LALRPOP works. +/// Intended for use within a `build.rs` script. +/// To get the default configuration, use `Configuration::new`. +#[derive(Clone, Default)] +pub struct Configuration { + session: Session, +} + +impl Configuration { + /// Creates the default configuration; equivalent to `Configuration::default`. + pub fn new() -> Configuration { + Configuration::default() + } + + /// Always use ANSI colors in output, even if output does not appear to be a TTY. + pub fn always_use_colors(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::Yes; + self + } + + /// Never use ANSI colors in output, even if output appears to be a TTY. + pub fn never_use_colors(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::No; + self + } + + /// Use ANSI colors in output if output appears to be a TTY, but + /// not otherwise. This is the default. + pub fn use_colors_if_tty(&mut self) -> &mut Configuration { + self.session.color_config = ColorConfig::IfTty; + self + } + + /// Specify a custom directory to search for input files. This + /// directory is recursively searched for `.lalrpop` files to be + /// considered as input files. This configuration setting also + /// impacts where output files are placed; paths are made relative + /// to the input path before being resolved relative to the output + /// path. By default, the input directory is the current working + /// directory. + pub fn set_in_dir

(&mut self, dir: P) -> &mut Self + where + P: Into, + { + self.session.in_dir = Some(dir.into()); + self + } + + /// Specify a custom directory to use when writing output files. + /// By default, the output directory is the same as the input + /// directory. + pub fn set_out_dir

(&mut self, dir: P) -> &mut Self + where + P: Into, + { + self.session.out_dir = Some(dir.into()); + self + } + + /// Apply `cargo` directory location conventions, by setting the + /// input directory to `src` and the output directory to + /// `$OUT_DIR`. + pub fn use_cargo_dir_conventions(&mut self) -> &mut Self { + self.set_in_dir("src") + .set_out_dir(env::var("OUT_DIR").unwrap()); + self + } + + /// Write output files in the same directory of the input files. + /// + /// If this option is enabled, you have to load the parser as a module: + /// + /// ```no_run + /// mod parser; // synthesized from parser.lalrpop + /// ``` + /// + /// This was the default behaviour up to version 0.15. + pub fn generate_in_source_tree(&mut self) -> &mut Self { + self.set_in_dir(Path::new(".")) + .set_out_dir(Path::new(".")) + } + + /// If true, always convert `.lalrpop` files into `.rs` files, even if the + /// `.rs` file is newer. Default is false. + pub fn force_build(&mut self, val: bool) -> &mut Configuration { + self.session.force_build = val; + self + } + + /// If true, emit comments into the generated code. This makes the + /// generated code significantly larger. Default is false. + pub fn emit_comments(&mut self, val: bool) -> &mut Configuration { + self.session.emit_comments = val; + self + } + + /// If true, emit report file about generated code. + pub fn emit_report(&mut self, val: bool) -> &mut Configuration { + self.session.emit_report = val; + self + } + + /// Minimal logs: only for errors that halt progress. + pub fn log_quiet(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Taciturn); + self + } + + /// Informative logs: give some high-level indications of + /// progress (default). + pub fn log_info(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Informative); + self + } + + /// Verbose logs: more than info, but still not overwhelming. + pub fn log_verbose(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Verbose); + self + } + + /// Debug logs: better redirect this to a file. Intended for + /// debugging LALRPOP itself. + pub fn log_debug(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Debug); + self + } + + /// Enables "unit-testing" configuration. This is only for + /// lalrpop-test. + #[doc(hidden)] + pub fn unit_test(&mut self) -> &mut Configuration { + self.session.unit_test = true; + self + } + + /// Process all files according to the `set_in_dir` and + /// `set_out_dir` configuration. + pub fn process(&self) -> Result<(), Box> { + let root = if let Some(ref d) = self.session.in_dir { + d.as_path() + } else { + Path::new(".") + }; + self.process_dir(root) + } + + /// Process all files in the current directory, which -- unless you + /// have changed it -- is typically the root of the crate being compiled. + pub fn process_current_dir(&self) -> Result<(), Box> { + self.process_dir(try!(current_dir())) + } + + /// Process all `.lalrpop` files in `path`. + pub fn process_dir>(&self, path: P) -> Result<(), Box> { + let mut session = self.session.clone(); + + // If in/out dir are empty, use cargo conventions by default. + // See https://github.com/lalrpop/lalrpop/issues/280 + if session.in_dir.is_none() { + let mut in_dir = try!(env::current_dir()); + in_dir.push("src"); + session.in_dir = Some(in_dir); + } + + if session.out_dir.is_none() { + let out_dir = match env::var_os("OUT_DIR") { + Some(var) => var, + None => return Err("missing OUT_DIR variable")?, + }; + session.out_dir = Some(PathBuf::from(out_dir)); + } + + let session = Rc::new(session); + try!(build::process_dir(session, path)); + Ok(()) + } + + /// Process the given `.lalrpop` file. + pub fn process_file>(&self, path: P) -> Result<(), Box> { + let session = Rc::new(self.session.clone()); + try!(build::process_file(session, path)); + Ok(()) + } +} + +/// Process all files in the current directory, which -- unless you +/// have changed it -- is typically the root of the crate being compiled. +/// +/// Equivalent to `Configuration::new().process_current_dir()`. +pub fn process_root() -> Result<(), Box> { + Configuration::new().process_current_dir() +} + +/// Deprecated in favor of `Configuration`. Try: +/// +/// ```rust +/// Configuration::new().force_build(true).process_current_dir() +/// ``` +/// +/// instead. +pub fn process_root_unconditionally() -> Result<(), Box> { + Configuration::new().force_build(true).process_current_dir() +} diff --git a/third_party/rust/lalrpop/src/build/action.rs b/third_party/rust/lalrpop/src/build/action.rs index 304c126d854e..e1f8f8c9ccf8 100644 --- a/third_party/rust/lalrpop/src/build/action.rs +++ b/third_party/rust/lalrpop/src/build/action.rs @@ -1,437 +1,422 @@ -//! Code for generating action code. -//! -//! From the outside, action fns have one of two forms. If they take -//! symbols as input, e.g. from a production like `X = Y Z => ...` -//! (which takes Y and Z as input), they have this form: -//! -//! ``` -//! fn __action17< -//! 'input, // user-declared type parameters (*) -//! >( -//! input: &'input str, // user-declared parameters -//! __0: (usize, usize, usize), // symbols being reduced, if any -//! ... -//! __N: (usize, Foo, usize), // each has a type (L, T, L) -//! ) -> Box> -//! ``` -//! -//! Otherwise, they have this form: -//! -//! ``` -//! fn __action17< -//! 'input, // user-declared type parameters (*) -//! >( -//! input: &'input str, // user-declared parameters -//! __lookbehind: &usize, // value for @R -- "end of previous token" -//! __lookahead: &usize, // value for @L -- "start of next token" -//! ) -> Box> -//! ``` -//! -//! * -- in this case, those "user-declared" parameters are inserted by -//! the "internal tokenizer". - -use grammar::repr as r; -use rust::RustWrite; -use std::io::{self, Write}; - -pub fn emit_action_code(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { - for (i, defn) in grammar.action_fn_defns.iter().enumerate() { - rust!(rust, ""); - - // we always thread the parameters through to the action code, - // even if they are not used, and hence we need to disable the - // unused variables lint, which otherwise gets very excited. - if !grammar.parameters.is_empty() { - rust!(rust, "#[allow(unused_variables)]"); - } - - match defn.kind { - r::ActionFnDefnKind::User(ref data) => { - try!(emit_user_action_code(grammar, rust, i, defn, data)) - } - r::ActionFnDefnKind::Lookaround(ref variant) => { - try!(emit_lookaround_action_code(grammar, rust, i, defn, variant)) - } - r::ActionFnDefnKind::Inline(ref data) => { - try!(emit_inline_action_code(grammar, rust, i, defn, data)) - } - } - } - - Ok(()) -} - -fn ret_type_string(grammar: &r::Grammar, defn: &r::ActionFnDefn) -> String { - if defn.fallible { - format!( - "Result<{},{}lalrpop_util::ParseError<{},{},{}>>", - defn.ret_type, - grammar.prefix, - grammar.types.terminal_loc_type(), - grammar.types.terminal_token_type(), - grammar.types.error_type() - ) - } else { - format!("{}", defn.ret_type) - } -} - -fn emit_user_action_code( - grammar: &r::Grammar, - rust: &mut RustWrite, - index: usize, - defn: &r::ActionFnDefn, - data: &r::UserActionFnDefn, -) -> io::Result<()> { - let ret_type = ret_type_string(grammar, defn); - - // For each symbol to be reduced, we will receive - // a (L, T, L) triple where the Ls are locations and - // the T is the data. Ignore the locations and bind - // the data to the name the user gave. - let mut arguments: Vec = data - .arg_patterns - .iter() - .zip( - data.arg_types - .iter() - .cloned() - .map(|t| grammar.types.spanned_type(t)), - ) - .map(|(p, t)| format!("(_, {}, _): {}", p, t)) - .collect(); - - // If this is a reduce of an empty production, we will - // automatically add position information in the form of - // lookbehind/lookahead values. Otherwise, those values would be - // determined from the arguments themselves. - if data.arg_patterns.is_empty() { - arguments.extend(vec![ - format!( - "{}lookbehind: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - format!( - "{}lookahead: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - ]); - } - - try!(rust.write_fn_header( - grammar, - &r::Visibility::Priv, - format!("{}action{}", grammar.prefix, index), - vec![], - None, - arguments, - ret_type, - vec![] - )); - rust!(rust, "{{"); - rust!(rust, "{}", data.code); - rust!(rust, "}}"); - Ok(()) -} - -fn emit_lookaround_action_code( - grammar: &r::Grammar, - rust: &mut RustWrite, - index: usize, - _defn: &r::ActionFnDefn, - data: &r::LookaroundActionFnDefn, -) -> io::Result<()> { - try!(rust.write_fn_header( - grammar, - &r::Visibility::Priv, - format!("{}action{}", grammar.prefix, index), - vec![], - None, - vec![ - format!( - "{}lookbehind: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - format!( - "{}lookahead: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - ], - format!("{}", grammar.types.terminal_loc_type()), - vec![] - )); - - rust!(rust, "{{"); - match *data { - r::LookaroundActionFnDefn::Lookahead => { - // take the lookahead, if any; otherwise, we are - // at EOF, so taker the lookbehind (end of last - // pushed token); if that is missing too, then - // supply default. - rust!(rust, "{}lookahead.clone()", grammar.prefix); - } - r::LookaroundActionFnDefn::Lookbehind => { - // take lookbehind or supply default - rust!(rust, "{}lookbehind.clone()", grammar.prefix); - } - } - rust!(rust, "}}"); - Ok(()) -} - -fn emit_inline_action_code( - grammar: &r::Grammar, - rust: &mut RustWrite, - index: usize, - defn: &r::ActionFnDefn, - data: &r::InlineActionFnDefn, -) -> io::Result<()> { - let ret_type = ret_type_string(grammar, defn); - - let arg_types: Vec<_> = data - .symbols - .iter() - .flat_map(|sym| match *sym { - r::InlinedSymbol::Original(ref s) => vec![s.clone()], - r::InlinedSymbol::Inlined(_, ref syms) => syms.clone(), - }) - .map(|s| s.ty(&grammar.types)) - .collect(); - - // this is the number of symbols we expect to be passed in; it is - // distinct from data.symbols.len(), because sometimes we have - // inlined actions with no input symbols - let num_flat_args = arg_types.len(); - - let mut arguments: Vec<_> = arg_types - .iter() - .map(|&t| grammar.types.spanned_type(t.clone())) - .enumerate() - .map(|(i, t)| format!("{}{}: {}", grammar.prefix, i, t)) - .collect(); - - // If no symbols are being reduced, add in the - // lookbehind/lookahead. - if arguments.len() == 0 { - arguments.extend(vec![ - format!( - "{}lookbehind: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - format!( - "{}lookahead: &{}", - grammar.prefix, - grammar.types.terminal_loc_type() - ), - ]); - } - - try!(rust.write_fn_header( - grammar, - &r::Visibility::Priv, - format!("{}action{}", grammar.prefix, index), - vec![], - None, - arguments, - ret_type, - vec![] - )); - rust!(rust, "{{"); - - // For each inlined thing, compute the start/end locations. - // Do this first so that none of the arguments have been moved - // yet and we can easily access their locations. - let mut arg_counter = 0; - let mut temp_counter = 0; - for symbol in &data.symbols { - match *symbol { - r::InlinedSymbol::Original(_) => { - arg_counter += 1; - } - r::InlinedSymbol::Inlined(_, ref syms) => { - if syms.len() > 0 { - // If we are reducing symbols, then start and end - // can be the start/end location of the first/last - // symbol respectively. Easy peezy. - - rust!( - rust, - "let {}start{} = {}{}.0.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - arg_counter - ); - - let last_arg_index = arg_counter + syms.len() - 1; - rust!( - rust, - "let {}end{} = {}{}.2.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - last_arg_index - ); - } else { - // If we have no symbols, then `arg_counter` - // represents index of the first symbol after this - // inlined item (if any), and `arg_counter-1` - // represents index of the symbol before this - // item. - - if arg_counter > 0 { - rust!( - rust, - "let {}start{} = {}{}.2.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - arg_counter - 1 - ); - } else if num_flat_args > 0 { - rust!( - rust, - "let {}start{} = {}{}.0.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - arg_counter - ); - } else { - rust!( - rust, - "let {}start{} = {}lookbehind.clone();", - grammar.prefix, - temp_counter, - grammar.prefix - ); - } - - if arg_counter < num_flat_args { - rust!( - rust, - "let {}end{} = {}{}.0.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - arg_counter - ); - } else if num_flat_args > 0 { - rust!( - rust, - "let {}end{} = {}{}.2.clone();", - grammar.prefix, - temp_counter, - grammar.prefix, - num_flat_args - 1 - ); - } else { - rust!( - rust, - "let {}end{} = {}lookahead.clone();", - grammar.prefix, - temp_counter, - grammar.prefix - ); - } - } - - temp_counter += 1; - arg_counter += syms.len(); - } - } - } - - // Now create temporaries for the inlined things - let mut arg_counter = 0; - let mut temp_counter = 0; - - // if there are type parameters then type annotation is required - let annotate = !grammar.non_lifetime_type_parameters().is_empty(); - let lparen = if annotate {"::<"} else {"("}; - - for symbol in &data.symbols { - match *symbol { - r::InlinedSymbol::Original(_) => { - arg_counter += 1; - } - r::InlinedSymbol::Inlined(inlined_action, ref syms) => { - // execute the inlined reduce action - rust!( - rust, - "let {}temp{} = {}action{}{}", - grammar.prefix, - temp_counter, - grammar.prefix, - inlined_action.index(), - lparen - ); - for t in grammar.non_lifetime_type_parameters() { - rust!(rust, "{},", t); - } - if annotate {rust!(rust, ">(")}; - for parameter in &grammar.parameters { - rust!(rust, "{},", parameter.name); - } - for i in 0..syms.len() { - rust!(rust, "{}{},", grammar.prefix, arg_counter + i); - } - if syms.len() == 0 { - rust!(rust, "&{}start{},", grammar.prefix, temp_counter); - rust!(rust, "&{}end{},", grammar.prefix, temp_counter); - } - rust!(rust, ");"); - - // wrap up the inlined value along with its span - rust!( - rust, - "let {}temp{} = ({}start{}, {}temp{}, {}end{});", - grammar.prefix, - temp_counter, - grammar.prefix, - temp_counter, - grammar.prefix, - temp_counter, - grammar.prefix, - temp_counter - ); - - temp_counter += 1; - arg_counter += syms.len(); - } - } - } - rust!(rust, "{}action{}{}", grammar.prefix, data.action.index(), lparen); - for t in grammar.non_lifetime_type_parameters() { - rust!(rust, "{},", t); - } - if annotate {rust!(rust, ">(")}; - for parameter in &grammar.parameters { - rust!(rust, "{},", parameter.name); - } - let mut arg_counter = 0; - let mut temp_counter = 0; - for symbol in &data.symbols { - match *symbol { - r::InlinedSymbol::Original(_) => { - rust!(rust, "{}{},", grammar.prefix, arg_counter); - arg_counter += 1; - } - r::InlinedSymbol::Inlined(_, ref syms) => { - rust!(rust, "{}temp{},", grammar.prefix, temp_counter); - temp_counter += 1; - arg_counter += syms.len(); - } - } - } - assert!(data.symbols.len() > 0); - rust!(rust, ")"); - - rust!(rust, "}}"); - Ok(()) -} +//! Code for generating action code. +//! +//! From the outside, action fns have one of two forms. If they take +//! symbols as input, e.g. from a production like `X = Y Z => ...` +//! (which takes Y and Z as input), they have this form: +//! +//! ``` +//! fn __action17< +//! 'input, // user-declared type parameters (*) +//! >( +//! input: &'input str, // user-declared parameters +//! __0: (usize, usize, usize), // symbols being reduced, if any +//! ... +//! __N: (usize, Foo, usize), // each has a type (L, T, L) +//! ) -> Box> +//! ``` +//! +//! Otherwise, they have this form: +//! +//! ``` +//! fn __action17< +//! 'input, // user-declared type parameters (*) +//! >( +//! input: &'input str, // user-declared parameters +//! __lookbehind: &usize, // value for @R -- "end of previous token" +//! __lookahead: &usize, // value for @L -- "start of next token" +//! ) -> Box> +//! ``` +//! +//! * -- in this case, those "user-declared" parameters are inserted by +//! the "internal tokenizer". + +use grammar::repr as r; +use rust::RustWrite; +use std::io::{self, Write}; + +pub fn emit_action_code(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + for (i, defn) in grammar.action_fn_defns.iter().enumerate() { + rust!(rust, ""); + + // we always thread the parameters through to the action code, + // even if they are not used, and hence we need to disable the + // unused variables lint, which otherwise gets very excited. + if !grammar.parameters.is_empty() { + rust!(rust, "#[allow(unused_variables)]"); + } + + match defn.kind { + r::ActionFnDefnKind::User(ref data) => { + try!(emit_user_action_code(grammar, rust, i, defn, data)) + } + r::ActionFnDefnKind::Lookaround(ref variant) => { + try!(emit_lookaround_action_code(grammar, rust, i, defn, variant)) + } + r::ActionFnDefnKind::Inline(ref data) => { + try!(emit_inline_action_code(grammar, rust, i, defn, data)) + } + } + } + + Ok(()) +} + +fn ret_type_string(grammar: &r::Grammar, defn: &r::ActionFnDefn) -> String { + if defn.fallible { + format!( + "Result<{},{}lalrpop_util::ParseError<{},{},{}>>", + defn.ret_type, + grammar.prefix, + grammar.types.terminal_loc_type(), + grammar.types.terminal_token_type(), + grammar.types.error_type() + ) + } else { + format!("{}", defn.ret_type) + } +} + +fn emit_user_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + defn: &r::ActionFnDefn, + data: &r::UserActionFnDefn, +) -> io::Result<()> { + let ret_type = ret_type_string(grammar, defn); + + // For each symbol to be reduced, we will receive + // a (L, T, L) triple where the Ls are locations and + // the T is the data. Ignore the locations and bind + // the data to the name the user gave. + let mut arguments: Vec = data.arg_patterns + .iter() + .zip( + data.arg_types + .iter() + .cloned() + .map(|t| grammar.types.spanned_type(t)), + ) + .map(|(p, t)| format!("(_, {}, _): {}", p, t)) + .collect(); + + // If this is a reduce of an empty production, we will + // automatically add position information in the form of + // lookbehind/lookahead values. Otherwise, those values would be + // determined from the arguments themselves. + if data.arg_patterns.is_empty() { + arguments.extend(vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ]); + } + + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + arguments, + ret_type, + vec![] + )); + rust!(rust, "{{"); + rust!(rust, "{}", data.code); + rust!(rust, "}}"); + Ok(()) +} + +fn emit_lookaround_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + _defn: &r::ActionFnDefn, + data: &r::LookaroundActionFnDefn, +) -> io::Result<()> { + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ], + format!("{}", grammar.types.terminal_loc_type()), + vec![] + )); + + rust!(rust, "{{"); + match *data { + r::LookaroundActionFnDefn::Lookahead => { + // take the lookahead, if any; otherwise, we are + // at EOF, so taker the lookbehind (end of last + // pushed token); if that is missing too, then + // supply default. + rust!(rust, "{}lookahead.clone()", grammar.prefix); + } + r::LookaroundActionFnDefn::Lookbehind => { + // take lookbehind or supply default + rust!(rust, "{}lookbehind.clone()", grammar.prefix); + } + } + rust!(rust, "}}"); + Ok(()) +} + +fn emit_inline_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + defn: &r::ActionFnDefn, + data: &r::InlineActionFnDefn, +) -> io::Result<()> { + let ret_type = ret_type_string(grammar, defn); + + let arg_types: Vec<_> = data.symbols + .iter() + .flat_map(|sym| match *sym { + r::InlinedSymbol::Original(ref s) => vec![s.clone()], + r::InlinedSymbol::Inlined(_, ref syms) => syms.clone(), + }) + .map(|s| s.ty(&grammar.types)) + .collect(); + + // this is the number of symbols we expect to be passed in; it is + // distinct from data.symbols.len(), because sometimes we have + // inlined actions with no input symbols + let num_flat_args = arg_types.len(); + + let mut arguments: Vec<_> = arg_types + .iter() + .map(|&t| grammar.types.spanned_type(t.clone())) + .enumerate() + .map(|(i, t)| format!("{}{}: {}", grammar.prefix, i, t)) + .collect(); + + // If no symbols are being reduced, add in the + // lookbehind/lookahead. + if arguments.len() == 0 { + arguments.extend(vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ]); + } + + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + arguments, + ret_type, + vec![] + )); + rust!(rust, "{{"); + + // For each inlined thing, compute the start/end locations. + // Do this first so that none of the arguments have been moved + // yet and we can easily access their locations. + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + arg_counter += 1; + } + r::InlinedSymbol::Inlined(_, ref syms) => { + if syms.len() > 0 { + // If we are reducing symbols, then start and end + // can be the start/end location of the first/last + // symbol respectively. Easy peezy. + + rust!( + rust, + "let {}start{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + + let last_arg_index = arg_counter + syms.len() - 1; + rust!( + rust, + "let {}end{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + last_arg_index + ); + } else { + // If we have no symbols, then `arg_counter` + // represents index of the first symbol after this + // inlined item (if any), and `arg_counter-1` + // represents index of the symbol before this + // item. + + if arg_counter > 0 { + rust!( + rust, + "let {}start{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter - 1 + ); + } else if num_flat_args > 0 { + rust!( + rust, + "let {}start{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + } else { + rust!( + rust, + "let {}start{} = {}lookbehind.clone();", + grammar.prefix, + temp_counter, + grammar.prefix + ); + } + + if arg_counter < num_flat_args { + rust!( + rust, + "let {}end{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + } else if num_flat_args > 0 { + rust!( + rust, + "let {}end{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + num_flat_args - 1 + ); + } else { + rust!( + rust, + "let {}end{} = {}lookahead.clone();", + grammar.prefix, + temp_counter, + grammar.prefix + ); + } + } + + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + + // Now create temporaries for the inlined things + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + arg_counter += 1; + } + r::InlinedSymbol::Inlined(inlined_action, ref syms) => { + // execute the inlined reduce action + rust!( + rust, + "let {}temp{} = {}action{}(", + grammar.prefix, + temp_counter, + grammar.prefix, + inlined_action.index() + ); + for parameter in &grammar.parameters { + rust!(rust, "{},", parameter.name); + } + for i in 0..syms.len() { + rust!(rust, "{}{},", grammar.prefix, arg_counter + i); + } + if syms.len() == 0 { + rust!(rust, "&{}start{},", grammar.prefix, temp_counter); + rust!(rust, "&{}end{},", grammar.prefix, temp_counter); + } + rust!(rust, ");"); + + // wrap up the inlined value along with its span + rust!( + rust, + "let {}temp{} = ({}start{}, {}temp{}, {}end{});", + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter + ); + + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + + rust!(rust, "{}action{}(", grammar.prefix, data.action.index()); + for parameter in &grammar.parameters { + rust!(rust, "{},", parameter.name); + } + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + rust!(rust, "{}{},", grammar.prefix, arg_counter); + arg_counter += 1; + } + r::InlinedSymbol::Inlined(_, ref syms) => { + rust!(rust, "{}temp{},", grammar.prefix, temp_counter); + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + assert!(data.symbols.len() > 0); + rust!(rust, ")"); + + rust!(rust, "}}"); + Ok(()) +} diff --git a/third_party/rust/lalrpop/src/build/fake_term.rs b/third_party/rust/lalrpop/src/build/fake_term.rs index 2c4fbb6e0700..30f67d08b3df 100644 --- a/third_party/rust/lalrpop/src/build/fake_term.rs +++ b/third_party/rust/lalrpop/src/build/fake_term.rs @@ -1,84 +1,84 @@ -use std::io::{self, Write}; -use term::color::Color; -use term::{self, Attr, Terminal}; - -/// A `Terminal` that just ignores all attempts at formatting. Used -/// to report errors when no ANSI terminfo is available. -pub struct FakeTerminal { - write: W, -} - -impl FakeTerminal { - pub fn new(write: W) -> FakeTerminal { - FakeTerminal { write: write } - } -} - -impl Write for FakeTerminal { - fn write(&mut self, buf: &[u8]) -> io::Result { - self.write.write(buf) - } - - fn flush(&mut self) -> io::Result<()> { - self.write.flush() - } -} - -impl Terminal for FakeTerminal { - type Output = W; - - fn fg(&mut self, _color: Color) -> term::Result<()> { - Ok(()) - } - - fn bg(&mut self, _color: Color) -> term::Result<()> { - Ok(()) - } - - fn attr(&mut self, _attr: Attr) -> term::Result<()> { - Ok(()) - } - - fn supports_attr(&self, _attr: Attr) -> bool { - false - } - - fn reset(&mut self) -> term::Result<()> { - Ok(()) - } - - fn supports_reset(&self) -> bool { - false - } - - fn supports_color(&self) -> bool { - false - } - - fn cursor_up(&mut self) -> term::Result<()> { - Ok(()) - } - - fn delete_line(&mut self) -> term::Result<()> { - Ok(()) - } - - fn carriage_return(&mut self) -> term::Result<()> { - Ok(()) - } - - fn get_ref(&self) -> &Self::Output { - &self.write - } - - fn get_mut(&mut self) -> &mut Self::Output { - &mut self.write - } - - fn into_inner(self) -> Self::Output - where - Self: Sized, - { - self.write - } -} +use std::io::{self, Write}; +use term::{self, Attr, Terminal}; +use term::color::Color; + +/// A `Terminal` that just ignores all attempts at formatting. Used +/// to report errors when no ANSI terminfo is available. +pub struct FakeTerminal { + write: W, +} + +impl FakeTerminal { + pub fn new(write: W) -> FakeTerminal { + FakeTerminal { write: write } + } +} + +impl Write for FakeTerminal { + fn write(&mut self, buf: &[u8]) -> io::Result { + self.write.write(buf) + } + + fn flush(&mut self) -> io::Result<()> { + self.write.flush() + } +} + +impl Terminal for FakeTerminal { + type Output = W; + + fn fg(&mut self, _color: Color) -> term::Result<()> { + Ok(()) + } + + fn bg(&mut self, _color: Color) -> term::Result<()> { + Ok(()) + } + + fn attr(&mut self, _attr: Attr) -> term::Result<()> { + Ok(()) + } + + fn supports_attr(&self, _attr: Attr) -> bool { + false + } + + fn reset(&mut self) -> term::Result<()> { + Ok(()) + } + + fn supports_reset(&self) -> bool { + false + } + + fn supports_color(&self) -> bool { + false + } + + fn cursor_up(&mut self) -> term::Result<()> { + Ok(()) + } + + fn delete_line(&mut self) -> term::Result<()> { + Ok(()) + } + + fn carriage_return(&mut self) -> term::Result<()> { + Ok(()) + } + + fn get_ref(&self) -> &Self::Output { + &self.write + } + + fn get_mut(&mut self) -> &mut Self::Output { + &mut self.write + } + + fn into_inner(self) -> Self::Output + where + Self: Sized, + { + self.write + } +} diff --git a/third_party/rust/lalrpop/src/build/mod.rs b/third_party/rust/lalrpop/src/build/mod.rs index a9f82176c1ef..c0603007cc56 100644 --- a/third_party/rust/lalrpop/src/build/mod.rs +++ b/third_party/rust/lalrpop/src/build/mod.rs @@ -1,573 +1,568 @@ -//! Utilies for running in a build script. - -use atty; -use file_text::FileText; -use grammar::parse_tree as pt; -use grammar::repr as r; -use lalrpop_util::ParseError; -use lexer::intern_token; -use lr1; -use message::builder::InlineBuilder; -use message::{Content, Message}; -use normalize; -use parser; -use rust::RustWrite; -use session::{ColorConfig, Session}; -use sha2::{Digest, Sha256}; -use term; -use tls::Tls; -use tok; - -use std::fs; -use std::io::{self, BufRead, Write}; -use std::path::{Path, PathBuf}; -use std::process::exit; -use std::rc::Rc; - -mod action; -mod fake_term; - -use self::fake_term::FakeTerminal; - -const LALRPOP_VERSION_HEADER: &'static str = concat!( - "// auto-generated: \"", - env!("CARGO_PKG_NAME"), - " ", - env!("CARGO_PKG_VERSION"), - "\"" -); - -fn hash_file(file: &Path) -> io::Result { - let mut file = try!(fs::File::open(&file)); - let mut sha_256 = Sha256::new(); - try!(io::copy(&mut file, &mut sha_256)); - - let mut hash_str = "// sha256: ".to_owned(); - for byte in sha_256.result() { - hash_str.push_str(&format!("{:x}", byte)); - } - Ok(hash_str) -} - -pub fn process_dir>(session: Rc, root_dir: P) -> io::Result<()> { - let lalrpop_files = try!(lalrpop_files(root_dir)); - for lalrpop_file in lalrpop_files { - try!(process_file(session.clone(), lalrpop_file)); - } - Ok(()) -} - -pub fn process_file>(session: Rc, lalrpop_file: P) -> io::Result<()> { - let lalrpop_file = lalrpop_file.as_ref(); - let rs_file = try!(resolve_rs_file(&session, lalrpop_file)); - let report_file = try!(resolve_report_file(&session, lalrpop_file)); - process_file_into(session, lalrpop_file, &rs_file, &report_file) -} - -fn resolve_rs_file(session: &Session, lalrpop_file: &Path) -> io::Result { - gen_resolve_file(session, lalrpop_file, "rs") -} - -fn resolve_report_file(session: &Session, lalrpop_file: &Path) -> io::Result { - gen_resolve_file(session, lalrpop_file, "report") -} - -fn gen_resolve_file(session: &Session, lalrpop_file: &Path, ext: &str) -> io::Result { - let in_dir = if let Some(ref d) = session.in_dir { - d.as_path() - } else { - Path::new(".") - }; - let out_dir = if let Some(ref d) = session.out_dir { - d.as_path() - } else { - in_dir - }; - - // If the lalrpop file is not in in_dir, the result is that the - // .rs file is created in the same directory as the lalrpop file - // for compatibility reasons - Ok(out_dir - .join(lalrpop_file.strip_prefix(&in_dir).unwrap_or(lalrpop_file)) - .with_extension(ext)) -} - -fn process_file_into( - session: Rc, - lalrpop_file: &Path, - rs_file: &Path, - report_file: &Path, -) -> io::Result<()> { - if session.force_build || try!(needs_rebuild(&lalrpop_file, &rs_file)) { - log!( - session, - Informative, - "processing file `{}`", - lalrpop_file.to_string_lossy() - ); - if let Some(parent) = rs_file.parent() { - try!(fs::create_dir_all(parent)); - } - try!(make_read_only(&rs_file, false)); - try!(remove_old_file(&rs_file)); - - // Load the LALRPOP source text for this file: - let file_text = Rc::new(try!(FileText::from_path(lalrpop_file.to_path_buf()))); - - // Store the session and file-text in TLS -- this is not - // intended to be used in this high-level code, but it gives - // easy access to this information pervasively in the - // low-level LR(1) and grammar normalization code. This is - // particularly useful for error-reporting. - let _tls = Tls::install(session.clone(), file_text.clone()); - - // Do the LALRPOP processing itself and write the resulting - // buffer into a file. We use a buffer so that if LR(1) - // generation fails at some point, we don't leave a partial - // file behind. - { - let grammar = try!(parse_and_normalize_grammar(&session, &file_text)); - let buffer = try!(emit_recursive_ascent(&session, &grammar, &report_file)); - let mut output_file = try!(fs::File::create(&rs_file)); - try!(writeln!(output_file, "{}", LALRPOP_VERSION_HEADER)); - try!(writeln!(output_file, "{}", try!(hash_file(&lalrpop_file)))); - try!(output_file.write_all(&buffer)); - } - - try!(make_read_only(&rs_file, true)); - } - Ok(()) -} - -fn remove_old_file(rs_file: &Path) -> io::Result<()> { - match fs::remove_file(rs_file) { - Ok(()) => Ok(()), - Err(e) => { - // Unix reports NotFound, Windows PermissionDenied! - match e.kind() { - io::ErrorKind::NotFound | io::ErrorKind::PermissionDenied => Ok(()), - _ => Err(e), - } - } - } -} - -fn needs_rebuild(lalrpop_file: &Path, rs_file: &Path) -> io::Result { - match fs::File::open(&rs_file) { - Ok(rs_file) => { - let mut version_str = String::new(); - let mut hash_str = String::new(); - - let mut f = io::BufReader::new(rs_file); - - try!(f.read_line(&mut version_str)); - try!(f.read_line(&mut hash_str)); - - Ok(hash_str.trim() != try!(hash_file(&lalrpop_file)) - || version_str.trim() != LALRPOP_VERSION_HEADER) - } - Err(e) => match e.kind() { - io::ErrorKind::NotFound => Ok(true), - _ => Err(e), - }, - } -} - -fn make_read_only(rs_file: &Path, ro: bool) -> io::Result<()> { - if rs_file.is_file() { - let rs_metadata = try!(fs::metadata(&rs_file)); - let mut rs_permissions = rs_metadata.permissions(); - rs_permissions.set_readonly(ro); - fs::set_permissions(&rs_file, rs_permissions) - } else { - Ok(()) - } -} - -fn lalrpop_files>(root_dir: P) -> io::Result> { - let mut result = vec![]; - for entry in try!(fs::read_dir(root_dir)) { - let entry = try!(entry); - let file_type = try!(entry.file_type()); - - let path = entry.path(); - - if file_type.is_dir() { - result.extend(try!(lalrpop_files(&path))); - } - - if file_type.is_file() - && path.extension().is_some() - && path.extension().unwrap() == "lalrpop" - { - result.push(path); - } - } - Ok(result) -} - -fn parse_and_normalize_grammar(session: &Session, file_text: &FileText) -> io::Result { - let grammar = match parser::parse_grammar(file_text.text()) { - Ok(grammar) => grammar, - - Err(ParseError::InvalidToken { location }) => { - let ch = file_text.text()[location..].chars().next().unwrap(); - report_error( - &file_text, - pt::Span(location, location), - &format!("invalid character `{}`", ch), - ); - } - - Err(ParseError::UnrecognizedToken { - token: None, - expected: _, - }) => { - let len = file_text.text().len(); - report_error( - &file_text, - pt::Span(len, len), - &format!("unexpected end of file"), - ); - } - - Err(ParseError::UnrecognizedToken { - token: Some((lo, _, hi)), - expected, - }) => { - let _ = expected; // didn't implement this yet :) - let text = &file_text.text()[lo..hi]; - report_error( - &file_text, - pt::Span(lo, hi), - &format!("unexpected token: `{}`", text), - ); - } - - Err(ParseError::ExtraToken { token: (lo, _, hi) }) => { - let text = &file_text.text()[lo..hi]; - report_error( - &file_text, - pt::Span(lo, hi), - &format!("extra token at end of input: `{}`", text), - ); - } - - Err(ParseError::User { error }) => { - let string = match error.code { - tok::ErrorCode::UnrecognizedToken => "unrecognized token", - tok::ErrorCode::UnterminatedEscape => "unterminated escape; missing '`'?", - tok::ErrorCode::UnrecognizedEscape => { - "unrecognized escape; only \\n, \\r, \\t, \\\" and \\\\ are recognized" - } - tok::ErrorCode::UnterminatedStringLiteral => { - "unterminated string literal; missing `\"`?" - } - tok::ErrorCode::UnterminatedCharacterLiteral => { - "unterminated character literal; missing `'`?" - } - tok::ErrorCode::UnterminatedAttribute => "unterminated #! attribute; missing `]`?", - tok::ErrorCode::ExpectedStringLiteral => "expected string literal; missing `\"`?", - tok::ErrorCode::UnterminatedCode => { - "unterminated code block; perhaps a missing `;`, `)`, `]` or `}`?" - } - }; - - report_error( - &file_text, - pt::Span(error.location, error.location + 1), - string, - ) - } - }; - - match normalize::normalize(session, grammar) { - Ok(grammar) => Ok(grammar), - Err(error) => report_error(&file_text, error.span, &error.message), - } -} - -fn report_error(file_text: &FileText, span: pt::Span, message: &str) -> ! { - println!("{} error: {}", file_text.span_str(span), message); - - let out = io::stderr(); - let mut out = out.lock(); - file_text.highlight(span, &mut out).unwrap(); - - exit(1); -} - -fn report_messages(messages: Vec) -> term::Result<()> { - let builder = InlineBuilder::new().begin_paragraphs(); - let builder = messages - .into_iter() - .fold(builder, |b, m| b.push(Box::new(m))); - let content = builder.end().end(); - report_content(&*content) -} - -fn report_content(content: &Content) -> term::Result<()> { - // FIXME -- can we query the size of the terminal somehow? - let canvas = content.emit_to_canvas(80); - - let try_colors = match Tls::session().color_config { - ColorConfig::Yes => true, - ColorConfig::No => false, - ColorConfig::IfTty => atty::is(atty::Stream::Stdout), - }; - - if try_colors { - if let Some(mut stdout) = term::stdout() { - return canvas.write_to(&mut *stdout); - } - } - - let stdout = io::stdout(); - let mut stdout = FakeTerminal::new(stdout.lock()); - canvas.write_to(&mut stdout) -} - -fn emit_module_attributes( - grammar: &r::Grammar, - rust: &mut RustWrite, -) -> io::Result<()> { - rust.write_module_attributes(grammar) -} - -fn emit_uses(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { - rust.write_uses("", grammar) -} - -fn emit_recursive_ascent( - session: &Session, - grammar: &r::Grammar, - report_file: &Path, -) -> io::Result> { - let mut rust = RustWrite::new(vec![]); - - // We generate a module structure like this: - // - // ``` - // mod { - // // For each public symbol: - // pub fn parse_XYZ(); - // mod __XYZ { ... } - // - // // For each bit of action code: - // - // } - // ``` - // - // Note that the action code goes in the outer module. This is - // intentional because it means that the foo.lalrpop file serves - // as a module in the rust hierarchy, so if the action code - // includes things like `super::` it will resolve in the natural - // way. - - try!(emit_module_attributes(grammar, &mut rust)); - try!(emit_uses(grammar, &mut rust)); - - if grammar.start_nonterminals.is_empty() { - println!("Error: no public symbols declared in grammar"); - exit(1); - } - - for (user_nt, start_nt) in &grammar.start_nonterminals { - // We generate these, so there should always be exactly 1 - // production. Otherwise the LR(1) algorithm doesn't know - // where to stop! - assert_eq!(grammar.productions_for(start_nt).len(), 1); - - log!( - session, - Verbose, - "Building states for public nonterminal `{}`", - user_nt - ); - - let _lr1_tls = lr1::Lr1Tls::install(grammar.terminals.clone()); - - let lr1result = lr1::build_states(&grammar, start_nt.clone()); - if session.emit_report { - let mut output_report_file = try!(fs::File::create(&report_file)); - try!(lr1::generate_report(&mut output_report_file, &lr1result)); - } - - let states = match lr1result { - Ok(states) => states, - Err(error) => { - let messages = lr1::report_error(&grammar, &error); - let _ = report_messages(messages); - exit(1) // FIXME -- propagate up instead of calling `exit` - } - }; - - match grammar.algorithm.codegen { - r::LrCodeGeneration::RecursiveAscent => try!(lr1::codegen::ascent::compile( - &grammar, - user_nt.clone(), - start_nt.clone(), - &states, - "super", - &mut rust, - )), - r::LrCodeGeneration::TableDriven => try!(lr1::codegen::parse_table::compile( - &grammar, - user_nt.clone(), - start_nt.clone(), - &states, - "super", - &mut rust, - )), - - r::LrCodeGeneration::TestAll => try!(lr1::codegen::test_all::compile( - &grammar, - user_nt.clone(), - start_nt.clone(), - &states, - &mut rust, - )), - } - - rust!( - rust, - "{}use self::{}parse{}::{}Parser;", - grammar.nonterminals[&user_nt].visibility, - grammar.prefix, - start_nt, - user_nt - ); - } - - if let Some(ref intern_token) = grammar.intern_token { - try!(intern_token::compile(&grammar, intern_token, &mut rust)); - rust!(rust, "pub use self::{}intern_token::Token;", grammar.prefix); - } - - try!(action::emit_action_code(grammar, &mut rust)); - - try!(emit_to_triple_trait(grammar, &mut rust)); - - Ok(rust.into_inner()) -} - -fn emit_to_triple_trait(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { - #![allow(non_snake_case)] - - let L = grammar.types.terminal_loc_type(); - let T = grammar.types.terminal_token_type(); - let E = grammar.types.error_type(); - - let mut user_type_parameters = String::new(); - for type_parameter in &grammar.type_parameters { - user_type_parameters.push_str(&format!("{}, ", type_parameter)); - } - - rust!(rust, ""); - rust!( - rust, - "pub trait {}ToTriple<{}> {{", - grammar.prefix, - user_type_parameters, - ); - rust!(rust, "type Error;"); - rust!( - rust, - "fn to_triple(value: Self) -> Result<({},{},{}),Self::Error>;", - L, - T, - L, - ); - rust!(rust, "}}"); - - rust!(rust, ""); - if grammar.types.opt_terminal_loc_type().is_some() { - rust!( - rust, - "impl<{}> {}ToTriple<{}> for ({}, {}, {}) {{", - user_type_parameters, - grammar.prefix, - user_type_parameters, - L, - T, - L, - ); - rust!(rust, "type Error = {};", E); - rust!( - rust, - "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", - L, - T, - L, - E, - ); - rust!(rust, "Ok(value)"); - rust!(rust, "}}"); - rust!(rust, "}}"); - - rust!( - rust, - "impl<{}> {}ToTriple<{}> for Result<({}, {}, {}),{}> {{", - user_type_parameters, - grammar.prefix, - user_type_parameters, - L, - T, - L, - E, - ); - rust!(rust, "type Error = {};", E); - rust!( - rust, - "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", - L, - T, - L, - E, - ); - rust!(rust, "value"); - rust!(rust, "}}"); - rust!(rust, "}}"); - } else { - rust!( - rust, - "impl<{}> {}ToTriple<{}> for {} {{", - user_type_parameters, - grammar.prefix, - user_type_parameters, - T, - ); - rust!(rust, "type Error = {};", E); - rust!( - rust, - "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", - T, - E, - ); - rust!(rust, "Ok(((), value, ()))"); - rust!(rust, "}}"); - rust!(rust, "}}"); - - rust!( - rust, - "impl<{}> {}ToTriple<{}> for Result<({}),{}> {{", - user_type_parameters, - grammar.prefix, - user_type_parameters, - T, - E, - ); - rust!(rust, "type Error = {};", E); - rust!( - rust, - "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", - T, - E, - ); - rust!(rust, "value.map(|v| ((), v, ()))"); - rust!(rust, "}}"); - rust!(rust, "}}"); - } - - Ok(()) -} +//! Utilies for running in a build script. + +use atty; +use file_text::FileText; +use grammar::parse_tree as pt; +use grammar::repr as r; +use lalrpop_util::ParseError; +use lexer::intern_token; +use lr1; +use message::{Content, Message}; +use message::builder::InlineBuilder; +use normalize; +use parser; +use rust::RustWrite; +use session::{ColorConfig, Session}; +use term; +use tls::Tls; +use tok; +use sha2::{Sha256, Digest}; + +use std::fs; +use std::io::{self, BufRead, Write}; +use std::path::{Path, PathBuf}; +use std::process::exit; +use std::rc::Rc; + +mod action; +mod fake_term; + +use self::fake_term::FakeTerminal; + +const LALRPOP_VERSION_HEADER: &'static str = concat!( + "// auto-generated: \"", + env!("CARGO_PKG_NAME"), + " ", + env!("CARGO_PKG_VERSION"), + "\"" +); + +fn hash_file(file: &Path) -> io::Result { + let mut file = try!(fs::File::open(&file)); + let hash = try!(Sha256::digest_reader(&mut file)); + + let mut hash_str = "// sha256: ".to_owned(); + for byte in hash { + hash_str.push_str(&format!("{:x}", byte)); + } + Ok(hash_str) +} + +pub fn process_dir>(session: Rc, root_dir: P) -> io::Result<()> { + let lalrpop_files = try!(lalrpop_files(root_dir)); + for lalrpop_file in lalrpop_files { + try!(process_file(session.clone(), lalrpop_file)); + } + Ok(()) +} + +pub fn process_file>(session: Rc, lalrpop_file: P) -> io::Result<()> { + let lalrpop_file = lalrpop_file.as_ref(); + let rs_file = try!(resolve_rs_file(&session, lalrpop_file)); + let report_file = try!(resolve_report_file(&session, lalrpop_file)); + process_file_into(session, lalrpop_file, &rs_file, &report_file) +} + +fn resolve_rs_file(session: &Session, lalrpop_file: &Path) -> io::Result { + gen_resolve_file(session, lalrpop_file, "rs") +} + +fn resolve_report_file(session: &Session, lalrpop_file: &Path) -> io::Result { + gen_resolve_file(session, lalrpop_file, "report") +} + +fn gen_resolve_file(session: &Session, lalrpop_file: &Path, ext: &str) -> io::Result { + let in_dir = if let Some(ref d) = session.in_dir { + d.as_path() + } else { + Path::new(".") + }; + let out_dir = if let Some(ref d) = session.out_dir { + d.as_path() + } else { + in_dir + }; + + // If the lalrpop file is not in in_dir, the result is that the + // .rs file is created in the same directory as the lalrpop file + // for compatibility reasons + Ok(out_dir + .join(lalrpop_file.strip_prefix(&in_dir).unwrap_or(lalrpop_file)) + .with_extension(ext)) +} + +fn process_file_into( + session: Rc, + lalrpop_file: &Path, + rs_file: &Path, + report_file: &Path, +) -> io::Result<()> { + if session.force_build || try!(needs_rebuild(&lalrpop_file, &rs_file)) { + log!( + session, + Informative, + "processing file `{}`", + lalrpop_file.to_string_lossy() + ); + if let Some(parent) = rs_file.parent() { + try!(fs::create_dir_all(parent)); + } + try!(make_read_only(&rs_file, false)); + try!(remove_old_file(&rs_file)); + + // Load the LALRPOP source text for this file: + let file_text = Rc::new(try!(FileText::from_path(lalrpop_file.to_path_buf()))); + + // Store the session and file-text in TLS -- this is not + // intended to be used in this high-level code, but it gives + // easy access to this information pervasively in the + // low-level LR(1) and grammar normalization code. This is + // particularly useful for error-reporting. + let _tls = Tls::install(session.clone(), file_text.clone()); + + // Do the LALRPOP processing itself and write the resulting + // buffer into a file. We use a buffer so that if LR(1) + // generation fails at some point, we don't leave a partial + // file behind. + { + let grammar = try!(parse_and_normalize_grammar(&session, &file_text)); + let buffer = try!(emit_recursive_ascent(&session, &grammar, &report_file)); + let mut output_file = try!(fs::File::create(&rs_file)); + try!(writeln!(output_file, "{}", LALRPOP_VERSION_HEADER)); + try!(writeln!(output_file, "{}", try!(hash_file(&lalrpop_file)))); + try!(output_file.write_all(&buffer)); + } + + try!(make_read_only(&rs_file, true)); + } + Ok(()) +} + +fn remove_old_file(rs_file: &Path) -> io::Result<()> { + match fs::remove_file(rs_file) { + Ok(()) => Ok(()), + Err(e) => { + // Unix reports NotFound, Windows PermissionDenied! + match e.kind() { + io::ErrorKind::NotFound | io::ErrorKind::PermissionDenied => Ok(()), + _ => Err(e), + } + } + } +} + +fn needs_rebuild(lalrpop_file: &Path, rs_file: &Path) -> io::Result { + match fs::File::open(&rs_file) { + Ok(rs_file) => { + let mut version_str = String::new(); + let mut hash_str = String::new(); + + let mut f = io::BufReader::new(rs_file); + + try!(f.read_line(&mut version_str)); + try!(f.read_line(&mut hash_str)); + + Ok(hash_str.trim() != try!(hash_file(&lalrpop_file)) + || version_str.trim() != LALRPOP_VERSION_HEADER) + } + Err(e) => match e.kind() { + io::ErrorKind::NotFound => Ok(true), + _ => Err(e), + }, + } +} + +fn make_read_only(rs_file: &Path, ro: bool) -> io::Result<()> { + if rs_file.is_file() { + let rs_metadata = try!(fs::metadata(&rs_file)); + let mut rs_permissions = rs_metadata.permissions(); + rs_permissions.set_readonly(ro); + fs::set_permissions(&rs_file, rs_permissions) + } else { + Ok(()) + } +} + +fn lalrpop_files>(root_dir: P) -> io::Result> { + let mut result = vec![]; + for entry in try!(fs::read_dir(root_dir)) { + let entry = try!(entry); + let file_type = try!(entry.file_type()); + + let path = entry.path(); + + if file_type.is_dir() { + result.extend(try!(lalrpop_files(&path))); + } + + if file_type.is_file() && path.extension().is_some() + && path.extension().unwrap() == "lalrpop" + { + result.push(path); + } + } + Ok(result) +} + +fn parse_and_normalize_grammar(session: &Session, file_text: &FileText) -> io::Result { + let grammar = match parser::parse_grammar(file_text.text()) { + Ok(grammar) => grammar, + + Err(ParseError::InvalidToken { location }) => { + let ch = file_text.text()[location..].chars().next().unwrap(); + report_error( + &file_text, + pt::Span(location, location), + &format!("invalid character `{}`", ch), + ); + } + + Err(ParseError::UnrecognizedToken { + token: None, + expected: _, + }) => { + let len = file_text.text().len(); + report_error( + &file_text, + pt::Span(len, len), + &format!("unexpected end of file"), + ); + } + + Err(ParseError::UnrecognizedToken { + token: Some((lo, _, hi)), + expected, + }) => { + let _ = expected; // didn't implement this yet :) + let text = &file_text.text()[lo..hi]; + report_error( + &file_text, + pt::Span(lo, hi), + &format!("unexpected token: `{}`", text), + ); + } + + Err(ParseError::ExtraToken { token: (lo, _, hi) }) => { + let text = &file_text.text()[lo..hi]; + report_error( + &file_text, + pt::Span(lo, hi), + &format!("extra token at end of input: `{}`", text), + ); + } + + Err(ParseError::User { error }) => { + let string = match error.code { + tok::ErrorCode::UnrecognizedToken => "unrecognized token", + tok::ErrorCode::UnterminatedEscape => "unterminated escape; missing '`'?", + tok::ErrorCode::UnterminatedStringLiteral => { + "unterminated string literal; missing `\"`?" + } + tok::ErrorCode::UnterminatedCharacterLiteral => { + "unterminated character literal; missing `'`?" + } + tok::ErrorCode::UnterminatedAttribute => "unterminated #! attribute; missing `]`?", + tok::ErrorCode::ExpectedStringLiteral => "expected string literal; missing `\"`?", + tok::ErrorCode::UnterminatedCode => { + "unterminated code block; perhaps a missing `;`, `)`, `]` or `}`?" + } + }; + + report_error( + &file_text, + pt::Span(error.location, error.location + 1), + string, + ) + } + }; + + match normalize::normalize(session, grammar) { + Ok(grammar) => Ok(grammar), + Err(error) => report_error(&file_text, error.span, &error.message), + } +} + +fn report_error(file_text: &FileText, span: pt::Span, message: &str) -> ! { + println!("{} error: {}", file_text.span_str(span), message); + + let out = io::stderr(); + let mut out = out.lock(); + file_text.highlight(span, &mut out).unwrap(); + + exit(1); +} + +fn report_messages(messages: Vec) -> term::Result<()> { + let builder = InlineBuilder::new().begin_paragraphs(); + let builder = messages + .into_iter() + .fold(builder, |b, m| b.push(Box::new(m))); + let content = builder.end().end(); + report_content(&*content) +} + +fn report_content(content: &Content) -> term::Result<()> { + // FIXME -- can we query the size of the terminal somehow? + let canvas = content.emit_to_canvas(80); + + let try_colors = match Tls::session().color_config { + ColorConfig::Yes => true, + ColorConfig::No => false, + ColorConfig::IfTty => atty::is(atty::Stream::Stdout), + }; + + if try_colors { + if let Some(mut stdout) = term::stdout() { + return canvas.write_to(&mut *stdout); + } + } + + let stdout = io::stdout(); + let mut stdout = FakeTerminal::new(stdout.lock()); + canvas.write_to(&mut stdout) +} + +fn emit_module_attributes( + grammar: &r::Grammar, + rust: &mut RustWrite, +) -> io::Result<()> { + rust.write_module_attributes(grammar) +} + +fn emit_uses(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + rust.write_uses("", grammar) +} + +fn emit_recursive_ascent( + session: &Session, + grammar: &r::Grammar, + report_file: &Path, +) -> io::Result> { + let mut rust = RustWrite::new(vec![]); + + // We generate a module structure like this: + // + // ``` + // mod { + // // For each public symbol: + // pub fn parse_XYZ(); + // mod __XYZ { ... } + // + // // For each bit of action code: + // + // } + // ``` + // + // Note that the action code goes in the outer module. This is + // intentional because it means that the foo.lalrpop file serves + // as a module in the rust hierarchy, so if the action code + // includes things like `super::` it will resolve in the natural + // way. + + try!(emit_module_attributes(grammar, &mut rust)); + try!(emit_uses(grammar, &mut rust)); + + if grammar.start_nonterminals.is_empty() { + println!("Error: no public symbols declared in grammar"); + exit(1); + } + + for (user_nt, start_nt) in &grammar.start_nonterminals { + // We generate these, so there should always be exactly 1 + // production. Otherwise the LR(1) algorithm doesn't know + // where to stop! + assert_eq!(grammar.productions_for(start_nt).len(), 1); + + log!( + session, + Verbose, + "Building states for public nonterminal `{}`", + user_nt + ); + + let _lr1_tls = lr1::Lr1Tls::install(grammar.terminals.clone()); + + let lr1result = lr1::build_states(&grammar, start_nt.clone()); + if session.emit_report { + let mut output_report_file = try!(fs::File::create(&report_file)); + try!(lr1::generate_report(&mut output_report_file, &lr1result)); + } + + let states = match lr1result { + Ok(states) => states, + Err(error) => { + let messages = lr1::report_error(&grammar, &error); + let _ = report_messages(messages); + exit(1) // FIXME -- propagate up instead of calling `exit` + } + }; + + match grammar.algorithm.codegen { + r::LrCodeGeneration::RecursiveAscent => try!(lr1::codegen::ascent::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + "super", + &mut rust, + )), + r::LrCodeGeneration::TableDriven => try!(lr1::codegen::parse_table::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + "super", + &mut rust, + )), + + r::LrCodeGeneration::TestAll => try!(lr1::codegen::test_all::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + &mut rust, + )), + } + + rust!( + rust, + "{}use self::{}parse{}::{}Parser;", + grammar.nonterminals[&user_nt].visibility, + grammar.prefix, + start_nt, + user_nt + ); + } + + if let Some(ref intern_token) = grammar.intern_token { + try!(intern_token::compile(&grammar, intern_token, &mut rust)); + rust!(rust, "pub use self::{}intern_token::Token;", grammar.prefix); + } + + try!(action::emit_action_code(grammar, &mut rust)); + + try!(emit_to_triple_trait(grammar, &mut rust)); + + Ok(rust.into_inner()) +} + +fn emit_to_triple_trait(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + #![allow(non_snake_case)] + + let L = grammar.types.terminal_loc_type(); + let T = grammar.types.terminal_token_type(); + let E = grammar.types.error_type(); + + let mut user_type_parameters = String::new(); + for type_parameter in &grammar.type_parameters { + user_type_parameters.push_str(&format!("{}, ", type_parameter)); + } + + rust!(rust, ""); + rust!( + rust, + "pub trait {}ToTriple<{}> {{", + grammar.prefix, + user_type_parameters, + ); + rust!(rust, "type Error;"); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),Self::Error>;", + L, + T, + L, + ); + rust!(rust, "}}"); + + rust!(rust, ""); + if grammar.types.opt_terminal_loc_type().is_some() { + rust!( + rust, + "impl<{}> {}ToTriple<{}> for ({}, {}, {}) {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + L, + T, + L, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", + L, + T, + L, + E, + ); + rust!(rust, "Ok(value)"); + rust!(rust, "}}"); + rust!(rust, "}}"); + + rust!( + rust, + "impl<{}> {}ToTriple<{}> for Result<({}, {}, {}),{}> {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + L, + T, + L, + E, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", + L, + T, + L, + E, + ); + rust!(rust, "value"); + rust!(rust, "}}"); + rust!(rust, "}}"); + } else { + rust!( + rust, + "impl<{}> {}ToTriple<{}> for {} {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + T, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", + T, + E, + ); + rust!(rust, "Ok(((), value, ()))"); + rust!(rust, "}}"); + rust!(rust, "}}"); + + rust!( + rust, + "impl<{}> {}ToTriple<{}> for Result<({}),{}> {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + T, + E, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", + T, + E, + ); + rust!(rust, "value.map(|v| ((), v, ()))"); + rust!(rust, "}}"); + rust!(rust, "}}"); + } + + Ok(()) +} diff --git a/third_party/rust/lalrpop/src/collections/map.rs b/third_party/rust/lalrpop/src/collections/map.rs index 99147e84bab0..56b45196d6a7 100644 --- a/third_party/rust/lalrpop/src/collections/map.rs +++ b/third_party/rust/lalrpop/src/collections/map.rs @@ -1,15 +1,15 @@ -use std::collections::BTreeMap; - -pub use std::collections::btree_map::Entry; - -/// In general, we avoid coding directly against any particular map, -/// but rather build against `util::Map` (and `util::map` to construct -/// an instance). This should be a deterministic map, such that two -/// runs of LALRPOP produce the same output, but otherwise it doesn't -/// matter much. I'd probably prefer to use `HashMap` with an -/// alternative hasher, but that's not stable. -pub type Map = BTreeMap; - -pub fn map() -> Map { - Map::::default() -} +use std::collections::BTreeMap; + +pub use std::collections::btree_map::Entry; + +/// In general, we avoid coding directly against any particular map, +/// but rather build against `util::Map` (and `util::map` to construct +/// an instance). This should be a deterministic map, such that two +/// runs of LALRPOP produce the same output, but otherwise it doesn't +/// matter much. I'd probably prefer to use `HashMap` with an +/// alternative hasher, but that's not stable. +pub type Map = BTreeMap; + +pub fn map() -> Map { + Map::::default() +} diff --git a/third_party/rust/lalrpop/src/collections/mod.rs b/third_party/rust/lalrpop/src/collections/mod.rs index 8d5097e51f66..566cae9090ad 100644 --- a/third_party/rust/lalrpop/src/collections/mod.rs +++ b/third_party/rust/lalrpop/src/collections/mod.rs @@ -1,7 +1,7 @@ -mod map; -mod multimap; -mod set; - -pub use self::map::{map, Entry, Map}; -pub use self::multimap::{Collection, Multimap}; -pub use self::set::{set, Set}; +mod map; +mod multimap; +mod set; + +pub use self::map::{map, Entry, Map}; +pub use self::multimap::{Collection, Multimap}; +pub use self::set::{set, Set}; diff --git a/third_party/rust/lalrpop/src/collections/multimap.rs b/third_party/rust/lalrpop/src/collections/multimap.rs index 1f5896d77146..7e5c1a77666d 100644 --- a/third_party/rust/lalrpop/src/collections/multimap.rs +++ b/third_party/rust/lalrpop/src/collections/multimap.rs @@ -1,141 +1,140 @@ -use std::collections::btree_map; -use std::default::Default; -use std::iter::FromIterator; - -use super::map::{map, Map}; -use super::set::Set; - -pub struct Multimap { - map: Map, -} - -pub trait Collection: Default { - type Item; - - /// Push `item` into the collection and return `true` if - /// collection changed. - fn push(&mut self, item: Self::Item) -> bool; -} - -impl Multimap { - pub fn new() -> Multimap { - Multimap { map: map() } - } - - pub fn is_empty(&self) -> bool { - self.map.is_empty() - } - - /// Push `value` to the collection associated with `key`. Returns - /// true if the collection was changed from the default. - pub fn push(&mut self, key: K, value: C::Item) -> bool { - let mut inserted = false; - let pushed = self - .map - .entry(key) - .or_insert_with(|| { - inserted = true; - C::default() - }) - .push(value); - inserted || pushed - } - - pub fn get(&self, key: &K) -> Option<&C> { - self.map.get(key) - } - - pub fn iter(&self) -> btree_map::Iter { - self.map.iter() - } - - pub fn into_iter(self) -> btree_map::IntoIter { - self.map.into_iter() - } -} - -impl IntoIterator for Multimap { - type Item = (K, C); - type IntoIter = btree_map::IntoIter; - fn into_iter(self) -> btree_map::IntoIter { - self.into_iter() - } -} - -impl<'iter, K: Ord, C: Collection> IntoIterator for &'iter Multimap { - type Item = (&'iter K, &'iter C); - type IntoIter = btree_map::Iter<'iter, K, C>; - fn into_iter(self) -> btree_map::Iter<'iter, K, C> { - self.iter() - } -} - -impl FromIterator<(K, C::Item)> for Multimap { - fn from_iter(iterator: T) -> Self - where - T: IntoIterator, - { - let mut map = Multimap::new(); - for (key, value) in iterator { - map.push(key, value); - } - map - } -} - -impl Collection for () { - type Item = (); - fn push(&mut self, _item: ()) -> bool { - false - } -} - -impl Collection for Vec { - type Item = T; - - fn push(&mut self, item: T) -> bool { - self.push(item); - true // always changes - } -} - -impl Collection for Set { - type Item = T; - - fn push(&mut self, item: T) -> bool { - self.insert(item) - } -} - -impl Default for Multimap { - fn default() -> Self { - Multimap::new() - } -} - -impl, I> Collection for Multimap { - type Item = (K, I); - - fn push(&mut self, item: (K, I)) -> bool { - let (key, value) = item; - self.push(key, value) - } -} - -#[test] -fn push() { - let mut m: Multimap> = Multimap::new(); - assert!(m.push(0, 'a')); - assert!(m.push(0, 'b')); - assert!(!m.push(0, 'b')); - assert!(m.push(1, 'a')); -} - -#[test] -fn push_nil() { - let mut m: Multimap = Multimap::new(); - assert!(m.push(0, ())); - assert!(!m.push(0, ())); - assert!(m.push(1, ())); - assert!(!m.push(0, ())); -} +use std::collections::btree_map; +use std::default::Default; +use std::iter::FromIterator; + +use super::map::{map, Map}; +use super::set::Set; + +pub struct Multimap { + map: Map, +} + +pub trait Collection: Default { + type Item; + + /// Push `item` into the collection and return `true` if + /// collection changed. + fn push(&mut self, item: Self::Item) -> bool; +} + +impl Multimap { + pub fn new() -> Multimap { + Multimap { map: map() } + } + + pub fn is_empty(&self) -> bool { + self.map.is_empty() + } + + /// Push `value` to the collection associated with `key`. Returns + /// true if the collection was changed from the default. + pub fn push(&mut self, key: K, value: C::Item) -> bool { + let mut inserted = false; + let pushed = self.map + .entry(key) + .or_insert_with(|| { + inserted = true; + C::default() + }) + .push(value); + inserted || pushed + } + + pub fn get(&self, key: &K) -> Option<&C> { + self.map.get(key) + } + + pub fn iter(&self) -> btree_map::Iter { + self.map.iter() + } + + pub fn into_iter(self) -> btree_map::IntoIter { + self.map.into_iter() + } +} + +impl IntoIterator for Multimap { + type Item = (K, C); + type IntoIter = btree_map::IntoIter; + fn into_iter(self) -> btree_map::IntoIter { + self.into_iter() + } +} + +impl<'iter, K: Ord, C: Collection> IntoIterator for &'iter Multimap { + type Item = (&'iter K, &'iter C); + type IntoIter = btree_map::Iter<'iter, K, C>; + fn into_iter(self) -> btree_map::Iter<'iter, K, C> { + self.iter() + } +} + +impl FromIterator<(K, C::Item)> for Multimap { + fn from_iter(iterator: T) -> Self + where + T: IntoIterator, + { + let mut map = Multimap::new(); + for (key, value) in iterator { + map.push(key, value); + } + map + } +} + +impl Collection for () { + type Item = (); + fn push(&mut self, _item: ()) -> bool { + false + } +} + +impl Collection for Vec { + type Item = T; + + fn push(&mut self, item: T) -> bool { + self.push(item); + true // always changes + } +} + +impl Collection for Set { + type Item = T; + + fn push(&mut self, item: T) -> bool { + self.insert(item) + } +} + +impl Default for Multimap { + fn default() -> Self { + Multimap::new() + } +} + +impl, I> Collection for Multimap { + type Item = (K, I); + + fn push(&mut self, item: (K, I)) -> bool { + let (key, value) = item; + self.push(key, value) + } +} + +#[test] +fn push() { + let mut m: Multimap> = Multimap::new(); + assert!(m.push(0, 'a')); + assert!(m.push(0, 'b')); + assert!(!m.push(0, 'b')); + assert!(m.push(1, 'a')); +} + +#[test] +fn push_nil() { + let mut m: Multimap = Multimap::new(); + assert!(m.push(0, ())); + assert!(!m.push(0, ())); + assert!(m.push(1, ())); + assert!(!m.push(0, ())); +} diff --git a/third_party/rust/lalrpop/src/collections/set.rs b/third_party/rust/lalrpop/src/collections/set.rs index 1626614dcb95..26aa3de894fd 100644 --- a/third_party/rust/lalrpop/src/collections/set.rs +++ b/third_party/rust/lalrpop/src/collections/set.rs @@ -1,8 +1,8 @@ -use std::collections::BTreeSet; - -/// As `Map`, but for sets. -pub type Set = BTreeSet; - -pub fn set() -> Set { - Set::::default() -} +use std::collections::BTreeSet; + +/// As `Map`, but for sets. +pub type Set = BTreeSet; + +pub fn set() -> Set { + Set::::default() +} diff --git a/third_party/rust/lalrpop/src/file_text.rs b/third_party/rust/lalrpop/src/file_text.rs index be36422e6d5f..234477625d55 100644 --- a/third_party/rust/lalrpop/src/file_text.rs +++ b/third_party/rust/lalrpop/src/file_text.rs @@ -1,144 +1,144 @@ -use grammar::parse_tree as pt; -use std::fmt::{Display, Error, Formatter}; -use std::fs::File; -use std::io::{self, Read, Write}; -use std::path::PathBuf; - -pub struct FileText { - path: PathBuf, - input_str: String, - newlines: Vec, -} - -impl FileText { - pub fn from_path(path: PathBuf) -> io::Result { - let mut input_str = String::new(); - let mut f = try!(File::open(&path)); - try!(f.read_to_string(&mut input_str)); - Ok(FileText::new(path, input_str)) - } - - pub fn new(path: PathBuf, input_str: String) -> FileText { - let newline_indices: Vec = { - let input_indices = input_str - .as_bytes() - .iter() - .enumerate() - .filter(|&(_, &b)| b == ('\n' as u8)) - .map(|(i, _)| i + 1); // index of first char in the line - Some(0).into_iter().chain(input_indices).collect() - }; - - FileText { - path: path, - input_str: input_str, - newlines: newline_indices, - } - } - - #[cfg(test)] - pub fn test() -> FileText { - Self::new(PathBuf::from("test.lalrpop"), String::from("")) - } - - pub fn text(&self) -> &String { - &self.input_str - } - - pub fn span_str(&self, span: pt::Span) -> String { - let (start_line, start_col) = self.line_col(span.0); - let (end_line, end_col) = self.line_col(span.1); - format!( - "{}:{}:{}: {}:{}", - self.path.display(), - start_line + 1, - start_col + 1, - end_line + 1, - end_col - ) - } - - fn line_col(&self, pos: usize) -> (usize, usize) { - let num_lines = self.newlines.len(); - let line = (0..num_lines) - .filter(|&i| self.newlines[i] > pos) - .map(|i| i - 1) - .next() - .unwrap_or(num_lines - 1); - - // offset of the first character in `line` - let line_offset = self.newlines[line]; - - // find the column; use `saturating_sub` in case `pos` is the - // newline itself, which we'll call column 0 - let col = pos - line_offset; - - (line, col) - } - - fn line_text(&self, line_num: usize) -> &str { - let start_offset = self.newlines[line_num]; - if line_num == self.newlines.len() - 1 { - &self.input_str[start_offset..] - } else { - let end_offset = self.newlines[line_num + 1]; - &self.input_str[start_offset..end_offset - 1] - } - } - - pub fn highlight(&self, span: pt::Span, out: &mut Write) -> io::Result<()> { - let (start_line, start_col) = self.line_col(span.0); - let (end_line, end_col) = self.line_col(span.1); - - // (*) use `saturating_sub` since the start line could be the newline - // itself, in which case we'll call it column zero - - // span is within one line: - if start_line == end_line { - let text = self.line_text(start_line); - try!(writeln!(out, " {}", text)); - - if end_col - start_col <= 1 { - try!(writeln!(out, " {}^", Repeat(' ', start_col))); - } else { - let width = end_col - start_col; - try!(writeln!( - out, - " {}~{}~", - Repeat(' ', start_col), - Repeat('~', width.saturating_sub(2)) - )); - } - } else { - // span is across many lines, find the maximal width of any of those - let line_strs: Vec<_> = (start_line..end_line + 1) - .map(|i| self.line_text(i)) - .collect(); - let max_len = line_strs.iter().map(|l| l.len()).max().unwrap(); - try!(writeln!( - out, - " {}{}~+", - Repeat(' ', start_col), - Repeat('~', max_len - start_col) - )); - for line in &line_strs[..line_strs.len() - 1] { - try!(writeln!(out, "| {0:<1$} |", line, max_len)); - } - try!(writeln!(out, "| {}", line_strs[line_strs.len() - 1])); - try!(writeln!(out, "+~{}", Repeat('~', end_col))); - } - - Ok(()) - } -} - -struct Repeat(char, usize); - -impl Display for Repeat { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - for _ in 0..self.1 { - try!(write!(fmt, "{}", self.0)); - } - Ok(()) - } -} +use grammar::parse_tree as pt; +use std::fmt::{Display, Error, Formatter}; +use std::fs::File; +use std::path::PathBuf; +use std::io::{self, Read, Write}; + +pub struct FileText { + path: PathBuf, + input_str: String, + newlines: Vec, +} + +impl FileText { + pub fn from_path(path: PathBuf) -> io::Result { + let mut input_str = String::new(); + let mut f = try!(File::open(&path)); + try!(f.read_to_string(&mut input_str)); + Ok(FileText::new(path, input_str)) + } + + pub fn new(path: PathBuf, input_str: String) -> FileText { + let newline_indices: Vec = { + let input_indices = input_str + .as_bytes() + .iter() + .enumerate() + .filter(|&(_, &b)| b == ('\n' as u8)) + .map(|(i, _)| i + 1); // index of first char in the line + Some(0).into_iter().chain(input_indices).collect() + }; + + FileText { + path: path, + input_str: input_str, + newlines: newline_indices, + } + } + + #[cfg(test)] + pub fn test() -> FileText { + Self::new(PathBuf::from("test.lalrpop"), String::from("")) + } + + pub fn text(&self) -> &String { + &self.input_str + } + + pub fn span_str(&self, span: pt::Span) -> String { + let (start_line, start_col) = self.line_col(span.0); + let (end_line, end_col) = self.line_col(span.1); + format!( + "{}:{}:{}: {}:{}", + self.path.display(), + start_line + 1, + start_col + 1, + end_line + 1, + end_col + ) + } + + fn line_col(&self, pos: usize) -> (usize, usize) { + let num_lines = self.newlines.len(); + let line = (0..num_lines) + .filter(|&i| self.newlines[i] > pos) + .map(|i| i - 1) + .next() + .unwrap_or(num_lines - 1); + + // offset of the first character in `line` + let line_offset = self.newlines[line]; + + // find the column; use `saturating_sub` in case `pos` is the + // newline itself, which we'll call column 0 + let col = pos - line_offset; + + (line, col) + } + + fn line_text(&self, line_num: usize) -> &str { + let start_offset = self.newlines[line_num]; + if line_num == self.newlines.len() - 1 { + &self.input_str[start_offset..] + } else { + let end_offset = self.newlines[line_num + 1]; + &self.input_str[start_offset..end_offset - 1] + } + } + + pub fn highlight(&self, span: pt::Span, out: &mut Write) -> io::Result<()> { + let (start_line, start_col) = self.line_col(span.0); + let (end_line, end_col) = self.line_col(span.1); + + // (*) use `saturating_sub` since the start line could be the newline + // itself, in which case we'll call it column zero + + // span is within one line: + if start_line == end_line { + let text = self.line_text(start_line); + try!(writeln!(out, " {}", text)); + + if end_col - start_col <= 1 { + try!(writeln!(out, " {}^", Repeat(' ', start_col))); + } else { + let width = end_col - start_col; + try!(writeln!( + out, + " {}~{}~", + Repeat(' ', start_col), + Repeat('~', width.saturating_sub(2)) + )); + } + } else { + // span is across many lines, find the maximal width of any of those + let line_strs: Vec<_> = (start_line..end_line + 1) + .map(|i| self.line_text(i)) + .collect(); + let max_len = line_strs.iter().map(|l| l.len()).max().unwrap(); + try!(writeln!( + out, + " {}{}~+", + Repeat(' ', start_col), + Repeat('~', max_len - start_col) + )); + for line in &line_strs[..line_strs.len() - 1] { + try!(writeln!(out, "| {0:<1$} |", line, max_len)); + } + try!(writeln!(out, "| {}", line_strs[line_strs.len() - 1])); + try!(writeln!(out, "+~{}", Repeat('~', end_col))); + } + + Ok(()) + } +} + +struct Repeat(char, usize); + +impl Display for Repeat { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + for _ in 0..self.1 { + try!(write!(fmt, "{}", self.0)); + } + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/generate.rs b/third_party/rust/lalrpop/src/generate.rs index 8462b8f28a06..609c8263f3bd 100644 --- a/third_party/rust/lalrpop/src/generate.rs +++ b/third_party/rust/lalrpop/src/generate.rs @@ -1,80 +1,78 @@ -//! Generate valid parse trees. - -use grammar::repr::*; -use rand::{self, Rng}; -use std::iter::Iterator; - -#[derive(PartialEq, Eq)] -pub enum ParseTree { - Nonterminal(NonterminalString, Vec), - Terminal(TerminalString), -} - -pub fn random_parse_tree(grammar: &Grammar, symbol: NonterminalString) -> ParseTree { - let mut gen = Generator { - grammar: grammar, - rng: rand::thread_rng(), - depth: 0, - }; - loop { - // sometimes, the random walk overflows the stack, so we have a max, and if - // it is exceeded, we just try again - if let Some(result) = gen.nonterminal(symbol.clone()) { - return result; - } - gen.depth = 0; - } -} - -struct Generator<'grammar> { - grammar: &'grammar Grammar, - rng: rand::ThreadRng, - depth: u32, -} - -const MAX_DEPTH: u32 = 10000; - -impl<'grammar> Generator<'grammar> { - fn nonterminal(&mut self, nt: NonterminalString) -> Option { - if self.depth > MAX_DEPTH { - return None; - } - - self.depth += 1; - let productions = self.grammar.productions_for(&nt); - let index: usize = self.rng.gen_range(0, productions.len()); - let production = &productions[index]; - let trees: Option> = production - .symbols - .iter() - .map(|sym| self.symbol(sym.clone())) - .collect(); - trees.map(|trees| ParseTree::Nonterminal(nt, trees)) - } - - fn symbol(&mut self, symbol: Symbol) -> Option { - match symbol { - Symbol::Nonterminal(nt) => self.nonterminal(nt), - Symbol::Terminal(t) => Some(ParseTree::Terminal(t)), - } - } -} - -impl ParseTree { - pub fn terminals(&self) -> Vec { - let mut vec = vec![]; - self.push_terminals(&mut vec); - vec - } - - fn push_terminals(&self, vec: &mut Vec) { - match *self { - ParseTree::Terminal(ref s) => vec.push(s.clone()), - ParseTree::Nonterminal(_, ref trees) => { - for tree in trees { - tree.push_terminals(vec); - } - } - } - } -} +//! Generate valid parse trees. + +use grammar::repr::*; +use rand::{self, Rng}; +use std::iter::Iterator; + +#[derive(PartialEq, Eq)] +pub enum ParseTree { + Nonterminal(NonterminalString, Vec), + Terminal(TerminalString), +} + +pub fn random_parse_tree(grammar: &Grammar, symbol: NonterminalString) -> ParseTree { + let mut gen = Generator { + grammar: grammar, + rng: rand::thread_rng(), + depth: 0, + }; + loop { + // sometimes, the random walk overflows the stack, so we have a max, and if + // it is exceeded, we just try again + if let Some(result) = gen.nonterminal(symbol.clone()) { + return result; + } + gen.depth = 0; + } +} + +struct Generator<'grammar> { + grammar: &'grammar Grammar, + rng: rand::ThreadRng, + depth: u32, +} + +const MAX_DEPTH: u32 = 10000; + +impl<'grammar> Generator<'grammar> { + fn nonterminal(&mut self, nt: NonterminalString) -> Option { + if self.depth > MAX_DEPTH { + return None; + } + + self.depth += 1; + let productions = self.grammar.productions_for(&nt); + let index: usize = self.rng.gen_range(0, productions.len()); + let production = &productions[index]; + let trees: Option> = production + .symbols + .iter() + .map(|sym| self.symbol(sym.clone())) + .collect(); + trees.map(|trees| ParseTree::Nonterminal(nt, trees)) + } + + fn symbol(&mut self, symbol: Symbol) -> Option { + match symbol { + Symbol::Nonterminal(nt) => self.nonterminal(nt), + Symbol::Terminal(t) => Some(ParseTree::Terminal(t)), + } + } +} + +impl ParseTree { + pub fn terminals(&self) -> Vec { + let mut vec = vec![]; + self.push_terminals(&mut vec); + vec + } + + fn push_terminals(&self, vec: &mut Vec) { + match *self { + ParseTree::Terminal(ref s) => vec.push(s.clone()), + ParseTree::Nonterminal(_, ref trees) => for tree in trees { + tree.push_terminals(vec); + }, + } + } +} diff --git a/third_party/rust/lalrpop/src/grammar/consts.rs b/third_party/rust/lalrpop/src/grammar/consts.rs index d3a6729387f8..57d5e3656648 100644 --- a/third_party/rust/lalrpop/src/grammar/consts.rs +++ b/third_party/rust/lalrpop/src/grammar/consts.rs @@ -1,29 +1,26 @@ -/// Recognized associated type for the token location -pub const LOCATION: &'static str = "Location"; - -/// Recognized associated type for custom errors -pub const ERROR: &'static str = "Error"; - -/// The lifetime parameter injected when we do not have an external token enum -pub const INPUT_LIFETIME: &'static str = "'input"; - -/// The parameter injected when we do not have an external token enum -pub const INPUT_PARAMETER: &'static str = "input"; - -/// The annotation to request inlining. -pub const INLINE: &'static str = "inline"; - -/// The annotation to request conditional compilation. -pub const CFG: &'static str = "cfg"; - -/// Annotation to request LALR. -pub const LALR: &'static str = "LALR"; - -/// Annotation to request recursive-ascent-style code generation. -pub const TABLE_DRIVEN: &'static str = "table_driven"; - -/// Annotation to request recursive-ascent-style code generation. -pub const RECURSIVE_ASCENT: &'static str = "recursive_ascent"; - -/// Annotation to request test-all-style code generation. -pub const TEST_ALL: &'static str = "test_all"; +/// Recognized associated type for the token location +pub const LOCATION: &'static str = "Location"; + +/// Recognized associated type for custom errors +pub const ERROR: &'static str = "Error"; + +/// The lifetime parameter injected when we do not have an external token enum +pub const INPUT_LIFETIME: &'static str = "'input"; + +/// The parameter injected when we do not have an external token enum +pub const INPUT_PARAMETER: &'static str = "input"; + +/// The annotation to request inlining. +pub const INLINE: &'static str = "inline"; + +/// Annotation to request LALR. +pub const LALR: &'static str = "LALR"; + +/// Annotation to request recursive-ascent-style code generation. +pub const TABLE_DRIVEN: &'static str = "table_driven"; + +/// Annotation to request recursive-ascent-style code generation. +pub const RECURSIVE_ASCENT: &'static str = "recursive_ascent"; + +/// Annotation to request test-all-style code generation. +pub const TEST_ALL: &'static str = "test_all"; diff --git a/third_party/rust/lalrpop/src/grammar/mod.rs b/third_party/rust/lalrpop/src/grammar/mod.rs index d1470fc4cf8a..627202e60e32 100644 --- a/third_party/rust/lalrpop/src/grammar/mod.rs +++ b/third_party/rust/lalrpop/src/grammar/mod.rs @@ -1,7 +1,7 @@ -//! The grammar definition. - -pub mod consts; -pub mod parse_tree; -pub mod pattern; -pub mod repr; -// pub mod token; +//! The grammar definition. + +pub mod consts; +pub mod parse_tree; +pub mod pattern; +pub mod repr; +// pub mod token; diff --git a/third_party/rust/lalrpop/src/grammar/parse_tree.rs b/third_party/rust/lalrpop/src/grammar/parse_tree.rs index a8fceabcf5cd..0f72f02b8b0e 100644 --- a/third_party/rust/lalrpop/src/grammar/parse_tree.rs +++ b/third_party/rust/lalrpop/src/grammar/parse_tree.rs @@ -1,1105 +1,1103 @@ -//! The "parse-tree" is what is produced by the parser. We use it do -//! some pre-expansion and so forth before creating the proper AST. - -use grammar::consts::{LALR, RECURSIVE_ASCENT, TABLE_DRIVEN, TEST_ALL}; -use grammar::pattern::Pattern; -use grammar::repr::{self as r, NominalTypeRepr, TypeRepr}; -use lexer::dfa::DFA; -use message::builder::InlineBuilder; -use message::Content; -use std::fmt::{Debug, Display, Error, Formatter}; -use string_cache::DefaultAtom as Atom; -use tls::Tls; -use util::Sep; - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Grammar { - // see field `prefix` in `grammar::repr::Grammar` - pub prefix: String, - pub span: Span, - pub type_parameters: Vec, - pub parameters: Vec, - pub where_clauses: Vec>, - pub items: Vec, - pub annotations: Vec, - pub module_attributes: Vec, -} - -#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Span(pub usize, pub usize); - -impl Into> for Span { - fn into(self) -> Box { - let file_text = Tls::file_text(); - let string = file_text.span_str(self); - - // Insert an Adjacent block to prevent wrapping inside this - // string: - InlineBuilder::new() - .begin_adjacent() - .text(string) - .end() - .end() - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum GrammarItem { - MatchToken(MatchToken), - ExternToken(ExternToken), - InternToken(InternToken), - Nonterminal(NonterminalData), - Use(String), -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct MatchToken { - pub contents: Vec, - pub span: Span, -} - -impl MatchToken { - pub fn new(contents: MatchContents, span: Span) -> MatchToken { - MatchToken { - contents: vec![contents], - span: span, - } - } - - // Not really sure if this is the best way to do it - pub fn add(self, contents: MatchContents) -> MatchToken { - let mut new_contents = self.contents.clone(); - new_contents.push(contents); - MatchToken { - contents: new_contents, - span: self.span, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct MatchContents { - pub items: Vec, -} - -// FIXME: Validate that MatchSymbol is actually a TerminalString::Literal -// and that MatchMapping is an Id or String -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum MatchItem { - CatchAll(Span), - Unmapped(MatchSymbol, Span), - Mapped(MatchSymbol, MatchMapping, Span), -} - -impl MatchItem { - pub fn is_catch_all(&self) -> bool { - match *self { - MatchItem::CatchAll(_) => true, - _ => false, - } - } - - pub fn span(&self) -> Span { - match *self { - MatchItem::CatchAll(span) => span, - MatchItem::Unmapped(_, span) => span, - MatchItem::Mapped(_, _, span) => span, - } - } -} - -pub type MatchSymbol = TerminalLiteral; -pub type MatchMapping = TerminalString; - -/// Intern tokens are not typed by the user: they are synthesized in -/// the absence of an "extern" declaration with information about the -/// string literals etc that appear in the grammar. -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct InternToken { - /// Set of `r"foo"` and `"foo"` literals extracted from the - /// grammar. Sorted by order of increasing precedence. - pub match_entries: Vec, - pub dfa: DFA, -} - -/// In `token_check`, as we prepare to generate a tokenizer, we -/// combine any `match` declaration the user may have given with the -/// set of literals (e.g. `"foo"` or `r"[a-z]"`) that appear elsewhere -/// in their in the grammar to produce a series of `MatchEntry`. Each -/// `MatchEntry` roughly corresponds to one line in a `match` declaration. -/// -/// So e.g. if you had -/// -/// ``` -/// match { -/// r"(?i)BEGIN" => "BEGIN", -/// "+" => "+", -/// } else { -/// _ -/// } -/// -/// ID = r"[a-zA-Z]+" -/// ``` -/// -/// This would correspond to three match entries: -/// - `MatchEntry { match_literal: r"(?i)BEGIN", user_name: "BEGIN", precedence: 2 }` -/// - `MatchEntry { match_literal: "+", user_name: "+", precedence: 3 }` -/// - `MatchEntry { match_literal: "r[a-zA-Z]+"", user_name: r"[a-zA-Z]+", precedence: 0 }` -/// -/// A couple of things to note: -/// -/// - Literals appearing in the grammar are converting into an "identity" mapping -/// - Each match group G is combined with the implicit priority IP of 1 for literals and 0 for -/// regex to yield the final precedence; the formula is `G*2 + IP`. -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub struct MatchEntry { - /// The precedence of this match entry. - /// - /// NB: This field must go first, so that `PartialOrd` sorts by precedence first! - pub precedence: usize, - pub match_literal: TerminalLiteral, - pub user_name: TerminalString, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct ExternToken { - pub span: Span, - pub associated_types: Vec, - pub enum_token: Option, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct AssociatedType { - pub type_span: Span, - pub type_name: Atom, - pub type_ref: TypeRef, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct EnumToken { - pub type_name: TypeRef, - pub type_span: Span, - pub conversions: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Conversion { - pub span: Span, - pub from: TerminalString, - pub to: Pattern, -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub struct Path { - pub absolute: bool, - pub ids: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum TypeRef { - // (T1, T2) - Tuple(Vec), - - // Foo<'a, 'b, T1, T2>, Foo::Bar, etc - Nominal { - path: Path, - types: Vec, - }, - - Ref { - lifetime: Option, - mutable: bool, - referent: Box, - }, - - // 'x ==> only should appear within nominal types, but what do we care - Lifetime(Atom), - - // Foo or Bar ==> treated specially since macros may care - Id(Atom), - - // ==> type of a nonterminal, emitted by macro expansion - OfSymbol(SymbolKind), -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum WhereClause { - // 'a: 'b + 'c - Lifetime { - lifetime: Atom, - bounds: Vec, - }, - // where for<'a> &'a T: Debug + Into - Type { - forall: Option>, - ty: T, - bounds: Vec>, - }, -} - -impl WhereClause { - pub fn map(&self, mut f: F) -> WhereClause - where - F: FnMut(&T) -> U, - { - match *self { - WhereClause::Lifetime { - ref lifetime, - ref bounds, - } => WhereClause::Lifetime { - lifetime: lifetime.clone(), - bounds: bounds.clone(), - }, - WhereClause::Type { - ref forall, - ref ty, - ref bounds, - } => WhereClause::Type { - forall: forall.clone(), - ty: f(ty), - bounds: bounds.iter().map(|b| b.map(&mut f)).collect(), - }, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum TypeBound { - // The `'a` in `T: 'a`. - Lifetime(Atom), - // `for<'a> FnMut(&'a usize)` - Fn { - forall: Option>, - path: Path, - parameters: Vec, - ret: Option, - }, - // `some::Trait` or `some::Trait` or `some::Trait` - // or `for<'a> Trait<'a, T>` - Trait { - forall: Option>, - path: Path, - parameters: Vec>, - }, -} - -impl TypeBound { - pub fn map(&self, mut f: F) -> TypeBound - where - F: FnMut(&T) -> U, - { - match *self { - TypeBound::Lifetime(ref l) => TypeBound::Lifetime(l.clone()), - TypeBound::Fn { - ref forall, - ref path, - ref parameters, - ref ret, - } => TypeBound::Fn { - forall: forall.clone(), - path: path.clone(), - parameters: parameters.iter().map(&mut f).collect(), - ret: ret.as_ref().map(f), - }, - TypeBound::Trait { - ref forall, - ref path, - ref parameters, - } => TypeBound::Trait { - forall: forall.clone(), - path: path.clone(), - parameters: parameters.iter().map(|p| p.map(&mut f)).collect(), - }, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum TypeBoundParameter { - // 'a - Lifetime(Atom), - // `T` or `'a` - TypeParameter(T), - // `Item = T` - Associated(Atom, T), -} - -impl TypeBoundParameter { - pub fn map(&self, mut f: F) -> TypeBoundParameter - where - F: FnMut(&T) -> U, - { - match *self { - TypeBoundParameter::Lifetime(ref l) => TypeBoundParameter::Lifetime(l.clone()), - TypeBoundParameter::TypeParameter(ref t) => TypeBoundParameter::TypeParameter(f(t)), - TypeBoundParameter::Associated(ref id, ref t) => { - TypeBoundParameter::Associated(id.clone(), f(t)) - } - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub enum TypeParameter { - Lifetime(Atom), - Id(Atom), -} - -impl TypeParameter { - pub fn is_lifetime(&self) -> bool { - match *self { - TypeParameter::Lifetime(_) => true, - _ => false, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Parameter { - pub name: Atom, - pub ty: TypeRef, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum Visibility { - Pub(Option), - Priv, -} - -impl Visibility { - pub fn is_pub(&self) -> bool { - match *self { - Visibility::Pub(_) => true, - Visibility::Priv => false, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct NonterminalData { - pub visibility: Visibility, - pub name: NonterminalString, - pub annotations: Vec, - pub span: Span, - pub args: Vec, // macro arguments - pub type_decl: Option, - pub alternatives: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Annotation { - pub id_span: Span, - pub id: Atom, - pub arg: Option<(Atom, String)>, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Alternative { - pub span: Span, - - pub expr: ExprSymbol, - - // if C, only legal in macros - pub condition: Option, - - // => { code } - pub action: Option, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum ActionKind { - User(String), - Fallible(String), - Lookahead, - Lookbehind, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Condition { - pub span: Span, - pub lhs: NonterminalString, // X - pub rhs: Atom, // "Foo" - pub op: ConditionOp, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum ConditionOp { - // X == "Foo", equality - Equals, - - // X != "Foo", inequality - NotEquals, - - // X ~~ "Foo", regexp match - Match, - - // X !~ "Foo", regexp non-match - NotMatch, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Symbol { - pub span: Span, - pub kind: SymbolKind, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum SymbolKind { - // (X Y) - Expr(ExprSymbol), - - // foo, before name resolution - AmbiguousId(Atom), - - // "foo" and foo (after name resolution) - Terminal(TerminalString), - - // foo, after name resolution - Nonterminal(NonterminalString), - - // foo<..> - Macro(MacroSymbol), - - // X+, X?, X* - Repeat(Box), - - // - Choose(Box), - - // x:X - Name(Atom, Box), - - // @L - Lookahead, - - // @R - Lookbehind, - - Error, -} - -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub enum TerminalString { - Literal(TerminalLiteral), - Bare(Atom), - Error, -} - -impl TerminalString { - pub fn as_literal(&self) -> Option { - match *self { - TerminalString::Literal(ref l) => Some(l.clone()), - _ => None, - } - } - - pub fn display_len(&self) -> usize { - match *self { - TerminalString::Literal(ref x) => x.display_len(), - TerminalString::Bare(ref x) => x.len(), - TerminalString::Error => "error".len(), - } - } -} - -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub enum TerminalLiteral { - Quoted(Atom), - Regex(Atom), -} - -impl TerminalLiteral { - /// The *base precedence* is the precedence within a `match { }` - /// block level. It indicates that quoted things like `"foo"` get - /// precedence over regex matches. - pub fn base_precedence(&self) -> usize { - match *self { - TerminalLiteral::Quoted(_) => 1, - TerminalLiteral::Regex(_) => 0, - } - } - - pub fn display_len(&self) -> usize { - match *self { - TerminalLiteral::Quoted(ref x) => x.len(), - TerminalLiteral::Regex(ref x) => x.len() + "####r".len(), - } - } -} - -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct NonterminalString(pub Atom); - -impl NonterminalString { - pub fn len(&self) -> usize { - self.0.len() - } -} - -impl Into> for NonterminalString { - fn into(self) -> Box { - let session = Tls::session(); - - InlineBuilder::new() - .text(self) - .styled(session.nonterminal_symbol) - .end() - } -} - -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub enum RepeatOp { - Star, - Plus, - Question, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct RepeatSymbol { - pub op: RepeatOp, - pub symbol: Symbol, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct ExprSymbol { - pub symbols: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct MacroSymbol { - pub name: NonterminalString, - pub args: Vec, -} - -impl TerminalString { - pub fn quoted(i: Atom) -> TerminalString { - TerminalString::Literal(TerminalLiteral::Quoted(i)) - } - - pub fn regex(i: Atom) -> TerminalString { - TerminalString::Literal(TerminalLiteral::Regex(i)) - } -} - -impl Into> for TerminalString { - fn into(self) -> Box { - let session = Tls::session(); - InlineBuilder::new() - .text(self) - .styled(session.terminal_symbol) - .end() - } -} - -impl Grammar { - pub fn extern_token(&self) -> Option<&ExternToken> { - self.items.iter().flat_map(|i| i.as_extern_token()).next() - } - - pub fn enum_token(&self) -> Option<&EnumToken> { - self.items - .iter() - .flat_map(|i| i.as_extern_token()) - .flat_map(|et| et.enum_token.as_ref()) - .next() - } - - pub fn intern_token(&self) -> Option<&InternToken> { - self.items.iter().flat_map(|i| i.as_intern_token()).next() - } - - pub fn match_token(&self) -> Option<&MatchToken> { - self.items.iter().flat_map(|i| i.as_match_token()).next() - } -} - -impl GrammarItem { - pub fn is_macro_def(&self) -> bool { - match *self { - GrammarItem::Nonterminal(ref d) => d.is_macro_def(), - _ => false, - } - } - - pub fn as_nonterminal(&self) -> Option<&NonterminalData> { - match *self { - GrammarItem::Nonterminal(ref d) => Some(d), - GrammarItem::Use(..) => None, - GrammarItem::MatchToken(..) => None, - GrammarItem::ExternToken(..) => None, - GrammarItem::InternToken(..) => None, - } - } - - pub fn as_match_token(&self) -> Option<&MatchToken> { - match *self { - GrammarItem::Nonterminal(..) => None, - GrammarItem::Use(..) => None, - GrammarItem::MatchToken(ref d) => Some(d), - GrammarItem::ExternToken(..) => None, - GrammarItem::InternToken(..) => None, - } - } - - pub fn as_extern_token(&self) -> Option<&ExternToken> { - match *self { - GrammarItem::Nonterminal(..) => None, - GrammarItem::Use(..) => None, - GrammarItem::MatchToken(..) => None, - GrammarItem::ExternToken(ref d) => Some(d), - GrammarItem::InternToken(..) => None, - } - } - - pub fn as_intern_token(&self) -> Option<&InternToken> { - match *self { - GrammarItem::Nonterminal(..) => None, - GrammarItem::Use(..) => None, - GrammarItem::MatchToken(..) => None, - GrammarItem::ExternToken(..) => None, - GrammarItem::InternToken(ref d) => Some(d), - } - } -} - -impl NonterminalData { - pub fn is_macro_def(&self) -> bool { - !self.args.is_empty() - } -} - -impl Symbol { - pub fn new(span: Span, kind: SymbolKind) -> Symbol { - Symbol { - span: span, - kind: kind, - } - } - - pub fn canonical_form(&self) -> String { - format!("{}", self) - } -} - -impl Display for Visibility { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - Visibility::Pub(Some(ref path)) => write!(fmt, "pub({}) ", path), - Visibility::Pub(None) => write!(fmt, "pub "), - Visibility::Priv => Ok(()), - } - } -} - -impl Display for WhereClause { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - WhereClause::Lifetime { - ref lifetime, - ref bounds, - } => { - write!(fmt, "{}:", lifetime)?; - for (i, b) in bounds.iter().enumerate() { - if i != 0 { - write!(fmt, " +")?; - } - write!(fmt, " {}", b)?; - } - Ok(()) - } - WhereClause::Type { - ref forall, - ref ty, - ref bounds, - } => { - if let Some(ref forall) = *forall { - write!(fmt, "for<")?; - for (i, l) in forall.iter().enumerate() { - if i != 0 { - write!(fmt, ", ")?; - } - write!(fmt, "{}", l)?; - } - write!(fmt, "> ")?; - } - - write!(fmt, "{}: ", ty)?; - for (i, b) in bounds.iter().enumerate() { - if i != 0 { - write!(fmt, " +")?; - } - write!(fmt, " {}", b)?; - } - Ok(()) - } - } - } -} - -impl Display for TypeBound { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TypeBound::Lifetime(ref l) => write!(fmt, "{}", l), - TypeBound::Fn { - ref forall, - ref path, - ref parameters, - ref ret, - } => { - if let Some(ref forall) = *forall { - write!(fmt, "for<")?; - for (i, l) in forall.iter().enumerate() { - if i != 0 { - write!(fmt, ", ")?; - } - write!(fmt, "{}", l)?; - } - write!(fmt, "> ")?; - } - - write!(fmt, "{}(", path)?; - for (i, p) in parameters.iter().enumerate() { - if i != 0 { - write!(fmt, ", ")?; - } - write!(fmt, "{}", p)?; - } - write!(fmt, ")")?; - - if let Some(ref ret) = *ret { - write!(fmt, " -> {}", ret)?; - } - - Ok(()) - } - TypeBound::Trait { - ref forall, - ref path, - ref parameters, - } => { - if let Some(ref forall) = *forall { - write!(fmt, "for<")?; - for (i, l) in forall.iter().enumerate() { - if i != 0 { - write!(fmt, ", ")?; - } - write!(fmt, "{}", l)?; - } - write!(fmt, "> ")?; - } - - write!(fmt, "{}", path)?; - if parameters.is_empty() { - return Ok(()); - } - - write!(fmt, "<")?; - for (i, p) in parameters.iter().enumerate() { - if i != 0 { - write!(fmt, ", ")?; - } - write!(fmt, "{}", p)?; - } - write!(fmt, ">") - } - } - } -} - -impl Display for TypeBoundParameter { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TypeBoundParameter::Lifetime(ref l) => write!(fmt, "{}", l), - TypeBoundParameter::TypeParameter(ref t) => write!(fmt, "{}", t), - TypeBoundParameter::Associated(ref id, ref t) => write!(fmt, "{} = {}", id, t), - } - } -} - -impl Display for TerminalString { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TerminalString::Literal(ref s) => write!(fmt, "{}", s), - TerminalString::Bare(ref s) => write!(fmt, "{}", s), - TerminalString::Error => write!(fmt, "error"), - } - } -} - -impl Debug for TerminalString { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -impl Display for TerminalLiteral { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TerminalLiteral::Quoted(ref s) => write!(fmt, "{:?}", s.as_ref()), // the Debug impl adds the `"` and escaping - TerminalLiteral::Regex(ref s) => write!(fmt, "r#{:?}#", s.as_ref()), // FIXME -- need to determine proper number of # - } - } -} - -impl Debug for TerminalLiteral { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self) - } -} - -impl Display for Path { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!( - fmt, - "{}{}", - if self.absolute { "::" } else { "" }, - Sep("::", &self.ids), - ) - } -} - -impl Display for NonterminalString { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self.0) - } -} - -impl Debug for NonterminalString { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -impl Display for Symbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(&self.kind, fmt) - } -} - -impl Display for SymbolKind { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - SymbolKind::Expr(ref expr) => write!(fmt, "{}", expr), - SymbolKind::Terminal(ref s) => write!(fmt, "{}", s), - SymbolKind::Nonterminal(ref s) => write!(fmt, "{}", s), - SymbolKind::AmbiguousId(ref s) => write!(fmt, "{}", s), - SymbolKind::Macro(ref m) => write!(fmt, "{}", m), - SymbolKind::Repeat(ref r) => write!(fmt, "{}", r), - SymbolKind::Choose(ref s) => write!(fmt, "<{}>", s), - SymbolKind::Name(ref n, ref s) => write!(fmt, "{}:{}", n, s), - SymbolKind::Lookahead => write!(fmt, "@L"), - SymbolKind::Lookbehind => write!(fmt, "@R"), - SymbolKind::Error => write!(fmt, "error"), - } - } -} - -impl Display for RepeatSymbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}{}", self.symbol, self.op) - } -} - -impl Display for RepeatOp { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - RepeatOp::Plus => write!(fmt, "+"), - RepeatOp::Star => write!(fmt, "*"), - RepeatOp::Question => write!(fmt, "?"), - } - } -} - -impl Display for ExprSymbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "({})", Sep(" ", &self.symbols)) - } -} - -impl ExternToken { - pub fn associated_type(&self, name: Atom) -> Option<&AssociatedType> { - self.associated_types - .iter() - .filter(|a| a.type_name == name) - .next() - } -} - -impl ExprSymbol { - pub fn canonical_form(&self) -> String { - format!("{}", self) - } -} - -impl MacroSymbol { - pub fn canonical_form(&self) -> String { - format!("{}", self) - } -} - -impl RepeatSymbol { - pub fn canonical_form(&self) -> String { - format!("{}", self) - } -} - -impl Display for MacroSymbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}<{}>", self.name, Sep(", ", &self.args)) - } -} - -impl Display for TypeParameter { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TypeParameter::Lifetime(ref s) => write!(fmt, "{}", s), - TypeParameter::Id(ref s) => write!(fmt, "{}", s), - } - } -} - -impl Display for TypeRef { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TypeRef::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), - TypeRef::Nominal { - ref path, - ref types, - } - if types.len() == 0 => - { - write!(fmt, "{}", path) - } - TypeRef::Nominal { - ref path, - ref types, - } => write!(fmt, "{}<{}>", path, Sep(", ", types)), - TypeRef::Lifetime(ref s) => write!(fmt, "{}", s), - TypeRef::Id(ref s) => write!(fmt, "{}", s), - TypeRef::OfSymbol(ref s) => write!(fmt, "`{}`", s), - TypeRef::Ref { - lifetime: None, - mutable: false, - ref referent, - } => write!(fmt, "&{}", referent), - TypeRef::Ref { - lifetime: Some(ref l), - mutable: false, - ref referent, - } => write!(fmt, "&{} {}", l, referent), - TypeRef::Ref { - lifetime: None, - mutable: true, - ref referent, - } => write!(fmt, "&mut {}", referent), - TypeRef::Ref { - lifetime: Some(ref l), - mutable: true, - ref referent, - } => write!(fmt, "&{} mut {}", l, referent), - } - } -} - -impl TypeRef { - // Converts a TypeRef to a TypeRepr, assuming no inference is - // required etc. This is safe for all types a user can directly - // type, but not safe for the result of expanding macros. - pub fn type_repr(&self) -> TypeRepr { - match *self { - TypeRef::Tuple(ref types) => { - TypeRepr::Tuple(types.iter().map(TypeRef::type_repr).collect()) - } - TypeRef::Nominal { - ref path, - ref types, - } => TypeRepr::Nominal(NominalTypeRepr { - path: path.clone(), - types: types.iter().map(TypeRef::type_repr).collect(), - }), - TypeRef::Lifetime(ref id) => TypeRepr::Lifetime(id.clone()), - TypeRef::Id(ref id) => TypeRepr::Nominal(NominalTypeRepr { - path: Path::from_id(id.clone()), - types: vec![], - }), - TypeRef::OfSymbol(_) => unreachable!("OfSymbol produced by parser"), - TypeRef::Ref { - ref lifetime, - mutable, - ref referent, - } => TypeRepr::Ref { - lifetime: lifetime.clone(), - mutable: mutable, - referent: Box::new(referent.type_repr()), - }, - } - } -} - -impl Path { - pub fn from_id(id: Atom) -> Path { - Path { - absolute: false, - ids: vec![id], - } - } - - pub fn usize() -> Path { - Path { - absolute: false, - ids: vec![Atom::from("usize")], - } - } - - pub fn str() -> Path { - Path { - absolute: false, - ids: vec![Atom::from("str")], - } - } - - pub fn vec() -> Path { - Path { - absolute: true, - ids: vec![Atom::from("std"), Atom::from("vec"), Atom::from("Vec")], - } - } - - pub fn option() -> Path { - Path { - absolute: true, - ids: vec![ - Atom::from("std"), - Atom::from("option"), - Atom::from("Option"), - ], - } - } - - pub fn as_id(&self) -> Option { - if !self.absolute && self.ids.len() == 1 { - Some(self.ids[0].clone()) - } else { - None - } - } -} - -pub fn read_algorithm(annotations: &[Annotation], algorithm: &mut r::Algorithm) { - for annotation in annotations { - if annotation.id == Atom::from(LALR) { - algorithm.lalr = true; - } else if annotation.id == Atom::from(TABLE_DRIVEN) { - algorithm.codegen = r::LrCodeGeneration::TableDriven; - } else if annotation.id == Atom::from(RECURSIVE_ASCENT) { - algorithm.codegen = r::LrCodeGeneration::RecursiveAscent; - } else if annotation.id == Atom::from(TEST_ALL) { - algorithm.codegen = r::LrCodeGeneration::TestAll; - } else { - panic!( - "validation permitted unknown annotation: {:?}", - annotation.id, - ); - } - } -} +//! The "parse-tree" is what is produced by the parser. We use it do +//! some pre-expansion and so forth before creating the proper AST. + +use string_cache::DefaultAtom as Atom; +use lexer::dfa::DFA; +use grammar::consts::{LALR, RECURSIVE_ASCENT, TABLE_DRIVEN, TEST_ALL}; +use grammar::repr::{self as r, NominalTypeRepr, TypeRepr}; +use grammar::pattern::Pattern; +use message::Content; +use message::builder::InlineBuilder; +use std::fmt::{Debug, Display, Error, Formatter}; +use tls::Tls; +use util::Sep; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Grammar { + // see field `prefix` in `grammar::repr::Grammar` + pub prefix: String, + pub span: Span, + pub type_parameters: Vec, + pub parameters: Vec, + pub where_clauses: Vec>, + pub items: Vec, + pub annotations: Vec, + pub module_attributes: Vec, +} + +#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Span(pub usize, pub usize); + +impl Into> for Span { + fn into(self) -> Box { + let file_text = Tls::file_text(); + let string = file_text.span_str(self); + + // Insert an Adjacent block to prevent wrapping inside this + // string: + InlineBuilder::new() + .begin_adjacent() + .text(string) + .end() + .end() + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum GrammarItem { + MatchToken(MatchToken), + ExternToken(ExternToken), + InternToken(InternToken), + Nonterminal(NonterminalData), + Use(String), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MatchToken { + pub contents: Vec, + pub span: Span, +} + +impl MatchToken { + pub fn new(contents: MatchContents, span: Span) -> MatchToken { + MatchToken { + contents: vec![contents], + span: span, + } + } + + // Not really sure if this is the best way to do it + pub fn add(self, contents: MatchContents) -> MatchToken { + let mut new_contents = self.contents.clone(); + new_contents.push(contents); + MatchToken { + contents: new_contents, + span: self.span, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MatchContents { + pub items: Vec, +} + +// FIXME: Validate that MatchSymbol is actually a TerminalString::Literal +// and that MatchMapping is an Id or String +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum MatchItem { + CatchAll(Span), + Unmapped(MatchSymbol, Span), + Mapped(MatchSymbol, MatchMapping, Span), +} + +impl MatchItem { + pub fn is_catch_all(&self) -> bool { + match *self { + MatchItem::CatchAll(_) => true, + _ => false, + } + } + + pub fn span(&self) -> Span { + match *self { + MatchItem::CatchAll(span) => span, + MatchItem::Unmapped(_, span) => span, + MatchItem::Mapped(_, _, span) => span, + } + } +} + +pub type MatchSymbol = TerminalLiteral; +pub type MatchMapping = TerminalString; + +/// Intern tokens are not typed by the user: they are synthesized in +/// the absence of an "extern" declaration with information about the +/// string literals etc that appear in the grammar. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct InternToken { + /// Set of `r"foo"` and `"foo"` literals extracted from the + /// grammar. Sorted by order of increasing precedence. + pub match_entries: Vec, + pub dfa: DFA, +} + +/// In `token_check`, as we prepare to generate a tokenizer, we +/// combine any `match` declaration the user may have given with the +/// set of literals (e.g. `"foo"` or `r"[a-z]"`) that appear elsewhere +/// in their in the grammar to produce a series of `MatchEntry`. Each +/// `MatchEntry` roughly corresponds to one line in a `match` declaration. +/// +/// So e.g. if you had +/// +/// ``` +/// match { +/// r"(?i)BEGIN" => "BEGIN", +/// "+" => "+", +/// } else { +/// _ +/// } +/// +/// ID = r"[a-zA-Z]+" +/// ``` +/// +/// This would correspond to three match entries: +/// - `MatchEntry { match_literal: r"(?i)BEGIN", user_name: "BEGIN", precedence: 2 }` +/// - `MatchEntry { match_literal: "+", user_name: "+", precedence: 3 }` +/// - `MatchEntry { match_literal: "r[a-zA-Z]+"", user_name: r"[a-zA-Z]+", precedence: 0 }` +/// +/// A couple of things to note: +/// +/// - Literals appearing in the grammar are converting into an "identity" mapping +/// - Each match group G is combined with the implicit priority IP of 1 for literals and 0 for +/// regex to yield the final precedence; the formula is `G*2 + IP`. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct MatchEntry { + /// The precedence of this match entry. + /// + /// NB: This field must go first, so that `PartialOrd` sorts by precedence first! + pub precedence: usize, + pub match_literal: TerminalLiteral, + pub user_name: TerminalString, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ExternToken { + pub span: Span, + pub associated_types: Vec, + pub enum_token: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct AssociatedType { + pub type_span: Span, + pub type_name: Atom, + pub type_ref: TypeRef, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct EnumToken { + pub type_name: TypeRef, + pub type_span: Span, + pub conversions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Conversion { + pub span: Span, + pub from: TerminalString, + pub to: Pattern, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Path { + pub absolute: bool, + pub ids: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum TypeRef { + // (T1, T2) + Tuple(Vec), + + // Foo<'a, 'b, T1, T2>, Foo::Bar, etc + Nominal { + path: Path, + types: Vec, + }, + + Ref { + lifetime: Option, + mutable: bool, + referent: Box, + }, + + // 'x ==> only should appear within nominal types, but what do we care + Lifetime(Atom), + + // Foo or Bar ==> treated specially since macros may care + Id(Atom), + + // ==> type of a nonterminal, emitted by macro expansion + OfSymbol(SymbolKind), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum WhereClause { + // 'a: 'b + 'c + Lifetime { + lifetime: Atom, + bounds: Vec, + }, + // where for<'a> &'a T: Debug + Into + Type { + forall: Option>, + ty: T, + bounds: Vec>, + }, +} + +impl WhereClause { + pub fn map(&self, mut f: F) -> WhereClause + where + F: FnMut(&T) -> U, + { + match *self { + WhereClause::Lifetime { + ref lifetime, + ref bounds, + } => WhereClause::Lifetime { + lifetime: lifetime.clone(), + bounds: bounds.clone(), + }, + WhereClause::Type { + ref forall, + ref ty, + ref bounds, + } => WhereClause::Type { + forall: forall.clone(), + ty: f(ty), + bounds: bounds.iter().map(|b| b.map(&mut f)).collect(), + }, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeBound { + // The `'a` in `T: 'a`. + Lifetime(Atom), + // `for<'a> FnMut(&'a usize)` + Fn { + forall: Option>, + path: Path, + parameters: Vec, + ret: Option, + }, + // `some::Trait` or `some::Trait` or `some::Trait` + // or `for<'a> Trait<'a, T>` + Trait { + forall: Option>, + path: Path, + parameters: Vec>, + }, +} + +impl TypeBound { + pub fn map(&self, mut f: F) -> TypeBound + where + F: FnMut(&T) -> U, + { + match *self { + TypeBound::Lifetime(ref l) => TypeBound::Lifetime(l.clone()), + TypeBound::Fn { + ref forall, + ref path, + ref parameters, + ref ret, + } => TypeBound::Fn { + forall: forall.clone(), + path: path.clone(), + parameters: parameters.iter().map(&mut f).collect(), + ret: ret.as_ref().map(f), + }, + TypeBound::Trait { + ref forall, + ref path, + ref parameters, + } => TypeBound::Trait { + forall: forall.clone(), + path: path.clone(), + parameters: parameters.iter().map(|p| p.map(&mut f)).collect(), + }, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeBoundParameter { + // 'a + Lifetime(Atom), + // `T` or `'a` + TypeParameter(T), + // `Item = T` + Associated(Atom, T), +} + +impl TypeBoundParameter { + pub fn map(&self, mut f: F) -> TypeBoundParameter + where + F: FnMut(&T) -> U, + { + match *self { + TypeBoundParameter::Lifetime(ref l) => TypeBoundParameter::Lifetime(l.clone()), + TypeBoundParameter::TypeParameter(ref t) => TypeBoundParameter::TypeParameter(f(t)), + TypeBoundParameter::Associated(ref id, ref t) => { + TypeBoundParameter::Associated(id.clone(), f(t)) + } + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum TypeParameter { + Lifetime(Atom), + Id(Atom), +} + +impl TypeParameter { + pub fn is_lifetime(&self) -> bool { + match *self { + TypeParameter::Lifetime(_) => true, + _ => false, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Parameter { + pub name: Atom, + pub ty: TypeRef, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Visibility { + Pub(Option), + Priv, +} + +impl Visibility { + pub fn is_pub(&self) -> bool { + match *self { + Visibility::Pub(_) => true, + Visibility::Priv => false, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct NonterminalData { + pub visibility: Visibility, + pub name: NonterminalString, + pub annotations: Vec, + pub span: Span, + pub args: Vec, // macro arguments + pub type_decl: Option, + pub alternatives: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Annotation { + pub id_span: Span, + pub id: Atom, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Alternative { + pub span: Span, + + pub expr: ExprSymbol, + + // if C, only legal in macros + pub condition: Option, + + // => { code } + pub action: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ActionKind { + User(String), + Fallible(String), + Lookahead, + Lookbehind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Condition { + pub span: Span, + pub lhs: NonterminalString, // X + pub rhs: Atom, // "Foo" + pub op: ConditionOp, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ConditionOp { + // X == "Foo", equality + Equals, + + // X != "Foo", inequality + NotEquals, + + // X ~~ "Foo", regexp match + Match, + + // X !~ "Foo", regexp non-match + NotMatch, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Symbol { + pub span: Span, + pub kind: SymbolKind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum SymbolKind { + // (X Y) + Expr(ExprSymbol), + + // foo, before name resolution + AmbiguousId(Atom), + + // "foo" and foo (after name resolution) + Terminal(TerminalString), + + // foo, after name resolution + Nonterminal(NonterminalString), + + // foo<..> + Macro(MacroSymbol), + + // X+, X?, X* + Repeat(Box), + + // + Choose(Box), + + // x:X + Name(Atom, Box), + + // @L + Lookahead, + + // @R + Lookbehind, + + Error, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum TerminalString { + Literal(TerminalLiteral), + Bare(Atom), + Error, +} + +impl TerminalString { + pub fn as_literal(&self) -> Option { + match *self { + TerminalString::Literal(ref l) => Some(l.clone()), + _ => None, + } + } + + pub fn display_len(&self) -> usize { + match *self { + TerminalString::Literal(ref x) => x.display_len(), + TerminalString::Bare(ref x) => x.len(), + TerminalString::Error => "error".len(), + } + } +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum TerminalLiteral { + Quoted(Atom), + Regex(Atom), +} + +impl TerminalLiteral { + /// The *base precedence* is the precedence within a `match { }` + /// block level. It indicates that quoted things like `"foo"` get + /// precedence over regex matches. + pub fn base_precedence(&self) -> usize { + match *self { + TerminalLiteral::Quoted(_) => 1, + TerminalLiteral::Regex(_) => 0, + } + } + + pub fn display_len(&self) -> usize { + match *self { + TerminalLiteral::Quoted(ref x) => x.len(), + TerminalLiteral::Regex(ref x) => x.len() + "####r".len(), + } + } +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NonterminalString(pub Atom); + +impl NonterminalString { + pub fn len(&self) -> usize { + self.0.len() + } +} + +impl Into> for NonterminalString { + fn into(self) -> Box { + let session = Tls::session(); + + InlineBuilder::new() + .text(self) + .styled(session.nonterminal_symbol) + .end() + } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum RepeatOp { + Star, + Plus, + Question, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct RepeatSymbol { + pub op: RepeatOp, + pub symbol: Symbol, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ExprSymbol { + pub symbols: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MacroSymbol { + pub name: NonterminalString, + pub args: Vec, +} + +impl TerminalString { + pub fn quoted(i: Atom) -> TerminalString { + TerminalString::Literal(TerminalLiteral::Quoted(i)) + } + + pub fn regex(i: Atom) -> TerminalString { + TerminalString::Literal(TerminalLiteral::Regex(i)) + } +} + +impl Into> for TerminalString { + fn into(self) -> Box { + let session = Tls::session(); + InlineBuilder::new() + .text(self) + .styled(session.terminal_symbol) + .end() + } +} + +impl Grammar { + pub fn extern_token(&self) -> Option<&ExternToken> { + self.items.iter().flat_map(|i| i.as_extern_token()).next() + } + + pub fn enum_token(&self) -> Option<&EnumToken> { + self.items + .iter() + .flat_map(|i| i.as_extern_token()) + .flat_map(|et| et.enum_token.as_ref()) + .next() + } + + pub fn intern_token(&self) -> Option<&InternToken> { + self.items.iter().flat_map(|i| i.as_intern_token()).next() + } + + pub fn match_token(&self) -> Option<&MatchToken> { + self.items.iter().flat_map(|i| i.as_match_token()).next() + } +} + +impl GrammarItem { + pub fn is_macro_def(&self) -> bool { + match *self { + GrammarItem::Nonterminal(ref d) => d.is_macro_def(), + _ => false, + } + } + + pub fn as_nonterminal(&self) -> Option<&NonterminalData> { + match *self { + GrammarItem::Nonterminal(ref d) => Some(d), + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_match_token(&self) -> Option<&MatchToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(ref d) => Some(d), + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_extern_token(&self) -> Option<&ExternToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(ref d) => Some(d), + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_intern_token(&self) -> Option<&InternToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(ref d) => Some(d), + } + } +} + +impl NonterminalData { + pub fn is_macro_def(&self) -> bool { + !self.args.is_empty() + } +} + +impl Symbol { + pub fn new(span: Span, kind: SymbolKind) -> Symbol { + Symbol { + span: span, + kind: kind, + } + } + + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl Display for Visibility { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Visibility::Pub(Some(ref path)) => write!(fmt, "pub({}) ", path), + Visibility::Pub(None) => write!(fmt, "pub "), + Visibility::Priv => Ok(()), + } + } +} + +impl Display for WhereClause { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + WhereClause::Lifetime { + ref lifetime, + ref bounds, + } => { + write!(fmt, "{}:", lifetime)?; + for (i, b) in bounds.iter().enumerate() { + if i != 0 { + write!(fmt, " +")?; + } + write!(fmt, " {}", b)?; + } + Ok(()) + } + WhereClause::Type { + ref forall, + ref ty, + ref bounds, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}: ", ty)?; + for (i, b) in bounds.iter().enumerate() { + if i != 0 { + write!(fmt, " +")?; + } + write!(fmt, " {}", b)?; + } + Ok(()) + } + } + } +} + +impl Display for TypeBound { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeBound::Lifetime(ref l) => write!(fmt, "{}", l), + TypeBound::Fn { + ref forall, + ref path, + ref parameters, + ref ret, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}(", path)?; + for (i, p) in parameters.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", p)?; + } + write!(fmt, ")")?; + + if let Some(ref ret) = *ret { + write!(fmt, " -> {}", ret)?; + } + + Ok(()) + } + TypeBound::Trait { + ref forall, + ref path, + ref parameters, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}", path)?; + if parameters.is_empty() { + return Ok(()); + } + + write!(fmt, "<")?; + for (i, p) in parameters.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", p)?; + } + write!(fmt, ">") + } + } + } +} + +impl Display for TypeBoundParameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeBoundParameter::Lifetime(ref l) => write!(fmt, "{}", l), + TypeBoundParameter::TypeParameter(ref t) => write!(fmt, "{}", t), + TypeBoundParameter::Associated(ref id, ref t) => write!(fmt, "{} = {}", id, t), + } + } +} + +impl Display for TerminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TerminalString::Literal(ref s) => write!(fmt, "{}", s), + TerminalString::Bare(ref s) => write!(fmt, "{}", s), + TerminalString::Error => write!(fmt, "error"), + } + } +} + +impl Debug for TerminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for TerminalLiteral { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TerminalLiteral::Quoted(ref s) => write!(fmt, "{:?}", s.as_ref()), // the Debug impl adds the `"` and escaping + TerminalLiteral::Regex(ref s) => write!(fmt, "r#{:?}#", s.as_ref()), // FIXME -- need to determine proper number of # + } + } +} + +impl Debug for TerminalLiteral { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self) + } +} + +impl Display for Path { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!( + fmt, + "{}{}", + if self.absolute { "::" } else { "" }, + Sep("::", &self.ids), + ) + } +} + +impl Display for NonterminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +impl Debug for NonterminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(&self.kind, fmt) + } +} + +impl Display for SymbolKind { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + SymbolKind::Expr(ref expr) => write!(fmt, "{}", expr), + SymbolKind::Terminal(ref s) => write!(fmt, "{}", s), + SymbolKind::Nonterminal(ref s) => write!(fmt, "{}", s), + SymbolKind::AmbiguousId(ref s) => write!(fmt, "{}", s), + SymbolKind::Macro(ref m) => write!(fmt, "{}", m), + SymbolKind::Repeat(ref r) => write!(fmt, "{}", r), + SymbolKind::Choose(ref s) => write!(fmt, "<{}>", s), + SymbolKind::Name(ref n, ref s) => write!(fmt, "{}:{}", n, s), + SymbolKind::Lookahead => write!(fmt, "@L"), + SymbolKind::Lookbehind => write!(fmt, "@R"), + SymbolKind::Error => write!(fmt, "error"), + } + } +} + +impl Display for RepeatSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}{}", self.symbol, self.op) + } +} + +impl Display for RepeatOp { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + RepeatOp::Plus => write!(fmt, "+"), + RepeatOp::Star => write!(fmt, "*"), + RepeatOp::Question => write!(fmt, "?"), + } + } +} + +impl Display for ExprSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({})", Sep(" ", &self.symbols)) + } +} + +impl ExternToken { + pub fn associated_type(&self, name: Atom) -> Option<&AssociatedType> { + self.associated_types + .iter() + .filter(|a| a.type_name == name) + .next() + } +} + +impl ExprSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl MacroSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl RepeatSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl Display for MacroSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}<{}>", self.name, Sep(", ", &self.args)) + } +} + +impl Display for TypeParameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeParameter::Lifetime(ref s) => write!(fmt, "{}", s), + TypeParameter::Id(ref s) => write!(fmt, "{}", s), + } + } +} + +impl Display for TypeRef { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeRef::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), + TypeRef::Nominal { + ref path, + ref types, + } if types.len() == 0 => + { + write!(fmt, "{}", path) + } + TypeRef::Nominal { + ref path, + ref types, + } => write!(fmt, "{}<{}>", path, Sep(", ", types)), + TypeRef::Lifetime(ref s) => write!(fmt, "{}", s), + TypeRef::Id(ref s) => write!(fmt, "{}", s), + TypeRef::OfSymbol(ref s) => write!(fmt, "`{}`", s), + TypeRef::Ref { + lifetime: None, + mutable: false, + ref referent, + } => write!(fmt, "&{}", referent), + TypeRef::Ref { + lifetime: Some(ref l), + mutable: false, + ref referent, + } => write!(fmt, "&{} {}", l, referent), + TypeRef::Ref { + lifetime: None, + mutable: true, + ref referent, + } => write!(fmt, "&mut {}", referent), + TypeRef::Ref { + lifetime: Some(ref l), + mutable: true, + ref referent, + } => write!(fmt, "&{} mut {}", l, referent), + } + } +} + +impl TypeRef { + // Converts a TypeRef to a TypeRepr, assuming no inference is + // required etc. This is safe for all types a user can directly + // type, but not safe for the result of expanding macros. + pub fn type_repr(&self) -> TypeRepr { + match *self { + TypeRef::Tuple(ref types) => { + TypeRepr::Tuple(types.iter().map(TypeRef::type_repr).collect()) + } + TypeRef::Nominal { + ref path, + ref types, + } => TypeRepr::Nominal(NominalTypeRepr { + path: path.clone(), + types: types.iter().map(TypeRef::type_repr).collect(), + }), + TypeRef::Lifetime(ref id) => TypeRepr::Lifetime(id.clone()), + TypeRef::Id(ref id) => TypeRepr::Nominal(NominalTypeRepr { + path: Path::from_id(id.clone()), + types: vec![], + }), + TypeRef::OfSymbol(_) => unreachable!("OfSymbol produced by parser"), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => TypeRepr::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(referent.type_repr()), + }, + } + } +} + +impl Path { + pub fn from_id(id: Atom) -> Path { + Path { + absolute: false, + ids: vec![id], + } + } + + pub fn usize() -> Path { + Path { + absolute: false, + ids: vec![Atom::from("usize")], + } + } + + pub fn str() -> Path { + Path { + absolute: false, + ids: vec![Atom::from("str")], + } + } + + pub fn vec() -> Path { + Path { + absolute: true, + ids: vec![Atom::from("std"), Atom::from("vec"), Atom::from("Vec")], + } + } + + pub fn option() -> Path { + Path { + absolute: true, + ids: vec![ + Atom::from("std"), + Atom::from("option"), + Atom::from("Option"), + ], + } + } + + pub fn as_id(&self) -> Option { + if !self.absolute && self.ids.len() == 1 { + Some(self.ids[0].clone()) + } else { + None + } + } +} + +pub fn read_algorithm(annotations: &[Annotation], algorithm: &mut r::Algorithm) { + for annotation in annotations { + if annotation.id == Atom::from(LALR) { + algorithm.lalr = true; + } else if annotation.id == Atom::from(TABLE_DRIVEN) { + algorithm.codegen = r::LrCodeGeneration::TableDriven; + } else if annotation.id == Atom::from(RECURSIVE_ASCENT) { + algorithm.codegen = r::LrCodeGeneration::RecursiveAscent; + } else if annotation.id == Atom::from(TEST_ALL) { + algorithm.codegen = r::LrCodeGeneration::TestAll; + } else { + panic!( + "validation permitted unknown annotation: {:?}", + annotation.id, + ); + } + } +} diff --git a/third_party/rust/lalrpop/src/grammar/pattern.rs b/third_party/rust/lalrpop/src/grammar/pattern.rs index d272b8eef115..842cd7e9de69 100644 --- a/third_party/rust/lalrpop/src/grammar/pattern.rs +++ b/third_party/rust/lalrpop/src/grammar/pattern.rs @@ -1,129 +1,129 @@ -/*! - -The definition of patterns is shared between the parse-tree and the -repr, but customized by a type T that represents the different type -representations. - -*/ - -use grammar::parse_tree::{Path, Span}; -use std::fmt::{Display, Error, Formatter}; -use string_cache::DefaultAtom as Atom; -use util::Sep; - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Pattern { - pub span: Span, - pub kind: PatternKind, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct FieldPattern { - pub field_span: Span, - pub field_name: Atom, - pub pattern: Pattern, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum PatternKind { - Enum(Path, Vec>), - Struct(Path, Vec>, /* trailing ..? */ bool), - Path(Path), - Tuple(Vec>), - TupleStruct(Path, Vec>), - Usize(usize), - Underscore, - DotDot, - Choose(T), - CharLiteral(Atom), -} - -impl Pattern { - pub fn for_each_binding(&self, map_fn: &mut FnMut(&T) -> U) { - self.map(map_fn); - } - - pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> Pattern { - Pattern { - span: self.span, - kind: self.kind.map(map_fn), - } - } -} - -impl PatternKind { - pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> PatternKind { - match *self { - PatternKind::Path(ref path) => PatternKind::Path(path.clone()), - PatternKind::Enum(ref path, ref pats) => PatternKind::Enum( - path.clone(), - pats.iter().map(|pat| pat.map(map_fn)).collect(), - ), - PatternKind::Struct(ref path, ref fields, dotdot) => PatternKind::Struct( - path.clone(), - fields.iter().map(|pat| pat.map(map_fn)).collect(), - dotdot, - ), - PatternKind::Tuple(ref pats) => { - PatternKind::Tuple(pats.iter().map(|p| p.map(map_fn)).collect()) - } - PatternKind::TupleStruct(ref path, ref pats) => { - PatternKind::TupleStruct(path.clone(), pats.iter().map(|p| p.map(map_fn)).collect()) - } - PatternKind::Underscore => PatternKind::Underscore, - PatternKind::DotDot => PatternKind::DotDot, - PatternKind::Usize(n) => PatternKind::Usize(n), - PatternKind::Choose(ref ty) => PatternKind::Choose(map_fn(ty)), - PatternKind::CharLiteral(ref c) => PatternKind::CharLiteral(c.clone()), - } - } -} - -impl FieldPattern { - pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> FieldPattern { - FieldPattern { - field_name: self.field_name.clone(), - field_span: self.field_span, - pattern: self.pattern.map(map_fn), - } - } -} - -impl Display for Pattern { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self.kind) - } -} - -impl Display for PatternKind { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - PatternKind::Path(ref path) => write!(fmt, "{}", path), - PatternKind::Enum(ref path, ref pats) => write!(fmt, "{}({})", path, Sep(", ", pats)), - PatternKind::Struct(ref path, ref fields, false) => { - write!(fmt, "{} {{ {} }}", path, Sep(", ", fields)) - } - PatternKind::Struct(ref path, ref fields, true) if fields.len() == 0 => { - write!(fmt, "{} {{ .. }}", path) - } - PatternKind::Struct(ref path, ref fields, true) => { - write!(fmt, "{} {{ {}, .. }}", path, Sep(", ", fields)) - } - PatternKind::Tuple(ref paths) => write!(fmt, "({})", Sep(", ", paths)), - PatternKind::TupleStruct(ref path, ref paths) => { - write!(fmt, "{}({})", path, Sep(", ", paths)) - } - PatternKind::Underscore => write!(fmt, "_"), - PatternKind::DotDot => write!(fmt, ".."), - PatternKind::Usize(n) => write!(fmt, "{}", n), - PatternKind::Choose(ref ty) => write!(fmt, "{}", ty), - PatternKind::CharLiteral(ref c) => write!(fmt, "'{}'", c), - } - } -} - -impl Display for FieldPattern { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}: {}", self.field_name, self.pattern) - } -} +/*! + +The definition of patterns is shared between the parse-tree and the +repr, but customized by a type T that represents the different type +representations. + +*/ + +use string_cache::DefaultAtom as Atom; +use grammar::parse_tree::{Path, Span}; +use std::fmt::{Display, Error, Formatter}; +use util::Sep; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Pattern { + pub span: Span, + pub kind: PatternKind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FieldPattern { + pub field_span: Span, + pub field_name: Atom, + pub pattern: Pattern, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum PatternKind { + Enum(Path, Vec>), + Struct(Path, Vec>, /* trailing ..? */ bool), + Path(Path), + Tuple(Vec>), + TupleStruct(Path, Vec>), + Usize(usize), + Underscore, + DotDot, + Choose(T), + CharLiteral(Atom), +} + +impl Pattern { + pub fn for_each_binding(&self, map_fn: &mut FnMut(&T) -> U) { + self.map(map_fn); + } + + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> Pattern { + Pattern { + span: self.span, + kind: self.kind.map(map_fn), + } + } +} + +impl PatternKind { + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> PatternKind { + match *self { + PatternKind::Path(ref path) => PatternKind::Path(path.clone()), + PatternKind::Enum(ref path, ref pats) => PatternKind::Enum( + path.clone(), + pats.iter().map(|pat| pat.map(map_fn)).collect(), + ), + PatternKind::Struct(ref path, ref fields, dotdot) => PatternKind::Struct( + path.clone(), + fields.iter().map(|pat| pat.map(map_fn)).collect(), + dotdot, + ), + PatternKind::Tuple(ref pats) => { + PatternKind::Tuple(pats.iter().map(|p| p.map(map_fn)).collect()) + } + PatternKind::TupleStruct(ref path, ref pats) => { + PatternKind::TupleStruct(path.clone(), pats.iter().map(|p| p.map(map_fn)).collect()) + } + PatternKind::Underscore => PatternKind::Underscore, + PatternKind::DotDot => PatternKind::DotDot, + PatternKind::Usize(n) => PatternKind::Usize(n), + PatternKind::Choose(ref ty) => PatternKind::Choose(map_fn(ty)), + PatternKind::CharLiteral(ref c) => PatternKind::CharLiteral(c.clone()), + } + } +} + +impl FieldPattern { + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> FieldPattern { + FieldPattern { + field_name: self.field_name.clone(), + field_span: self.field_span, + pattern: self.pattern.map(map_fn), + } + } +} + +impl Display for Pattern { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.kind) + } +} + +impl Display for PatternKind { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + PatternKind::Path(ref path) => write!(fmt, "{}", path), + PatternKind::Enum(ref path, ref pats) => write!(fmt, "{}({})", path, Sep(", ", pats)), + PatternKind::Struct(ref path, ref fields, false) => { + write!(fmt, "{} {{ {} }}", path, Sep(", ", fields)) + } + PatternKind::Struct(ref path, ref fields, true) if fields.len() == 0 => { + write!(fmt, "{} {{ .. }}", path) + } + PatternKind::Struct(ref path, ref fields, true) => { + write!(fmt, "{} {{ {}, .. }}", path, Sep(", ", fields)) + } + PatternKind::Tuple(ref paths) => write!(fmt, "({})", Sep(", ", paths)), + PatternKind::TupleStruct(ref path, ref paths) => { + write!(fmt, "{}({})", path, Sep(", ", paths)) + } + PatternKind::Underscore => write!(fmt, "_"), + PatternKind::DotDot => write!(fmt, ".."), + PatternKind::Usize(n) => write!(fmt, "{}", n), + PatternKind::Choose(ref ty) => write!(fmt, "{}", ty), + PatternKind::CharLiteral(ref c) => write!(fmt, "'{}'", c), + } + } +} + +impl Display for FieldPattern { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}: {}", self.field_name, self.pattern) + } +} diff --git a/third_party/rust/lalrpop/src/grammar/repr.rs b/third_party/rust/lalrpop/src/grammar/repr.rs index 45a570b17745..3e8978524f51 100644 --- a/third_party/rust/lalrpop/src/grammar/repr.rs +++ b/third_party/rust/lalrpop/src/grammar/repr.rs @@ -1,604 +1,600 @@ -/*! - * Compiled representation of a grammar. Simplified, normalized - * version of `parse_tree`. The normalization passes produce this - * representation incrementally. - */ - -use collections::{map, Map}; -use grammar::pattern::Pattern; -use message::Content; -use std::fmt::{Debug, Display, Error, Formatter}; -use string_cache::DefaultAtom as Atom; -use util::Sep; - -// These concepts we re-use wholesale -pub use grammar::parse_tree::{ - Annotation, InternToken, NonterminalString, Path, Span, TerminalLiteral, TerminalString, - TypeParameter, Visibility, WhereClause, -}; - -#[derive(Clone, Debug)] -pub struct Grammar { - // a unique prefix that can be appended to identifiers to ensure - // that they do not conflict with any action strings - pub prefix: String, - - // algorithm user requested for this parser - pub algorithm: Algorithm, - - // true if the grammar mentions the `!` terminal anywhere - pub uses_error_recovery: bool, - - // these are the nonterminals that were declared to be public; the - // key is the user's name for the symbol, the value is the - // artificial symbol we introduce, which will always have a single - // production like `Foo' = Foo`. - pub start_nonterminals: Map, - - // the "use foo;" statements that the user declared - pub uses: Vec, - - // type parameters declared on the grammar, like `grammar;` - pub type_parameters: Vec, - - // actual parameters declared on the grammar, like the `x: u32` in `grammar(x: u32);` - pub parameters: Vec, - - // where clauses declared on the grammar, like `grammar where T: Sized` - pub where_clauses: Vec>, - - // optional tokenizer DFA; this is only needed if the user did not supply - // an extern token declaration - pub intern_token: Option, - - // the grammar proper: - pub action_fn_defns: Vec, - pub terminals: TerminalSet, - pub nonterminals: Map, - pub token_span: Span, - pub conversions: Map>, - pub types: Types, - pub module_attributes: Vec, -} - -/// For each terminal, we map it to a small integer from 0 to N. -/// This struct contains the mappings to go back and forth. -#[derive(Clone, Debug)] -pub struct TerminalSet { - pub all: Vec, - pub bits: Map, -} - -#[derive(Clone, Debug)] -pub struct NonterminalData { - pub name: NonterminalString, - pub visibility: Visibility, - pub span: Span, - pub annotations: Vec, - pub productions: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Algorithm { - pub lalr: bool, - pub codegen: LrCodeGeneration, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum LrCodeGeneration { - TableDriven, - RecursiveAscent, - TestAll, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Parameter { - pub name: Atom, - pub ty: TypeRepr, -} - -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Production { - // this overlaps with the key in the hashmap, obviously, but it's - // handy to have it - pub nonterminal: NonterminalString, - pub symbols: Vec, - pub action: ActionFn, - pub span: Span, -} - -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub enum Symbol { - Nonterminal(NonterminalString), - Terminal(TerminalString), -} - -#[derive(Clone, PartialEq, Eq)] -pub struct ActionFnDefn { - pub fallible: bool, - pub ret_type: TypeRepr, - pub kind: ActionFnDefnKind, -} - -#[derive(Clone, PartialEq, Eq)] -pub enum ActionFnDefnKind { - User(UserActionFnDefn), - Inline(InlineActionFnDefn), - Lookaround(LookaroundActionFnDefn), -} - -/// An action fn written by a user. -#[derive(Clone, PartialEq, Eq)] -pub struct UserActionFnDefn { - pub arg_patterns: Vec, - pub arg_types: Vec, - pub code: String, -} - -/// An action fn generated by the inlining pass. If we were -/// inlining `A = B C D` (with action 44) into `X = Y A Z` (with -/// action 22), this would look something like: -/// -/// ``` -/// fn __action66(__0: Y, __1: B, __2: C, __3: D, __4: Z) { -/// __action22(__0, __action44(__1, __2, __3), __4) -/// } -/// ``` -#[derive(Clone, PartialEq, Eq)] -pub struct InlineActionFnDefn { - /// in the example above, this would be `action22` - pub action: ActionFn, - - /// in the example above, this would be `Y, {action44: B, C, D}, Z` - pub symbols: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum LookaroundActionFnDefn { - Lookahead, - Lookbehind, -} - -#[derive(Clone, PartialEq, Eq)] -pub enum InlinedSymbol { - Original(Symbol), - Inlined(ActionFn, Vec), -} - -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] -pub enum TypeRepr { - Tuple(Vec), - Nominal(NominalTypeRepr), - Associated { - type_parameter: Atom, - id: Atom, - }, - Lifetime(Atom), - Ref { - lifetime: Option, - mutable: bool, - referent: Box, - }, -} - -impl TypeRepr { - pub fn is_unit(&self) -> bool { - match *self { - TypeRepr::Tuple(ref v) => v.is_empty(), - _ => false, - } - } - - pub fn usize() -> TypeRepr { - TypeRepr::Nominal(NominalTypeRepr { - path: Path::usize(), - types: vec![], - }) - } - - pub fn str() -> TypeRepr { - TypeRepr::Nominal(NominalTypeRepr { - path: Path::str(), - types: vec![], - }) - } - - /// Returns the type parameters (or potential type parameters) - /// referenced by this type. e.g., for the type `&'x X`, would - /// return `[TypeParameter::Lifetime('x), TypeParameter::Id(X)]`. - /// This is later used to prune the type parameters list so that - /// only those that are actually used are included. - pub fn referenced(&self) -> Vec { - match *self { - TypeRepr::Tuple(ref tys) => tys.iter().flat_map(|t| t.referenced()).collect(), - TypeRepr::Nominal(ref data) => data - .types - .iter() - .flat_map(|t| t.referenced()) - .chain(match data.path.as_id() { - Some(id) => vec![TypeParameter::Id(id)], - None => vec![], - }) - .collect(), - TypeRepr::Associated { - ref type_parameter, .. - } => vec![TypeParameter::Id(type_parameter.clone())], - TypeRepr::Lifetime(ref l) => vec![TypeParameter::Lifetime(l.clone())], - TypeRepr::Ref { - ref lifetime, - mutable: _, - ref referent, - } => lifetime - .iter() - .map(|id| TypeParameter::Lifetime(id.clone())) - .chain(referent.referenced()) - .collect(), - } - } -} - -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] -pub struct NominalTypeRepr { - pub path: Path, - pub types: Vec, -} - -#[derive(Clone, Debug)] -pub struct Types { - terminal_token_type: TypeRepr, - terminal_loc_type: Option, - error_type: Option, - terminal_types: Map, - nonterminal_types: Map, - parse_error_type: TypeRepr, - error_recovery_type: TypeRepr, -} - -impl Types { - pub fn new( - prefix: &str, - terminal_loc_type: Option, - error_type: Option, - terminal_token_type: TypeRepr, - ) -> Types { - let mut types = Types { - terminal_loc_type: terminal_loc_type, - error_type: error_type, - terminal_token_type: terminal_token_type, - terminal_types: map(), - nonterminal_types: map(), - // the following two will be overwritten later - parse_error_type: TypeRepr::Tuple(vec![]), - error_recovery_type: TypeRepr::Tuple(vec![]), - }; - - let args = vec![ - types.terminal_loc_type().clone(), - types.terminal_token_type().clone(), - types.error_type(), - ]; - types.parse_error_type = TypeRepr::Nominal(NominalTypeRepr { - path: Path { - absolute: false, - ids: vec![ - Atom::from(format!("{}lalrpop_util", prefix)), - Atom::from("ParseError"), - ], - }, - types: args.clone(), - }); - types.error_recovery_type = TypeRepr::Nominal(NominalTypeRepr { - path: Path { - absolute: false, - ids: vec![ - Atom::from(format!("{}lalrpop_util", prefix)), - Atom::from("ErrorRecovery"), - ], - }, - types: args, - }); - types - .terminal_types - .insert(TerminalString::Error, types.error_recovery_type.clone()); - types - } - - pub fn add_type(&mut self, nt_id: NonterminalString, ty: TypeRepr) { - assert!(self.nonterminal_types.insert(nt_id, ty).is_none()); - } - - pub fn add_term_type(&mut self, term: TerminalString, ty: TypeRepr) { - assert!(self.terminal_types.insert(term, ty).is_none()); - } - - pub fn terminal_token_type(&self) -> &TypeRepr { - &self.terminal_token_type - } - - pub fn opt_terminal_loc_type(&self) -> Option<&TypeRepr> { - self.terminal_loc_type.as_ref() - } - - pub fn terminal_loc_type(&self) -> TypeRepr { - self.terminal_loc_type - .clone() - .unwrap_or_else(|| TypeRepr::Tuple(vec![])) - } - - pub fn error_type(&self) -> TypeRepr { - self.error_type.clone().unwrap_or_else(|| TypeRepr::Ref { - lifetime: Some(Atom::from("'static")), - mutable: false, - referent: Box::new(TypeRepr::str()), - }) - } - - pub fn terminal_type(&self, id: &TerminalString) -> &TypeRepr { - self.terminal_types - .get(&id) - .unwrap_or(&self.terminal_token_type) - } - - pub fn terminal_types(&self) -> Vec { - self.terminal_types.values().cloned().collect() - } - - pub fn lookup_nonterminal_type(&self, id: &NonterminalString) -> Option<&TypeRepr> { - self.nonterminal_types.get(&id) - } - - pub fn nonterminal_type(&self, id: &NonterminalString) -> &TypeRepr { - &self.nonterminal_types[&id] - } - - pub fn nonterminal_types(&self) -> Vec { - self.nonterminal_types.values().cloned().collect() - } - - pub fn parse_error_type(&self) -> &TypeRepr { - &self.parse_error_type - } - - pub fn error_recovery_type(&self) -> &TypeRepr { - &self.error_recovery_type - } - - /// Returns a type `(L, T, L)` where L is the location type and T - /// is the token type. - pub fn triple_type(&self) -> TypeRepr { - self.spanned_type(self.terminal_token_type().clone()) - } - - /// Returns a type `(L, T, L)` where L is the location type and T - /// is the argument. - pub fn spanned_type(&self, ty: TypeRepr) -> TypeRepr { - let location_type = self.terminal_loc_type(); - TypeRepr::Tuple(vec![location_type.clone(), ty, location_type]) - } -} - -impl Display for Parameter { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}: {}", self.name, self.ty) - } -} - -impl Display for TypeRepr { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - TypeRepr::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), - TypeRepr::Nominal(ref data) => write!(fmt, "{}", data), - TypeRepr::Associated { - ref type_parameter, - ref id, - } => write!(fmt, "{}::{}", type_parameter, id), - TypeRepr::Lifetime(ref id) => write!(fmt, "{}", id), - TypeRepr::Ref { - lifetime: None, - mutable: false, - ref referent, - } => write!(fmt, "&{}", referent), - TypeRepr::Ref { - lifetime: Some(ref l), - mutable: false, - ref referent, - } => write!(fmt, "&{} {}", l, referent), - TypeRepr::Ref { - lifetime: None, - mutable: true, - ref referent, - } => write!(fmt, "&mut {}", referent), - TypeRepr::Ref { - lifetime: Some(ref l), - mutable: true, - ref referent, - } => write!(fmt, "&{} mut {}", l, referent), - } - } -} - -impl Debug for TypeRepr { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -impl Display for NominalTypeRepr { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - if self.types.len() == 0 { - write!(fmt, "{}", self.path) - } else { - write!(fmt, "{}<{}>", self.path, Sep(", ", &self.types)) - } - } -} - -impl Debug for NominalTypeRepr { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -#[derive(Copy, Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)] -pub struct ActionFn(u32); - -impl ActionFn { - pub fn new(x: usize) -> ActionFn { - ActionFn(x as u32) - } - - pub fn index(&self) -> usize { - self.0 as usize - } -} - -impl Symbol { - pub fn is_terminal(&self) -> bool { - match *self { - Symbol::Terminal(..) => true, - Symbol::Nonterminal(..) => false, - } - } - - pub fn ty<'ty>(&self, t: &'ty Types) -> &'ty TypeRepr { - match *self { - Symbol::Terminal(ref id) => t.terminal_type(id), - Symbol::Nonterminal(ref id) => t.nonterminal_type(id), - } - } -} - -impl Display for Symbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - Symbol::Nonterminal(ref id) => write!(fmt, "{}", id.clone()), - Symbol::Terminal(ref id) => write!(fmt, "{}", id.clone()), - } - } -} - -impl Debug for Symbol { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -impl Into> for Symbol { - fn into(self) -> Box { - match self { - Symbol::Nonterminal(nt) => nt.into(), - Symbol::Terminal(term) => term.into(), - } - } -} - -impl Debug for Production { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!( - fmt, - "{} = {} => {:?};", - self.nonterminal, - Sep(", ", &self.symbols), - self.action, - ) - } -} - -impl Debug for ActionFnDefn { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self.to_fn_string("_")) - } -} - -impl ActionFnDefn { - fn to_fn_string(&self, name: &str) -> String { - match self.kind { - ActionFnDefnKind::User(ref data) => data.to_fn_string(self, name), - ActionFnDefnKind::Inline(ref data) => data.to_fn_string(name), - ActionFnDefnKind::Lookaround(ref data) => format!("{:?}", data), - } - } -} - -impl UserActionFnDefn { - fn to_fn_string(&self, defn: &ActionFnDefn, name: &str) -> String { - let arg_strings: Vec = self - .arg_patterns - .iter() - .zip(self.arg_types.iter()) - .map(|(p, t)| format!("{}: {}", p, t)) - .collect(); - - format!( - "fn {}({}) -> {} {{ {} }}", - name, - Sep(", ", &arg_strings), - defn.ret_type, - self.code, - ) - } -} - -impl InlineActionFnDefn { - fn to_fn_string(&self, name: &str) -> String { - let arg_strings: Vec = self - .symbols - .iter() - .map(|inline_sym| match *inline_sym { - InlinedSymbol::Original(ref s) => format!("{}", s), - InlinedSymbol::Inlined(a, ref s) => format!("{:?}({})", a, Sep(", ", s)), - }) - .collect(); - - format!( - "fn {}(..) {{ {:?}({}) }}", - name, - self.action, - Sep(", ", &arg_strings), - ) - } -} - -impl Grammar { - pub fn pattern(&self, t: &TerminalString) -> &Pattern { - &self.conversions[t] - } - - pub fn productions_for(&self, nonterminal: &NonterminalString) -> &[Production] { - match self.nonterminals.get(nonterminal) { - Some(v) => &v.productions[..], - None => &[], // this...probably shouldn't happen actually? - } - } - - pub fn user_parameter_refs(&self) -> String { - let mut result = String::new(); - for parameter in &self.parameters { - result.push_str(&format!("{}, ", parameter.name)); - } - result - } - - pub fn action_is_fallible(&self, f: ActionFn) -> bool { - self.action_fn_defns[f.index()].fallible - } - - pub fn non_lifetime_type_parameters(&self) -> Vec<&TypeParameter> { - self.type_parameters - .iter() - .filter(|&tp| match *tp { - TypeParameter::Lifetime(_) => false, - TypeParameter::Id(_) => true, - }) - .collect() - } -} - -impl Default for Algorithm { - fn default() -> Self { - Algorithm { - lalr: false, - codegen: LrCodeGeneration::TableDriven, - } - } -} +/*! + * Compiled representation of a grammar. Simplified, normalized + * version of `parse_tree`. The normalization passes produce this + * representation incrementally. + */ + +use string_cache::DefaultAtom as Atom; +use grammar::pattern::Pattern; +use message::Content; +use std::fmt::{Debug, Display, Error, Formatter}; +use collections::{map, Map}; +use util::Sep; + +// These concepts we re-use wholesale +pub use grammar::parse_tree::{Annotation, InternToken, NonterminalString, Path, Span, + TerminalLiteral, TerminalString, TypeParameter, Visibility, + WhereClause}; + +#[derive(Clone, Debug)] +pub struct Grammar { + // a unique prefix that can be appended to identifiers to ensure + // that they do not conflict with any action strings + pub prefix: String, + + // algorithm user requested for this parser + pub algorithm: Algorithm, + + // true if the grammar mentions the `!` terminal anywhere + pub uses_error_recovery: bool, + + // these are the nonterminals that were declared to be public; the + // key is the user's name for the symbol, the value is the + // artificial symbol we introduce, which will always have a single + // production like `Foo' = Foo`. + pub start_nonterminals: Map, + + // the "use foo;" statements that the user declared + pub uses: Vec, + + // type parameters declared on the grammar, like `grammar;` + pub type_parameters: Vec, + + // actual parameters declared on the grammar, like the `x: u32` in `grammar(x: u32);` + pub parameters: Vec, + + // where clauses declared on the grammar, like `grammar where T: Sized` + pub where_clauses: Vec>, + + // optional tokenizer DFA; this is only needed if the user did not supply + // an extern token declaration + pub intern_token: Option, + + // the grammar proper: + pub action_fn_defns: Vec, + pub terminals: TerminalSet, + pub nonterminals: Map, + pub token_span: Span, + pub conversions: Map>, + pub types: Types, + pub module_attributes: Vec, +} + +/// For each terminal, we map it to a small integer from 0 to N. +/// This struct contains the mappings to go back and forth. +#[derive(Clone, Debug)] +pub struct TerminalSet { + pub all: Vec, + pub bits: Map, +} + +#[derive(Clone, Debug)] +pub struct NonterminalData { + pub name: NonterminalString, + pub visibility: Visibility, + pub span: Span, + pub annotations: Vec, + pub productions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Algorithm { + pub lalr: bool, + pub codegen: LrCodeGeneration, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum LrCodeGeneration { + TableDriven, + RecursiveAscent, + TestAll, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Parameter { + pub name: Atom, + pub ty: TypeRepr, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Production { + // this overlaps with the key in the hashmap, obviously, but it's + // handy to have it + pub nonterminal: NonterminalString, + pub symbols: Vec, + pub action: ActionFn, + pub span: Span, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum Symbol { + Nonterminal(NonterminalString), + Terminal(TerminalString), +} + +#[derive(Clone, PartialEq, Eq)] +pub struct ActionFnDefn { + pub fallible: bool, + pub ret_type: TypeRepr, + pub kind: ActionFnDefnKind, +} + +#[derive(Clone, PartialEq, Eq)] +pub enum ActionFnDefnKind { + User(UserActionFnDefn), + Inline(InlineActionFnDefn), + Lookaround(LookaroundActionFnDefn), +} + +/// An action fn written by a user. +#[derive(Clone, PartialEq, Eq)] +pub struct UserActionFnDefn { + pub arg_patterns: Vec, + pub arg_types: Vec, + pub code: String, +} + +/// An action fn generated by the inlining pass. If we were +/// inlining `A = B C D` (with action 44) into `X = Y A Z` (with +/// action 22), this would look something like: +/// +/// ``` +/// fn __action66(__0: Y, __1: B, __2: C, __3: D, __4: Z) { +/// __action22(__0, __action44(__1, __2, __3), __4) +/// } +/// ``` +#[derive(Clone, PartialEq, Eq)] +pub struct InlineActionFnDefn { + /// in the example above, this would be `action22` + pub action: ActionFn, + + /// in the example above, this would be `Y, {action44: B, C, D}, Z` + pub symbols: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum LookaroundActionFnDefn { + Lookahead, + Lookbehind, +} + +#[derive(Clone, PartialEq, Eq)] +pub enum InlinedSymbol { + Original(Symbol), + Inlined(ActionFn, Vec), +} + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeRepr { + Tuple(Vec), + Nominal(NominalTypeRepr), + Associated { + type_parameter: Atom, + id: Atom, + }, + Lifetime(Atom), + Ref { + lifetime: Option, + mutable: bool, + referent: Box, + }, +} + +impl TypeRepr { + pub fn is_unit(&self) -> bool { + match *self { + TypeRepr::Tuple(ref v) => v.is_empty(), + _ => false, + } + } + + pub fn usize() -> TypeRepr { + TypeRepr::Nominal(NominalTypeRepr { + path: Path::usize(), + types: vec![], + }) + } + + pub fn str() -> TypeRepr { + TypeRepr::Nominal(NominalTypeRepr { + path: Path::str(), + types: vec![], + }) + } + + /// Returns the type parameters (or potential type parameters) + /// referenced by this type. e.g., for the type `&'x X`, would + /// return `[TypeParameter::Lifetime('x), TypeParameter::Id(X)]`. + /// This is later used to prune the type parameters list so that + /// only those that are actually used are included. + pub fn referenced(&self) -> Vec { + match *self { + TypeRepr::Tuple(ref tys) => tys.iter().flat_map(|t| t.referenced()).collect(), + TypeRepr::Nominal(ref data) => data.types + .iter() + .flat_map(|t| t.referenced()) + .chain(match data.path.as_id() { + Some(id) => vec![TypeParameter::Id(id)], + None => vec![], + }) + .collect(), + TypeRepr::Associated { + ref type_parameter, .. + } => vec![TypeParameter::Id(type_parameter.clone())], + TypeRepr::Lifetime(ref l) => vec![TypeParameter::Lifetime(l.clone())], + TypeRepr::Ref { + ref lifetime, + mutable: _, + ref referent, + } => lifetime + .iter() + .map(|id| TypeParameter::Lifetime(id.clone())) + .chain(referent.referenced()) + .collect(), + } + } +} + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] +pub struct NominalTypeRepr { + pub path: Path, + pub types: Vec, +} + +#[derive(Clone, Debug)] +pub struct Types { + terminal_token_type: TypeRepr, + terminal_loc_type: Option, + error_type: Option, + terminal_types: Map, + nonterminal_types: Map, + parse_error_type: TypeRepr, + error_recovery_type: TypeRepr, +} + +impl Types { + pub fn new( + prefix: &str, + terminal_loc_type: Option, + error_type: Option, + terminal_token_type: TypeRepr, + ) -> Types { + let mut types = Types { + terminal_loc_type: terminal_loc_type, + error_type: error_type, + terminal_token_type: terminal_token_type, + terminal_types: map(), + nonterminal_types: map(), + // the following two will be overwritten later + parse_error_type: TypeRepr::Tuple(vec![]), + error_recovery_type: TypeRepr::Tuple(vec![]), + }; + + let args = vec![ + types.terminal_loc_type().clone(), + types.terminal_token_type().clone(), + types.error_type(), + ]; + types.parse_error_type = TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![ + Atom::from(format!("{}lalrpop_util", prefix)), + Atom::from("ParseError"), + ], + }, + types: args.clone(), + }); + types.error_recovery_type = TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![ + Atom::from(format!("{}lalrpop_util", prefix)), + Atom::from("ErrorRecovery"), + ], + }, + types: args, + }); + types + .terminal_types + .insert(TerminalString::Error, types.error_recovery_type.clone()); + types + } + + pub fn add_type(&mut self, nt_id: NonterminalString, ty: TypeRepr) { + assert!(self.nonterminal_types.insert(nt_id, ty).is_none()); + } + + pub fn add_term_type(&mut self, term: TerminalString, ty: TypeRepr) { + assert!(self.terminal_types.insert(term, ty).is_none()); + } + + pub fn terminal_token_type(&self) -> &TypeRepr { + &self.terminal_token_type + } + + pub fn opt_terminal_loc_type(&self) -> Option<&TypeRepr> { + self.terminal_loc_type.as_ref() + } + + pub fn terminal_loc_type(&self) -> TypeRepr { + self.terminal_loc_type + .clone() + .unwrap_or_else(|| TypeRepr::Tuple(vec![])) + } + + pub fn error_type(&self) -> TypeRepr { + self.error_type.clone().unwrap_or_else(|| TypeRepr::Ref { + lifetime: Some(Atom::from("'static")), + mutable: false, + referent: Box::new(TypeRepr::str()), + }) + } + + pub fn terminal_type(&self, id: &TerminalString) -> &TypeRepr { + self.terminal_types + .get(&id) + .unwrap_or(&self.terminal_token_type) + } + + pub fn terminal_types(&self) -> Vec { + self.terminal_types.values().cloned().collect() + } + + pub fn lookup_nonterminal_type(&self, id: &NonterminalString) -> Option<&TypeRepr> { + self.nonterminal_types.get(&id) + } + + pub fn nonterminal_type(&self, id: &NonterminalString) -> &TypeRepr { + &self.nonterminal_types[&id] + } + + pub fn nonterminal_types(&self) -> Vec { + self.nonterminal_types.values().cloned().collect() + } + + pub fn parse_error_type(&self) -> &TypeRepr { + &self.parse_error_type + } + + pub fn error_recovery_type(&self) -> &TypeRepr { + &self.error_recovery_type + } + + /// Returns a type `(L, T, L)` where L is the location type and T + /// is the token type. + pub fn triple_type(&self) -> TypeRepr { + self.spanned_type(self.terminal_token_type().clone()) + } + + /// Returns a type `(L, T, L)` where L is the location type and T + /// is the argument. + pub fn spanned_type(&self, ty: TypeRepr) -> TypeRepr { + let location_type = self.terminal_loc_type(); + TypeRepr::Tuple(vec![location_type.clone(), ty, location_type]) + } +} + +impl Display for Parameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}: {}", self.name, self.ty) + } +} + +impl Display for TypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeRepr::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), + TypeRepr::Nominal(ref data) => write!(fmt, "{}", data), + TypeRepr::Associated { + ref type_parameter, + ref id, + } => write!(fmt, "{}::{}", type_parameter, id), + TypeRepr::Lifetime(ref id) => write!(fmt, "{}", id), + TypeRepr::Ref { + lifetime: None, + mutable: false, + ref referent, + } => write!(fmt, "&{}", referent), + TypeRepr::Ref { + lifetime: Some(ref l), + mutable: false, + ref referent, + } => write!(fmt, "&{} {}", l, referent), + TypeRepr::Ref { + lifetime: None, + mutable: true, + ref referent, + } => write!(fmt, "&mut {}", referent), + TypeRepr::Ref { + lifetime: Some(ref l), + mutable: true, + ref referent, + } => write!(fmt, "&{} mut {}", l, referent), + } + } +} + +impl Debug for TypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for NominalTypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + if self.types.len() == 0 { + write!(fmt, "{}", self.path) + } else { + write!(fmt, "{}<{}>", self.path, Sep(", ", &self.types)) + } + } +} + +impl Debug for NominalTypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +#[derive(Copy, Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)] +pub struct ActionFn(u32); + +impl ActionFn { + pub fn new(x: usize) -> ActionFn { + ActionFn(x as u32) + } + + pub fn index(&self) -> usize { + self.0 as usize + } +} + +impl Symbol { + pub fn is_terminal(&self) -> bool { + match *self { + Symbol::Terminal(..) => true, + Symbol::Nonterminal(..) => false, + } + } + + pub fn ty<'ty>(&self, t: &'ty Types) -> &'ty TypeRepr { + match *self { + Symbol::Terminal(ref id) => t.terminal_type(id), + Symbol::Nonterminal(ref id) => t.nonterminal_type(id), + } + } +} + +impl Display for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Symbol::Nonterminal(ref id) => write!(fmt, "{}", id.clone()), + Symbol::Terminal(ref id) => write!(fmt, "{}", id.clone()), + } + } +} + +impl Debug for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Into> for Symbol { + fn into(self) -> Box { + match self { + Symbol::Nonterminal(nt) => nt.into(), + Symbol::Terminal(term) => term.into(), + } + } +} + +impl Debug for Production { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!( + fmt, + "{} = {} => {:?};", + self.nonterminal, + Sep(", ", &self.symbols), + self.action, + ) + } +} + +impl Debug for ActionFnDefn { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.to_fn_string("_")) + } +} + +impl ActionFnDefn { + fn to_fn_string(&self, name: &str) -> String { + match self.kind { + ActionFnDefnKind::User(ref data) => data.to_fn_string(self, name), + ActionFnDefnKind::Inline(ref data) => data.to_fn_string(name), + ActionFnDefnKind::Lookaround(ref data) => format!("{:?}", data), + } + } +} + +impl UserActionFnDefn { + fn to_fn_string(&self, defn: &ActionFnDefn, name: &str) -> String { + let arg_strings: Vec = self.arg_patterns + .iter() + .zip(self.arg_types.iter()) + .map(|(p, t)| format!("{}: {}", p, t)) + .collect(); + + format!( + "fn {}({}) -> {} {{ {} }}", + name, + Sep(", ", &arg_strings), + defn.ret_type, + self.code, + ) + } +} + +impl InlineActionFnDefn { + fn to_fn_string(&self, name: &str) -> String { + let arg_strings: Vec = self.symbols + .iter() + .map(|inline_sym| match *inline_sym { + InlinedSymbol::Original(ref s) => format!("{}", s), + InlinedSymbol::Inlined(a, ref s) => format!("{:?}({})", a, Sep(", ", s)), + }) + .collect(); + + format!( + "fn {}(..) {{ {:?}({}) }}", + name, + self.action, + Sep(", ", &arg_strings), + ) + } +} + +impl Grammar { + pub fn pattern(&self, t: &TerminalString) -> &Pattern { + &self.conversions[t] + } + + pub fn productions_for(&self, nonterminal: &NonterminalString) -> &[Production] { + match self.nonterminals.get(nonterminal) { + Some(v) => &v.productions[..], + None => &[], // this...probably shouldn't happen actually? + } + } + + pub fn user_parameter_refs(&self) -> String { + let mut result = String::new(); + for parameter in &self.parameters { + result.push_str(&format!("{}, ", parameter.name)); + } + result + } + + pub fn action_is_fallible(&self, f: ActionFn) -> bool { + self.action_fn_defns[f.index()].fallible + } + + pub fn non_lifetime_type_parameters(&self) -> Vec<&TypeParameter> { + self.type_parameters + .iter() + .filter(|&tp| match *tp { + TypeParameter::Lifetime(_) => false, + TypeParameter::Id(_) => true, + }) + .collect() + } +} + +impl Default for Algorithm { + fn default() -> Self { + Algorithm { + lalr: false, + codegen: LrCodeGeneration::TableDriven, + } + } +} diff --git a/third_party/rust/lalrpop/src/grammar/token/mod.rs b/third_party/rust/lalrpop/src/grammar/token/mod.rs index b2ade2ca43d2..419d5a4427d7 100644 --- a/third_party/rust/lalrpop/src/grammar/token/mod.rs +++ b/third_party/rust/lalrpop/src/grammar/token/mod.rs @@ -1,28 +1,28 @@ -use std::collections::HashMap; - -use grammar::parse_tree::TypeRef; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -pub struct TokenDefinition { - // if the enum type is `foo::bar::baz` then: - enum_type: TypeRef, - - // map from a custom string, like `"("` to a variant name like LPAREN - token_map: HashMap, -} - -impl TokenDefinition { - pub fn new(enum_type: TypeRef, token_map: Vec<(Atom, Atom)>) -> TokenDefinition { - TokenDefinition { - enum_type: enum_type, - token_map: token_map.into_iter().collect(), - } - } - - pub fn enum_type(&self) -> &TypeRef { - &self.enum_type - } -} +use std::collections::HashMap; + +use grammar::parse_tree::TypeRef; +use string_cache::DefaultAtom as Atom; + +#[cfg(test)] +mod test; + +pub struct TokenDefinition { + // if the enum type is `foo::bar::baz` then: + enum_type: TypeRef, + + // map from a custom string, like `"("` to a variant name like LPAREN + token_map: HashMap, +} + +impl TokenDefinition { + pub fn new(enum_type: TypeRef, token_map: Vec<(Atom, Atom)>) -> TokenDefinition { + TokenDefinition { + enum_type: enum_type, + token_map: token_map.into_iter().collect(), + } + } + + pub fn enum_type(&self) -> &TypeRef { + &self.enum_type + } +} diff --git a/third_party/rust/lalrpop/src/grammar/token/test.rs b/third_party/rust/lalrpop/src/grammar/token/test.rs index d3f5a12faa99..8b137891791f 100644 --- a/third_party/rust/lalrpop/src/grammar/token/test.rs +++ b/third_party/rust/lalrpop/src/grammar/token/test.rs @@ -1 +1 @@ - + diff --git a/third_party/rust/lalrpop/src/kernel_set.rs b/third_party/rust/lalrpop/src/kernel_set.rs index 6355bcfced1c..32805eb2eb1c 100644 --- a/third_party/rust/lalrpop/src/kernel_set.rs +++ b/third_party/rust/lalrpop/src/kernel_set.rs @@ -1,41 +1,41 @@ -use collections::{map, Map}; -use std::collections::VecDeque; -use std::fmt::Debug; -use std::hash::Hash; - -pub struct KernelSet { - counter: usize, - kernels: VecDeque, - map: Map, -} - -pub trait Kernel: Clone + Debug + Hash + Eq + PartialOrd + Ord { - type Index: Copy + Debug; - - fn index(c: usize) -> Self::Index; -} - -impl KernelSet { - pub fn new() -> KernelSet { - KernelSet { - kernels: VecDeque::new(), - map: map(), - counter: 0, - } - } - - pub fn add_state(&mut self, kernel: K) -> K::Index { - let kernels = &mut self.kernels; - let counter = &mut self.counter; - *self.map.entry(kernel.clone()).or_insert_with(|| { - let index = *counter; - *counter += 1; - kernels.push_back(kernel); - K::index(index) - }) - } - - pub fn next(&mut self) -> Option { - self.kernels.pop_front() - } -} +use std::collections::VecDeque; +use std::fmt::Debug; +use std::hash::Hash; +use collections::{map, Map}; + +pub struct KernelSet { + counter: usize, + kernels: VecDeque, + map: Map, +} + +pub trait Kernel: Clone + Debug + Hash + Eq + PartialOrd + Ord { + type Index: Copy + Debug; + + fn index(c: usize) -> Self::Index; +} + +impl KernelSet { + pub fn new() -> KernelSet { + KernelSet { + kernels: VecDeque::new(), + map: map(), + counter: 0, + } + } + + pub fn add_state(&mut self, kernel: K) -> K::Index { + let kernels = &mut self.kernels; + let counter = &mut self.counter; + *self.map.entry(kernel.clone()).or_insert_with(|| { + let index = *counter; + *counter += 1; + kernels.push_back(kernel); + K::index(index) + }) + } + + pub fn next(&mut self) -> Option { + self.kernels.pop_front() + } +} diff --git a/third_party/rust/lalrpop/src/lexer/dfa/interpret.rs b/third_party/rust/lalrpop/src/lexer/dfa/interpret.rs index fdda6232a41f..6fde564b053f 100644 --- a/third_party/rust/lalrpop/src/lexer/dfa/interpret.rs +++ b/third_party/rust/lalrpop/src/lexer/dfa/interpret.rs @@ -1,41 +1,40 @@ -use lexer::dfa::{Kind, NFAIndex, DFA, START}; - -pub fn interpret<'text>(dfa: &DFA, input: &'text str) -> Option<(NFAIndex, &'text str)> { - let mut longest: Option<(NFAIndex, usize)> = None; - let mut state_index = START; - - for (offset, ch) in input.char_indices() { - let state = &dfa.states[state_index.0]; - - let target = dfa - .state(state_index) - .test_edges - .iter() - .filter_map(|&(test, target)| { - if test.contains_char(ch) { - Some(target) - } else { - None - } - }) - .next(); - - if let Some(target) = target { - state_index = target; - } else { - state_index = state.other_edge; - } - - match dfa.state(state_index).kind { - Kind::Accepts(nfa) => { - longest = Some((nfa, offset + ch.len_utf8())); - } - Kind::Reject => { - break; - } - Kind::Neither => {} - } - } - - longest.map(|(index, offset)| (index, &input[..offset])) -} +use lexer::dfa::{Kind, NFAIndex, DFA, START}; + +pub fn interpret<'text>(dfa: &DFA, input: &'text str) -> Option<(NFAIndex, &'text str)> { + let mut longest: Option<(NFAIndex, usize)> = None; + let mut state_index = START; + + for (offset, ch) in input.char_indices() { + let state = &dfa.states[state_index.0]; + + let target = dfa.state(state_index) + .test_edges + .iter() + .filter_map(|&(test, target)| { + if test.contains_char(ch) { + Some(target) + } else { + None + } + }) + .next(); + + if let Some(target) = target { + state_index = target; + } else { + state_index = state.other_edge; + } + + match dfa.state(state_index).kind { + Kind::Accepts(nfa) => { + longest = Some((nfa, offset + ch.len_utf8())); + } + Kind::Reject => { + break; + } + Kind::Neither => {} + } + } + + longest.map(|(index, offset)| (index, &input[..offset])) +} diff --git a/third_party/rust/lalrpop/src/lexer/dfa/mod.rs b/third_party/rust/lalrpop/src/lexer/dfa/mod.rs index d5b211a17f8f..d87cae74ece3 100644 --- a/third_party/rust/lalrpop/src/lexer/dfa/mod.rs +++ b/third_party/rust/lalrpop/src/lexer/dfa/mod.rs @@ -1,329 +1,326 @@ -//! Constructs a DFA which picks the longest matching regular -//! expression from the input. - -use collections::Set; -use kernel_set::{Kernel, KernelSet}; -use lexer::nfa::{self, NFAConstructionError, NFAStateIndex, Test, NFA}; -use lexer::re; -use std::fmt::{Debug, Display, Error, Formatter}; -use std::rc::Rc; - -#[cfg(test)] -mod test; - -#[cfg(test)] -pub mod interpret; - -mod overlap; - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct DFA { - pub states: Vec, -} - -#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] -pub struct Precedence(pub usize); - -#[derive(Debug)] -pub enum DFAConstructionError { - NFAConstructionError { - index: NFAIndex, - error: NFAConstructionError, - }, - - /// Either of the two regexs listed could match, and they have equal - /// priority. - Ambiguity { match0: NFAIndex, match1: NFAIndex }, -} - -pub fn build_dfa( - regexs: &[re::Regex], - precedences: &[Precedence], -) -> Result { - assert_eq!(regexs.len(), precedences.len()); - let nfas: Vec<_> = try! { - regexs.iter() - .enumerate() - .map(|(i, r)| match NFA::from_re(r) { - Ok(nfa) => Ok(nfa), - Err(e) => Err(DFAConstructionError::NFAConstructionError { - index: NFAIndex(i), - error: e - }), - }) - .collect() - }; - let builder = DFABuilder { - nfas: &nfas, - precedences: precedences.to_vec(), - }; - let dfa = try!(builder.build()); - Ok(dfa) -} - -struct DFABuilder<'nfa> { - nfas: &'nfa [NFA], - precedences: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct State { - item_set: DFAItemSet, - pub kind: Kind, - pub test_edges: Vec<(Test, DFAStateIndex)>, - pub other_edge: DFAStateIndex, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum Kind { - Accepts(NFAIndex), - Reject, - Neither, -} - -#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct NFAIndex(usize); - -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct DFAStateIndex(usize); - -type DFAKernelSet = KernelSet; - -#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -struct DFAItemSet { - items: Rc>, -} - -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -struct Item { - // which regular expression? - nfa_index: NFAIndex, - - // what state within the NFA are we at? - nfa_state: NFAStateIndex, -} - -const START: DFAStateIndex = DFAStateIndex(0); - -impl<'nfa> DFABuilder<'nfa> { - fn build(&self) -> Result { - let mut kernel_set = KernelSet::new(); - let mut states = vec![]; - - let start_state_index = self.start_state(&mut kernel_set); - assert_eq!(start_state_index, START); - - while let Some(item_set) = kernel_set.next() { - // collect all the specific tests we expect from any of - // the items in this state - let tests: Set = item_set - .items - .iter() - .flat_map(|&item| { - self.nfa(item) - .edges::(item.nfa_state) - .map(|edge| edge.label) - }) - .collect(); - let tests = overlap::remove_overlap(&tests); - - // if any NFA is in an accepting state, that makes this - // DFA state an accepting state - let mut all_accepts: Vec<(Precedence, NFAIndex)> = item_set - .items - .iter() - .cloned() - .filter(|&item| self.nfa(item).is_accepting_state(item.nfa_state)) - .map(|item| (self.precedences[item.nfa_index.0], item.nfa_index)) - .collect(); - - // if all NFAs are in a rejecting state, that makes this - // DFA a rejecting state - let all_rejects: bool = item_set - .items - .iter() - .all(|&item| self.nfa(item).is_rejecting_state(item.nfa_state)); - - let kind = if all_rejects || item_set.items.is_empty() { - Kind::Reject - } else if all_accepts.len() == 0 { - Kind::Neither - } else if all_accepts.len() == 1 { - // accepts just one NFA, easy case - Kind::Accepts(all_accepts[0].1) - } else { - all_accepts.sort(); // sort regex with higher precedence, well, higher - let (best_priority, best_nfa) = all_accepts[all_accepts.len() - 1]; - let (next_priority, next_nfa) = all_accepts[all_accepts.len() - 2]; - if best_priority == next_priority { - return Err(DFAConstructionError::Ambiguity { - match0: best_nfa, - match1: next_nfa, - }); - } - Kind::Accepts(best_nfa) - }; - - // for each specific test, find what happens if we see a - // character matching that test - let mut test_edges: Vec<(Test, DFAStateIndex)> = tests - .iter() - .map(|&test| { - let items: Vec<_> = item_set - .items - .iter() - .filter_map(|&item| self.accept_test(item, test)) - .collect(); - - // at least one of those items should accept this test - assert!(!items.is_empty()); - - (test, kernel_set.add_state(self.transitive_closure(items))) - }) - .collect(); - - test_edges.sort(); - - // Consider what there is some character that doesn't meet - // any of the tests. In this case, we can just ignore all - // the test edges for each of the items and just union all - // the "other" edges -- because if it were one of those - // test edges, then that transition is represented above. - let other_transitions: Vec<_> = item_set - .items - .iter() - .filter_map(|&item| self.accept_other(item)) - .collect(); - - // we never know the full set - assert!(item_set.items.is_empty() || !other_transitions.is_empty()); - - let other_edge = kernel_set.add_state(self.transitive_closure(other_transitions)); - - let state = State { - item_set: item_set, - kind: kind, - test_edges: test_edges, - other_edge: other_edge, - }; - - states.push(state); - } - - Ok(DFA { states: states }) - } - - fn start_state(&self, kernel_set: &mut DFAKernelSet) -> DFAStateIndex { - // starting state is at the beginning of all regular expressions - let items: Vec<_> = (0..self.nfas.len()) - .map(|i| Item { - nfa_index: NFAIndex(i), - nfa_state: nfa::START, - }) - .collect(); - let item_set = self.transitive_closure(items); - kernel_set.add_state(item_set) - } - - fn accept_test(&self, item: Item, test: Test) -> Option { - let nfa = self.nfa(item); - - let matching_test = nfa - .edges::(item.nfa_state) - .filter(|edge| edge.label.intersects(test)) - .map(|edge| item.to(edge.to)); - - let matching_other = nfa - .edges::(item.nfa_state) - .map(|edge| item.to(edge.to)); - - matching_test.chain(matching_other).next() - } - - fn accept_other(&self, item: Item) -> Option { - let nfa = self.nfa(item); - nfa.edges::(item.nfa_state) - .map(|edge| item.to(edge.to)) - .next() - } - - fn transitive_closure(&self, mut items: Vec) -> DFAItemSet { - let mut observed: Set = items.iter().cloned().collect(); - - let mut counter = 0; - while counter < items.len() { - let item = items[counter]; - let derived_states = self - .nfa(item) - .edges::(item.nfa_state) - .map(|edge| item.to(edge.to)) - .filter(|&item| observed.insert(item)); - items.extend(derived_states); - counter += 1; - } - - items.sort(); - items.dedup(); - - DFAItemSet { - items: Rc::new(items), - } - } - - fn nfa(&self, item: Item) -> &NFA { - &self.nfas[item.nfa_index.0] - } -} - -impl Kernel for DFAItemSet { - type Index = DFAStateIndex; - - fn index(c: usize) -> DFAStateIndex { - DFAStateIndex(c) - } -} - -impl DFA { - fn state(&self, index: DFAStateIndex) -> &State { - &self.states[index.0] - } -} - -impl Item { - fn to(&self, s: NFAStateIndex) -> Item { - Item { - nfa_index: self.nfa_index, - nfa_state: s, - } - } -} - -impl Debug for DFAStateIndex { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "DFA{}", self.0) - } -} - -impl Display for DFAStateIndex { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Debug::fmt(self, fmt) - } -} - -impl NFAIndex { - pub fn index(&self) -> usize { - self.0 - } -} - -impl DFAStateIndex { - pub fn index(&self) -> usize { - self.0 - } -} - -impl Debug for Item { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "({:?}:{:?})", self.nfa_index, self.nfa_state) - } -} +//! Constructs a DFA which picks the longest matching regular +//! expression from the input. + +use collections::Set; +use kernel_set::{Kernel, KernelSet}; +use std::fmt::{Debug, Display, Error, Formatter}; +use std::rc::Rc; +use lexer::re; +use lexer::nfa::{self, NFAConstructionError, NFAStateIndex, Test, NFA}; + +#[cfg(test)] +mod test; + +#[cfg(test)] +pub mod interpret; + +mod overlap; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DFA { + pub states: Vec, +} + +#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub struct Precedence(pub usize); + +#[derive(Debug)] +pub enum DFAConstructionError { + NFAConstructionError { + index: NFAIndex, + error: NFAConstructionError, + }, + + /// Either of the two regexs listed could match, and they have equal + /// priority. + Ambiguity { match0: NFAIndex, match1: NFAIndex }, +} + +pub fn build_dfa( + regexs: &[re::Regex], + precedences: &[Precedence], +) -> Result { + assert_eq!(regexs.len(), precedences.len()); + let nfas: Vec<_> = try! { + regexs.iter() + .enumerate() + .map(|(i, r)| match NFA::from_re(r) { + Ok(nfa) => Ok(nfa), + Err(e) => Err(DFAConstructionError::NFAConstructionError { + index: NFAIndex(i), + error: e + }), + }) + .collect() + }; + let builder = DFABuilder { + nfas: &nfas, + precedences: precedences.to_vec(), + }; + let dfa = try!(builder.build()); + Ok(dfa) +} + +struct DFABuilder<'nfa> { + nfas: &'nfa [NFA], + precedences: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct State { + item_set: DFAItemSet, + pub kind: Kind, + pub test_edges: Vec<(Test, DFAStateIndex)>, + pub other_edge: DFAStateIndex, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Kind { + Accepts(NFAIndex), + Reject, + Neither, +} + +#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NFAIndex(usize); + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct DFAStateIndex(usize); + +type DFAKernelSet = KernelSet; + +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct DFAItemSet { + items: Rc>, +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct Item { + // which regular expression? + nfa_index: NFAIndex, + + // what state within the NFA are we at? + nfa_state: NFAStateIndex, +} + +const START: DFAStateIndex = DFAStateIndex(0); + +impl<'nfa> DFABuilder<'nfa> { + fn build(&self) -> Result { + let mut kernel_set = KernelSet::new(); + let mut states = vec![]; + + let start_state_index = self.start_state(&mut kernel_set); + assert_eq!(start_state_index, START); + + while let Some(item_set) = kernel_set.next() { + // collect all the specific tests we expect from any of + // the items in this state + let tests: Set = item_set + .items + .iter() + .flat_map(|&item| { + self.nfa(item) + .edges::(item.nfa_state) + .map(|edge| edge.label) + }) + .collect(); + let tests = overlap::remove_overlap(&tests); + + // if any NFA is in an accepting state, that makes this + // DFA state an accepting state + let mut all_accepts: Vec<(Precedence, NFAIndex)> = item_set + .items + .iter() + .cloned() + .filter(|&item| self.nfa(item).is_accepting_state(item.nfa_state)) + .map(|item| (self.precedences[item.nfa_index.0], item.nfa_index)) + .collect(); + + // if all NFAs are in a rejecting state, that makes this + // DFA a rejecting state + let all_rejects: bool = item_set + .items + .iter() + .all(|&item| self.nfa(item).is_rejecting_state(item.nfa_state)); + + let kind = if all_rejects || item_set.items.is_empty() { + Kind::Reject + } else if all_accepts.len() == 0 { + Kind::Neither + } else if all_accepts.len() == 1 { + // accepts just one NFA, easy case + Kind::Accepts(all_accepts[0].1) + } else { + all_accepts.sort(); // sort regex with higher precedence, well, higher + let (best_priority, best_nfa) = all_accepts[all_accepts.len() - 1]; + let (next_priority, next_nfa) = all_accepts[all_accepts.len() - 2]; + if best_priority == next_priority { + return Err(DFAConstructionError::Ambiguity { + match0: best_nfa, + match1: next_nfa, + }); + } + Kind::Accepts(best_nfa) + }; + + // for each specific test, find what happens if we see a + // character matching that test + let mut test_edges: Vec<(Test, DFAStateIndex)> = tests + .iter() + .map(|&test| { + let items: Vec<_> = item_set + .items + .iter() + .filter_map(|&item| self.accept_test(item, test)) + .collect(); + + // at least one of those items should accept this test + assert!(!items.is_empty()); + + (test, kernel_set.add_state(self.transitive_closure(items))) + }) + .collect(); + + test_edges.sort(); + + // Consider what there is some character that doesn't meet + // any of the tests. In this case, we can just ignore all + // the test edges for each of the items and just union all + // the "other" edges -- because if it were one of those + // test edges, then that transition is represented above. + let other_transitions: Vec<_> = item_set + .items + .iter() + .filter_map(|&item| self.accept_other(item)) + .collect(); + + // we never know the full set + assert!(item_set.items.is_empty() || !other_transitions.is_empty()); + + let other_edge = kernel_set.add_state(self.transitive_closure(other_transitions)); + + let state = State { + item_set: item_set, + kind: kind, + test_edges: test_edges, + other_edge: other_edge, + }; + + states.push(state); + } + + Ok(DFA { states: states }) + } + + fn start_state(&self, kernel_set: &mut DFAKernelSet) -> DFAStateIndex { + // starting state is at the beginning of all regular expressions + let items: Vec<_> = (0..self.nfas.len()) + .map(|i| Item { + nfa_index: NFAIndex(i), + nfa_state: nfa::START, + }) + .collect(); + let item_set = self.transitive_closure(items); + kernel_set.add_state(item_set) + } + + fn accept_test(&self, item: Item, test: Test) -> Option { + let nfa = self.nfa(item); + + let matching_test = nfa.edges::(item.nfa_state) + .filter(|edge| edge.label.intersects(test)) + .map(|edge| item.to(edge.to)); + + let matching_other = nfa.edges::(item.nfa_state) + .map(|edge| item.to(edge.to)); + + matching_test.chain(matching_other).next() + } + + fn accept_other(&self, item: Item) -> Option { + let nfa = self.nfa(item); + nfa.edges::(item.nfa_state) + .map(|edge| item.to(edge.to)) + .next() + } + + fn transitive_closure(&self, mut items: Vec) -> DFAItemSet { + let mut observed: Set = items.iter().cloned().collect(); + + let mut counter = 0; + while counter < items.len() { + let item = items[counter]; + let derived_states = self.nfa(item) + .edges::(item.nfa_state) + .map(|edge| item.to(edge.to)) + .filter(|&item| observed.insert(item)); + items.extend(derived_states); + counter += 1; + } + + items.sort(); + items.dedup(); + + DFAItemSet { + items: Rc::new(items), + } + } + + fn nfa(&self, item: Item) -> &NFA { + &self.nfas[item.nfa_index.0] + } +} + +impl Kernel for DFAItemSet { + type Index = DFAStateIndex; + + fn index(c: usize) -> DFAStateIndex { + DFAStateIndex(c) + } +} + +impl DFA { + fn state(&self, index: DFAStateIndex) -> &State { + &self.states[index.0] + } +} + +impl Item { + fn to(&self, s: NFAStateIndex) -> Item { + Item { + nfa_index: self.nfa_index, + nfa_state: s, + } + } +} + +impl Debug for DFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "DFA{}", self.0) + } +} + +impl Display for DFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Debug::fmt(self, fmt) + } +} + +impl NFAIndex { + pub fn index(&self) -> usize { + self.0 + } +} + +impl DFAStateIndex { + pub fn index(&self) -> usize { + self.0 + } +} + +impl Debug for Item { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({:?}:{:?})", self.nfa_index, self.nfa_state) + } +} diff --git a/third_party/rust/lalrpop/src/lexer/dfa/overlap.rs b/third_party/rust/lalrpop/src/lexer/dfa/overlap.rs index e4e737608bca..099c59c60b38 100644 --- a/third_party/rust/lalrpop/src/lexer/dfa/overlap.rs +++ b/third_party/rust/lalrpop/src/lexer/dfa/overlap.rs @@ -1,149 +1,149 @@ -//! When we are combining two NFAs, we will grab all the outgoing -//! edges from a set of nodes and wind up with a bunch of potentially -//! overlapping character ranges like: -//! -//! a-z -//! c-l -//! 0-9 -//! -//! This module contains code to turn those into non-overlapping ranges like: -//! -//! a-b -//! c-l -//! m-z -//! 0-9 -//! -//! Specifically, we want to ensure that the same set of characters is -//! covered when we started, and that each of the input ranges is -//! covered precisely by some set of ranges in the output. - -use collections::Set; -use lexer::nfa::Test; -use std::cmp; - -pub fn remove_overlap(ranges: &Set) -> Vec { - // We will do this in the dumbest possible way to start. :) - // Maintain a result vector that contains disjoint ranges. To - // insert a new range, we walk over this vector and split things - // up as we go. This algorithm is so naive as to be exponential, I - // think. Sue me. - - let mut disjoint_ranges = vec![]; - - for &range in ranges { - add_range(range, 0, &mut disjoint_ranges); - } - - // the algorithm above leaves some empty ranges in for simplicity; - // prune them out. - disjoint_ranges.retain(|r| !r.is_empty()); - - disjoint_ranges -} - -fn add_range(range: Test, start_index: usize, disjoint_ranges: &mut Vec) { - if range.is_empty() { - return; - } - - // Find first overlapping range in `disjoint_ranges`, if any. - match disjoint_ranges[start_index..] - .iter() - .position(|r| r.intersects(range)) - { - Some(index) => { - let index = index + start_index; - let overlapping_range = disjoint_ranges[index]; - - // If the range we are trying to add already exists, we're all done. - if overlapping_range == range { - return; - } - - // Otherwise, we want to create three ranges (some of which may - // be empty). e.g. imagine one range is `a-z` and the other - // is `c-l`, we want `a-b`, `c-l`, and `m-z`. - let min_min = cmp::min(range.start, overlapping_range.start); - let mid_min = cmp::max(range.start, overlapping_range.start); - let mid_max = cmp::min(range.end, overlapping_range.end); - let max_max = cmp::max(range.end, overlapping_range.end); - let low_range = Test { - start: min_min, - end: mid_min, - }; - let mid_range = Test { - start: mid_min, - end: mid_max, - }; - let max_range = Test { - start: mid_max, - end: max_max, - }; - - assert!(low_range.is_disjoint(mid_range)); - assert!(low_range.is_disjoint(max_range)); - assert!(mid_range.is_disjoint(max_range)); - - // Replace the existing range with the low range, and then - // add the mid and max ranges in. (The low range may be - // empty, but we'll prune that out later.) - disjoint_ranges[index] = low_range; - add_range(mid_range, index + 1, disjoint_ranges); - add_range(max_range, index + 1, disjoint_ranges); - } - - None => { - // no overlap -- easy case. - disjoint_ranges.push(range); - } - } -} - -#[cfg(test)] -macro_rules! test { - ($($range:expr,)*) => { - { - use collections::set; - use lexer::nfa::Test; - use std::char; - let mut s = set(); - $({ let r = $range; s.insert(Test::exclusive_range(r.start, r.end)); })* - remove_overlap(&s).into_iter() - .map(|r| - char::from_u32(r.start).unwrap() .. - char::from_u32(r.end).unwrap()) - .collect::>() - } - } -} - -#[test] -fn alphabet() { - let result = test! { - 'a' .. 'z', - 'c' .. 'l', - '0' .. '9', - }; - assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); -} - -#[test] -fn repeat() { - let result = test! { - 'a' .. 'z', - 'c' .. 'l', - 'l' .. 'z', - '0' .. '9', - }; - assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); -} - -#[test] -fn stagger() { - let result = test! { - '0' .. '3', - '2' .. '4', - '3' .. '5', - }; - assert_eq!(result, vec!['0'..'2', '2'..'3', '3'..'4', '4'..'5']); -} +//! When we are combining two NFAs, we will grab all the outgoing +//! edges from a set of nodes and wind up with a bunch of potentially +//! overlapping character ranges like: +//! +//! a-z +//! c-l +//! 0-9 +//! +//! This module contains code to turn those into non-overlapping ranges like: +//! +//! a-b +//! c-l +//! m-z +//! 0-9 +//! +//! Specifically, we want to ensure that the same set of characters is +//! covered when we started, and that each of the input ranges is +//! covered precisely by some set of ranges in the output. + +use collections::Set; +use lexer::nfa::Test; +use std::cmp; + +pub fn remove_overlap(ranges: &Set) -> Vec { + // We will do this in the dumbest possible way to start. :) + // Maintain a result vector that contains disjoint ranges. To + // insert a new range, we walk over this vector and split things + // up as we go. This algorithm is so naive as to be exponential, I + // think. Sue me. + + let mut disjoint_ranges = vec![]; + + for &range in ranges { + add_range(range, 0, &mut disjoint_ranges); + } + + // the algorithm above leaves some empty ranges in for simplicity; + // prune them out. + disjoint_ranges.retain(|r| !r.is_empty()); + + disjoint_ranges +} + +fn add_range(range: Test, start_index: usize, disjoint_ranges: &mut Vec) { + if range.is_empty() { + return; + } + + // Find first overlapping range in `disjoint_ranges`, if any. + match disjoint_ranges[start_index..] + .iter() + .position(|r| r.intersects(range)) + { + Some(index) => { + let index = index + start_index; + let overlapping_range = disjoint_ranges[index]; + + // If the range we are trying to add already exists, we're all done. + if overlapping_range == range { + return; + } + + // Otherwise, we want to create three ranges (some of which may + // be empty). e.g. imagine one range is `a-z` and the other + // is `c-l`, we want `a-b`, `c-l`, and `m-z`. + let min_min = cmp::min(range.start, overlapping_range.start); + let mid_min = cmp::max(range.start, overlapping_range.start); + let mid_max = cmp::min(range.end, overlapping_range.end); + let max_max = cmp::max(range.end, overlapping_range.end); + let low_range = Test { + start: min_min, + end: mid_min, + }; + let mid_range = Test { + start: mid_min, + end: mid_max, + }; + let max_range = Test { + start: mid_max, + end: max_max, + }; + + assert!(low_range.is_disjoint(mid_range)); + assert!(low_range.is_disjoint(max_range)); + assert!(mid_range.is_disjoint(max_range)); + + // Replace the existing range with the low range, and then + // add the mid and max ranges in. (The low range may be + // empty, but we'll prune that out later.) + disjoint_ranges[index] = low_range; + add_range(mid_range, index + 1, disjoint_ranges); + add_range(max_range, index + 1, disjoint_ranges); + } + + None => { + // no overlap -- easy case. + disjoint_ranges.push(range); + } + } +} + +#[cfg(test)] +macro_rules! test { + ($($range:expr,)*) => { + { + use collections::set; + use lexer::nfa::Test; + use std::char; + let mut s = set(); + $({ let r = $range; s.insert(Test::exclusive_range(r.start, r.end)); })* + remove_overlap(&s).into_iter() + .map(|r| + char::from_u32(r.start).unwrap() .. + char::from_u32(r.end).unwrap()) + .collect::>() + } + } +} + +#[test] +fn alphabet() { + let result = test! { + 'a' .. 'z', + 'c' .. 'l', + '0' .. '9', + }; + assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); +} + +#[test] +fn repeat() { + let result = test! { + 'a' .. 'z', + 'c' .. 'l', + 'l' .. 'z', + '0' .. '9', + }; + assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); +} + +#[test] +fn stagger() { + let result = test! { + '0' .. '3', + '2' .. '4', + '3' .. '5', + }; + assert_eq!(result, vec!['0'..'2', '2'..'3', '3'..'4', '4'..'5']); +} diff --git a/third_party/rust/lalrpop/src/lexer/dfa/test.rs b/third_party/rust/lalrpop/src/lexer/dfa/test.rs index 829014187629..6c2b8c4889b4 100644 --- a/third_party/rust/lalrpop/src/lexer/dfa/test.rs +++ b/third_party/rust/lalrpop/src/lexer/dfa/test.rs @@ -1,77 +1,76 @@ -use lexer::dfa::interpret::interpret; -use lexer::dfa::{self, DFAConstructionError, NFAIndex, Precedence, DFA}; -use lexer::re; - -pub fn dfa(inputs: &[(&str, Precedence)]) -> Result { - let regexs: Result, _> = inputs.iter().map(|&(s, _)| re::parse_regex(s)).collect(); - let regexs = match regexs { - Ok(rs) => rs, - Err(_) => panic!("unexpected parse error"), - }; - let precedences: Vec<_> = inputs.iter().map(|&(_, p)| p).collect(); - dfa::build_dfa(®exs, &precedences) -} - -const P1: Precedence = Precedence(1); -const P0: Precedence = Precedence(0); - -#[test] -fn tokenizer() { - let dfa = dfa(&[ - /* 0 */ (r#"class"#, P1), - /* 1 */ (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0), - /* 2 */ (r#"[0-9]+"#, P0), - /* 3 */ (r#" +"#, P0), - /* 4 */ (r#">>"#, P0), - /* 5 */ (r#">"#, P0), - ]) - .unwrap(); - - assert_eq!(interpret(&dfa, "class Foo"), Some((NFAIndex(0), "class"))); - assert_eq!(interpret(&dfa, "classz Foo"), Some((NFAIndex(1), "classz"))); - assert_eq!(interpret(&dfa, "123"), Some((NFAIndex(2), "123"))); - assert_eq!(interpret(&dfa, " classz Foo"), Some((NFAIndex(3), " "))); - assert_eq!(interpret(&dfa, ">"), Some((NFAIndex(5), ">"))); - assert_eq!(interpret(&dfa, ">>"), Some((NFAIndex(4), ">>"))); -} - -#[test] -fn ambiguous_regex() { - // here the keyword and the regex have same precedence, so we have - // an ambiguity - assert!(dfa(&[(r#"class"#, P0), (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0)]).is_err()); -} - -#[test] -fn issue_32() { - assert!(dfa(&[(r#"."#, P0)]).is_ok()); -} - -#[test] -fn issue_35() { - assert!(dfa(&[(r#".*"#, P0), (r"[-+]?[0-9]*\.?[0-9]+", P0)]).is_err()); -} - -#[test] -fn alternatives() { - let dfa = dfa(&[(r#"abc|abd"#, P0)]).unwrap(); - assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); - assert_eq!(interpret(&dfa, "abd"), Some((NFAIndex(0), "abd"))); - assert_eq!(interpret(&dfa, "123"), None); -} - -#[test] -fn alternatives_extension() { - let dfa = dfa(&[(r#"abc|abcd"#, P0)]).unwrap(); - assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); - assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); - assert_eq!(interpret(&dfa, "123"), None); -} - -#[test] -fn alternatives_contraction() { - let dfa = dfa(&[(r#"abcd|abc"#, P0)]).unwrap(); - assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); - assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); - assert_eq!(interpret(&dfa, "123"), None); -} +use lexer::dfa::{self, DFAConstructionError, NFAIndex, Precedence, DFA}; +use lexer::dfa::interpret::interpret; +use lexer::re; + +pub fn dfa(inputs: &[(&str, Precedence)]) -> Result { + let regexs: Result, _> = inputs.iter().map(|&(s, _)| re::parse_regex(s)).collect(); + let regexs = match regexs { + Ok(rs) => rs, + Err(_) => panic!("unexpected parse error"), + }; + let precedences: Vec<_> = inputs.iter().map(|&(_, p)| p).collect(); + dfa::build_dfa(®exs, &precedences) +} + +const P1: Precedence = Precedence(1); +const P0: Precedence = Precedence(0); + +#[test] +fn tokenizer() { + let dfa = dfa(&[ + /* 0 */ (r#"class"#, P1), + /* 1 */ (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0), + /* 2 */ (r#"[0-9]+"#, P0), + /* 3 */ (r#" +"#, P0), + /* 4 */ (r#">>"#, P0), + /* 5 */ (r#">"#, P0), + ]).unwrap(); + + assert_eq!(interpret(&dfa, "class Foo"), Some((NFAIndex(0), "class"))); + assert_eq!(interpret(&dfa, "classz Foo"), Some((NFAIndex(1), "classz"))); + assert_eq!(interpret(&dfa, "123"), Some((NFAIndex(2), "123"))); + assert_eq!(interpret(&dfa, " classz Foo"), Some((NFAIndex(3), " "))); + assert_eq!(interpret(&dfa, ">"), Some((NFAIndex(5), ">"))); + assert_eq!(interpret(&dfa, ">>"), Some((NFAIndex(4), ">>"))); +} + +#[test] +fn ambiguous_regex() { + // here the keyword and the regex have same precedence, so we have + // an ambiguity + assert!(dfa(&[(r#"class"#, P0), (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0)]).is_err()); +} + +#[test] +fn issue_32() { + assert!(dfa(&[(r#"."#, P0)]).is_ok()); +} + +#[test] +fn issue_35() { + assert!(dfa(&[(r#".*"#, P0), (r"[-+]?[0-9]*\.?[0-9]+", P0)]).is_err()); +} + +#[test] +fn alternatives() { + let dfa = dfa(&[(r#"abc|abd"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abd"), Some((NFAIndex(0), "abd"))); + assert_eq!(interpret(&dfa, "123"), None); +} + +#[test] +fn alternatives_extension() { + let dfa = dfa(&[(r#"abc|abcd"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); + assert_eq!(interpret(&dfa, "123"), None); +} + +#[test] +fn alternatives_contraction() { + let dfa = dfa(&[(r#"abcd|abc"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); + assert_eq!(interpret(&dfa, "123"), None); +} diff --git a/third_party/rust/lalrpop/src/lexer/intern_token/mod.rs b/third_party/rust/lalrpop/src/lexer/intern_token/mod.rs index 45b264d909bc..47712ead6a11 100644 --- a/third_party/rust/lalrpop/src/lexer/intern_token/mod.rs +++ b/third_party/rust/lalrpop/src/lexer/intern_token/mod.rs @@ -1,293 +1,293 @@ -/*! - -Generates an iterator type `Matcher` that looks roughly like - -```ignore -mod intern_token { - extern crate regex as regex; - - #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub struct Token<'input>(pub usize, pub &'input str); - // ~~~~~~ ~~~~~~~~~~~ - // token token - // index text - // (type) - - impl<'a> fmt::Display for Token<'a> { ... } - - pub struct MatcherBuilder { - regex_set: regex::RegexSet, - regex_vec: Vec, - } - - impl MatcherBuilder { - fn new() -> MatchBuilder { ... } - fn matcher<'input, 'builder>(&'builder self, s: &'input str) -> Matcher<'input, 'builder> { ... } - } - - pub struct Matcher<'input, 'builder> { - text: &'input str, - consumed: usize, - regex_set: &'builder regex::RegexSet, - regex_vec: &'builder Vec, - } - - impl Matcher<'input> { - fn tokenize(&self, text: &str) -> Option<(usize, usize)> { ... } - } - - impl<'input> Iterator for Matcher<'input> { - type Item = Result<(usize, Token<'input>, usize), ParseError>; - // ~~~~~ ~~~~~~~~~~~~~ ~~~~~ - // start token end - } -} -``` - - */ - -use grammar::parse_tree::InternToken; -use grammar::repr::{Grammar, TerminalLiteral}; -use lexer::re; -use rust::RustWrite; -use std::io::{self, Write}; - -pub fn compile( - grammar: &Grammar, - intern_token: &InternToken, - out: &mut RustWrite, -) -> io::Result<()> { - let prefix = &grammar.prefix; - - rust!(out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); - rust!(out, "mod {}intern_token {{", prefix); - rust!(out, "#![allow(unused_imports)]"); - try!(out.write_uses("", &grammar)); - rust!(out, "extern crate regex as {}regex;", prefix); - rust!(out, "use std::fmt as {}fmt;", prefix); - rust!(out, ""); - rust!( - out, - "#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]" - ); - rust!(out, "pub struct Token<'input>(pub usize, pub &'input str);"); - rust!(out, "impl<'a> {}fmt::Display for Token<'a> {{", prefix); - rust!( - out, - "fn fmt(&self, formatter: &mut {}fmt::Formatter) -> Result<(), {}fmt::Error> {{", - prefix, - prefix - ); - rust!(out, "{}fmt::Display::fmt(self.1, formatter)", prefix); - rust!(out, "}}"); - rust!(out, "}}"); - rust!(out, ""); - rust!(out, "pub struct {}MatcherBuilder {{", prefix); - rust!(out, "regex_set: {}regex::RegexSet,", prefix); - rust!(out, "regex_vec: Vec<{}regex::Regex>,", prefix); - rust!(out, "}}"); - rust!(out, ""); - rust!(out, "impl {}MatcherBuilder {{", prefix); - rust!(out, "pub fn new() -> {}MatcherBuilder {{", prefix); - - // create a vector of rust string literals with the text of each - // regular expression - let regex_strings: Vec = { - intern_token - .match_entries - .iter() - .map(|match_entry| match match_entry.match_literal { - TerminalLiteral::Quoted(ref s) => re::parse_literal(&s), - TerminalLiteral::Regex(ref s) => re::parse_regex(&s).unwrap(), - }) - .map(|regex| { - // make sure all regex are anchored at the beginning of the input - format!("^({})", regex) - }) - .map(|regex_str| { - // create a rust string with text of the regex; the Debug impl - // will add quotes and escape - format!("{:?}", regex_str) - }) - .collect() - }; - - rust!(out, "let {}strs: &[&str] = &[", prefix); - for literal in ®ex_strings { - rust!(out, "{},", literal); - } - rust!(out, "];"); - rust!( - out, - "let {}regex_set = {}regex::RegexSet::new({}strs).unwrap();", - prefix, - prefix, - prefix - ); - - rust!(out, "let {}regex_vec = vec![", prefix); - for literal in ®ex_strings { - rust!(out, "{}regex::Regex::new({}).unwrap(),", prefix, literal); - } - rust!(out, "];"); - - rust!( - out, - "{0}MatcherBuilder {{ regex_set: {0}regex_set, regex_vec: {0}regex_vec }}", - prefix - ); - rust!(out, "}}"); // fn new() - rust!( - out, - "pub fn matcher<'input, 'builder>(&'builder self, s: &'input str) \ - -> {}Matcher<'input, 'builder> {{", - prefix - ); - rust!(out, "{}Matcher {{", prefix); - rust!(out, "text: s,"); - rust!(out, "consumed: 0,"); - rust!(out, "regex_set: &self.regex_set,"); - rust!(out, "regex_vec: &self.regex_vec,"); - rust!(out, "}}"); // struct literal - rust!(out, "}}"); // fn matcher() - rust!(out, "}}"); // impl MatcherBuilder - rust!(out, ""); - rust!(out, "pub struct {}Matcher<'input, 'builder> {{", prefix); - rust!(out, "text: &'input str,"); // remaining input - rust!(out, "consumed: usize,"); // number of chars consumed thus far - rust!(out, "regex_set: &'builder {}regex::RegexSet,", prefix); - rust!(out, "regex_vec: &'builder Vec<{}regex::Regex>,", prefix); - rust!(out, "}}"); - rust!(out, ""); - rust!( - out, - "impl<'input, 'builder> Iterator for {}Matcher<'input, 'builder> {{", - prefix - ); - rust!( - out, - "type Item = Result<(usize, Token<'input>, usize), \ - {}lalrpop_util::ParseError,{}>>;", - prefix, - grammar.types.error_type() - ); - rust!(out, ""); - rust!(out, "fn next(&mut self) -> Option {{"); - - // start by trimming whitespace from left - rust!(out, "let {}text = self.text.trim_left();", prefix); - rust!( - out, - "let {}whitespace = self.text.len() - {}text.len();", - prefix, - prefix - ); - rust!( - out, - "let {}start_offset = self.consumed + {}whitespace;", - prefix, - prefix - ); - - // if nothing left, return None - rust!(out, "if {}text.is_empty() {{", prefix); - rust!(out, "self.text = {}text;", prefix); - rust!(out, "self.consumed = {}start_offset;", prefix); - rust!(out, "None"); - rust!(out, "}} else {{"); - - // otherwise, use regex-set to find list of matching tokens - rust!( - out, - "let {}matches = self.regex_set.matches({}text);", - prefix, - prefix - ); - - // if nothing matched, return an error - rust!(out, "if !{}matches.matched_any() {{", prefix); - rust!( - out, - "Some(Err({}lalrpop_util::ParseError::InvalidToken {{", - prefix - ); - rust!(out, "location: {}start_offset,", prefix); - rust!(out, "}}))"); - rust!(out, "}} else {{"); - - // otherwise, have to find longest, highest-priority match. We have the literals - // sorted in order of increasing precedence, so we'll iterate over them one by one, - // checking if each one matches, and remembering the longest one. - rust!(out, "let mut {}longest_match = 0;", prefix); // length of longest match - rust!(out, "let mut {}index = 0;", prefix); // index of longest match - rust!( - out, - "for {}i in 0 .. {} {{", - prefix, - intern_token.match_entries.len() - ); - rust!(out, "if {}matches.matched({}i) {{", prefix, prefix); - - // re-run the regex to find out how long this particular match - // was, then compare that against the longest-match so far. Note - // that the order of the tuple is carefully constructed to ensure - // that (a) we get the longest-match but (b) if two matches are - // equal, we get the largest index. This is because the indices - // are sorted in order of increasing priority, and because we know - // that indices of equal priority cannot both match (because of - // the DFA check). - rust!( - out, - "let {}match = self.regex_vec[{}i].find({}text).unwrap();", - prefix, - prefix, - prefix - ); - rust!(out, "let {}len = {}match.end();", prefix, prefix); - rust!(out, "if {}len >= {}longest_match {{", prefix, prefix); - rust!(out, "{}longest_match = {}len;", prefix, prefix); - rust!(out, "{}index = {}i;", prefix, prefix); - rust!(out, "}}"); // if is longest match - rust!(out, "}}"); // if matches.matched(i) - rust!(out, "}}"); // for loop - - // transform the result into the expected return value - rust!( - out, - "let {}result = &{}text[..{}longest_match];", - prefix, - prefix, - prefix - ); - rust!( - out, - "let {}remaining = &{}text[{}longest_match..];", - prefix, - prefix, - prefix - ); - rust!( - out, - "let {}end_offset = {}start_offset + {}longest_match;", - prefix, - prefix, - prefix - ); - rust!(out, "self.text = {}remaining;", prefix); - rust!(out, "self.consumed = {}end_offset;", prefix); - rust!( - out, - "Some(Ok(({}start_offset, Token({}index, {}result), {}end_offset)))", - prefix, - prefix, - prefix, - prefix - ); - - rust!(out, "}}"); // else - rust!(out, "}}"); // else - rust!(out, "}}"); // fn - rust!(out, "}}"); // impl - rust!(out, "}}"); // mod - Ok(()) -} +/*! + +Generates an iterator type `Matcher` that looks roughly like + +```ignore +mod intern_token { + extern crate regex as regex; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] + pub struct Token<'input>(pub usize, pub &'input str); + // ~~~~~~ ~~~~~~~~~~~ + // token token + // index text + // (type) + + impl<'a> fmt::Display for Token<'a> { ... } + + pub struct MatcherBuilder { + regex_set: regex::RegexSet, + regex_vec: Vec, + } + + impl MatcherBuilder { + fn new() -> MatchBuilder { ... } + fn matcher<'input, 'builder>(&'builder self, s: &'input str) -> Matcher<'input, 'builder> { ... } + } + + pub struct Matcher<'input, 'builder> { + text: &'input str, + consumed: usize, + regex_set: &'builder regex::RegexSet, + regex_vec: &'builder Vec, + } + + impl Matcher<'input> { + fn tokenize(&self, text: &str) -> Option<(usize, usize)> { ... } + } + + impl<'input> Iterator for Matcher<'input> { + type Item = Result<(usize, Token<'input>, usize), ParseError>; + // ~~~~~ ~~~~~~~~~~~~~ ~~~~~ + // start token end + } +} +``` + + */ + +use lexer::re; +use grammar::parse_tree::InternToken; +use grammar::repr::{Grammar, TerminalLiteral}; +use rust::RustWrite; +use std::io::{self, Write}; + +pub fn compile( + grammar: &Grammar, + intern_token: &InternToken, + out: &mut RustWrite, +) -> io::Result<()> { + let prefix = &grammar.prefix; + + rust!(out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(out, "mod {}intern_token {{", prefix); + rust!(out, "#![allow(unused_imports)]"); + try!(out.write_uses("", &grammar)); + rust!(out, "extern crate regex as {}regex;", prefix); + rust!(out, "use std::fmt as {}fmt;", prefix); + rust!(out, ""); + rust!( + out, + "#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]" + ); + rust!(out, "pub struct Token<'input>(pub usize, pub &'input str);"); + rust!(out, "impl<'a> {}fmt::Display for Token<'a> {{", prefix); + rust!( + out, + "fn fmt(&self, formatter: &mut {}fmt::Formatter) -> Result<(), {}fmt::Error> {{", + prefix, + prefix + ); + rust!(out, "{}fmt::Display::fmt(self.1, formatter)", prefix); + rust!(out, "}}"); + rust!(out, "}}"); + rust!(out, ""); + rust!(out, "pub struct {}MatcherBuilder {{", prefix); + rust!(out, "regex_set: {}regex::RegexSet,", prefix); + rust!(out, "regex_vec: Vec<{}regex::Regex>,", prefix); + rust!(out, "}}"); + rust!(out, ""); + rust!(out, "impl {}MatcherBuilder {{", prefix); + rust!(out, "pub fn new() -> {}MatcherBuilder {{", prefix); + + // create a vector of rust string literals with the text of each + // regular expression + let regex_strings: Vec = { + intern_token + .match_entries + .iter() + .map(|match_entry| match match_entry.match_literal { + TerminalLiteral::Quoted(ref s) => re::parse_literal(&s), + TerminalLiteral::Regex(ref s) => re::parse_regex(&s).unwrap(), + }) + .map(|regex| { + // make sure all regex are anchored at the beginning of the input + format!("^({})", regex) + }) + .map(|regex_str| { + // create a rust string with text of the regex; the Debug impl + // will add quotes and escape + format!("{:?}", regex_str) + }) + .collect() + }; + + rust!(out, "let {}strs: &[&str] = &[", prefix); + for literal in ®ex_strings { + rust!(out, "{},", literal); + } + rust!(out, "];"); + rust!( + out, + "let {}regex_set = {}regex::RegexSet::new({}strs).unwrap();", + prefix, + prefix, + prefix + ); + + rust!(out, "let {}regex_vec = vec![", prefix); + for literal in ®ex_strings { + rust!(out, "{}regex::Regex::new({}).unwrap(),", prefix, literal); + } + rust!(out, "];"); + + rust!( + out, + "{0}MatcherBuilder {{ regex_set: {0}regex_set, regex_vec: {0}regex_vec }}", + prefix + ); + rust!(out, "}}"); // fn new() + rust!( + out, + "pub fn matcher<'input, 'builder>(&'builder self, s: &'input str) \ + -> {}Matcher<'input, 'builder> {{", + prefix + ); + rust!(out, "{}Matcher {{", prefix); + rust!(out, "text: s,"); + rust!(out, "consumed: 0,"); + rust!(out, "regex_set: &self.regex_set,"); + rust!(out, "regex_vec: &self.regex_vec,"); + rust!(out, "}}"); // struct literal + rust!(out, "}}"); // fn matcher() + rust!(out, "}}"); // impl MatcherBuilder + rust!(out, ""); + rust!(out, "pub struct {}Matcher<'input, 'builder> {{", prefix); + rust!(out, "text: &'input str,"); // remaining input + rust!(out, "consumed: usize,"); // number of chars consumed thus far + rust!(out, "regex_set: &'builder {}regex::RegexSet,", prefix); + rust!(out, "regex_vec: &'builder Vec<{}regex::Regex>,", prefix); + rust!(out, "}}"); + rust!(out, ""); + rust!( + out, + "impl<'input, 'builder> Iterator for {}Matcher<'input, 'builder> {{", + prefix + ); + rust!( + out, + "type Item = Result<(usize, Token<'input>, usize), \ + {}lalrpop_util::ParseError,{}>>;", + prefix, + grammar.types.error_type() + ); + rust!(out, ""); + rust!(out, "fn next(&mut self) -> Option {{"); + + // start by trimming whitespace from left + rust!(out, "let {}text = self.text.trim_left();", prefix); + rust!( + out, + "let {}whitespace = self.text.len() - {}text.len();", + prefix, + prefix + ); + rust!( + out, + "let {}start_offset = self.consumed + {}whitespace;", + prefix, + prefix + ); + + // if nothing left, return None + rust!(out, "if {}text.is_empty() {{", prefix); + rust!(out, "self.text = {}text;", prefix); + rust!(out, "self.consumed = {}start_offset;", prefix); + rust!(out, "None"); + rust!(out, "}} else {{"); + + // otherwise, use regex-set to find list of matching tokens + rust!( + out, + "let {}matches = self.regex_set.matches({}text);", + prefix, + prefix + ); + + // if nothing matched, return an error + rust!(out, "if !{}matches.matched_any() {{", prefix); + rust!( + out, + "Some(Err({}lalrpop_util::ParseError::InvalidToken {{", + prefix + ); + rust!(out, "location: {}start_offset,", prefix); + rust!(out, "}}))"); + rust!(out, "}} else {{"); + + // otherwise, have to find longest, highest-priority match. We have the literals + // sorted in order of increasing precedence, so we'll iterate over them one by one, + // checking if each one matches, and remembering the longest one. + rust!(out, "let mut {}longest_match = 0;", prefix); // length of longest match + rust!(out, "let mut {}index = 0;", prefix); // index of longest match + rust!( + out, + "for {}i in 0 .. {} {{", + prefix, + intern_token.match_entries.len() + ); + rust!(out, "if {}matches.matched({}i) {{", prefix, prefix); + + // re-run the regex to find out how long this particular match + // was, then compare that against the longest-match so far. Note + // that the order of the tuple is carefully constructed to ensure + // that (a) we get the longest-match but (b) if two matches are + // equal, we get the largest index. This is because the indices + // are sorted in order of increasing priority, and because we know + // that indices of equal priority cannot both match (because of + // the DFA check). + rust!( + out, + "let {}match = self.regex_vec[{}i].find({}text).unwrap();", + prefix, + prefix, + prefix + ); + rust!(out, "let {}len = {}match.end();", prefix, prefix); + rust!(out, "if {}len >= {}longest_match {{", prefix, prefix); + rust!(out, "{}longest_match = {}len;", prefix, prefix); + rust!(out, "{}index = {}i;", prefix, prefix); + rust!(out, "}}"); // if is longest match + rust!(out, "}}"); // if matches.matched(i) + rust!(out, "}}"); // for loop + + // transform the result into the expected return value + rust!( + out, + "let {}result = &{}text[..{}longest_match];", + prefix, + prefix, + prefix + ); + rust!( + out, + "let {}remaining = &{}text[{}longest_match..];", + prefix, + prefix, + prefix + ); + rust!( + out, + "let {}end_offset = {}start_offset + {}longest_match;", + prefix, + prefix, + prefix + ); + rust!(out, "self.text = {}remaining;", prefix); + rust!(out, "self.consumed = {}end_offset;", prefix); + rust!( + out, + "Some(Ok(({}start_offset, Token({}index, {}result), {}end_offset)))", + prefix, + prefix, + prefix, + prefix + ); + + rust!(out, "}}"); // else + rust!(out, "}}"); // else + rust!(out, "}}"); // fn + rust!(out, "}}"); // impl + rust!(out, "}}"); // mod + Ok(()) +} diff --git a/third_party/rust/lalrpop/src/lexer/mod.rs b/third_party/rust/lalrpop/src/lexer/mod.rs index bda3c9399be8..176d57131977 100644 --- a/third_party/rust/lalrpop/src/lexer/mod.rs +++ b/third_party/rust/lalrpop/src/lexer/mod.rs @@ -1,8 +1,8 @@ -//! Code related to generating tokenizers. - -#![allow(dead_code)] // not yet fully activated - -pub mod dfa; -pub mod intern_token; -pub mod nfa; -pub mod re; +//! Code related to generating tokenizers. + +#![allow(dead_code)] // not yet fully activated + +pub mod dfa; +pub mod intern_token; +pub mod re; +pub mod nfa; diff --git a/third_party/rust/lalrpop/src/lexer/nfa/interpret.rs b/third_party/rust/lalrpop/src/lexer/nfa/interpret.rs index ac4f8decf5a8..7d22a741e896 100644 --- a/third_party/rust/lalrpop/src/lexer/nfa/interpret.rs +++ b/third_party/rust/lalrpop/src/lexer/nfa/interpret.rs @@ -1,72 +1,72 @@ -//! A depth-first interpreter for NFAs. - -use lexer::nfa::{NFAStateIndex, Noop, Other, StateKind, Test, NFA, START}; -use std::cmp::max; - -/// Interpret `nfa` applied to `test`, returning the longest matching -/// string that we can find (if any). -pub fn interpret<'text>(nfa: &NFA, text: &'text str) -> Option<&'text str> { - let mut longest: Option = None; - let mut stack: Vec<(NFAStateIndex, usize)> = vec![(START, 0)]; - - while let Some((state, offset)) = stack.pop() { - match nfa.kind(state) { - StateKind::Accept => match longest { - None => longest = Some(offset), - Some(o) => longest = Some(max(o, offset)), - }, - StateKind::Reject => { - // the rejection state is a dead-end - continue; - } - StateKind::Neither => {} - } - - // transition the no-op edges, to start - for edge in nfa.edges::(state) { - push(&mut stack, (edge.to, offset)); - } - - // check whether there is another character - let ch = match text[offset..].chars().next() { - Some(ch) => ch, // yep - None => { - continue; - } // nope - }; - - let offset1 = offset + ch.len_utf8(); - - // transition test edges - let mut tests = 0; - for edge in nfa.edges::(state) { - if edge.label.contains_char(ch) { - push(&mut stack, (edge.to, offset1)); - tests += 1; - } - } - - // should *never* match more than one test, because tests - // ought to be disjoint - assert!(tests <= 1); - - // if no tests passed, use the "Other" edge - if tests == 0 { - for edge in nfa.edges::(state) { - push(&mut stack, (edge.to, offset1)); - tests += 1; - } - - // should *never* have more than one "otherwise" edge - assert!(tests <= 1); - } - } - - longest.map(|offset| &text[..offset]) -} - -fn push(v: &mut Vec, t: T) { - if !v.contains(&t) { - v.push(t); - } -} +//! A depth-first interpreter for NFAs. + +use lexer::nfa::{NFAStateIndex, Noop, Other, StateKind, Test, NFA, START}; +use std::cmp::max; + +/// Interpret `nfa` applied to `test`, returning the longest matching +/// string that we can find (if any). +pub fn interpret<'text>(nfa: &NFA, text: &'text str) -> Option<&'text str> { + let mut longest: Option = None; + let mut stack: Vec<(NFAStateIndex, usize)> = vec![(START, 0)]; + + while let Some((state, offset)) = stack.pop() { + match nfa.kind(state) { + StateKind::Accept => match longest { + None => longest = Some(offset), + Some(o) => longest = Some(max(o, offset)), + }, + StateKind::Reject => { + // the rejection state is a dead-end + continue; + } + StateKind::Neither => {} + } + + // transition the no-op edges, to start + for edge in nfa.edges::(state) { + push(&mut stack, (edge.to, offset)); + } + + // check whether there is another character + let ch = match text[offset..].chars().next() { + Some(ch) => ch, // yep + None => { + continue; + } // nope + }; + + let offset1 = offset + ch.len_utf8(); + + // transition test edges + let mut tests = 0; + for edge in nfa.edges::(state) { + if edge.label.contains_char(ch) { + push(&mut stack, (edge.to, offset1)); + tests += 1; + } + } + + // should *never* match more than one test, because tests + // ought to be disjoint + assert!(tests <= 1); + + // if no tests passed, use the "Other" edge + if tests == 0 { + for edge in nfa.edges::(state) { + push(&mut stack, (edge.to, offset1)); + tests += 1; + } + + // should *never* have more than one "otherwise" edge + assert!(tests <= 1); + } + } + + longest.map(|offset| &text[..offset]) +} + +fn push(v: &mut Vec, t: T) { + if !v.contains(&t) { + v.push(t); + } +} diff --git a/third_party/rust/lalrpop/src/lexer/nfa/mod.rs b/third_party/rust/lalrpop/src/lexer/nfa/mod.rs index de239234f2e2..6aa87aecf500 100644 --- a/third_party/rust/lalrpop/src/lexer/nfa/mod.rs +++ b/third_party/rust/lalrpop/src/lexer/nfa/mod.rs @@ -1,589 +1,588 @@ -//! The NFA we construct for each regex. Since the states are not -//! really of interest, we represent this just as a vector of labeled -//! edges. - -use lexer::re::Regex; -use regex_syntax::hir::{ - Anchor, Class, ClassUnicodeRange, GroupKind, Hir, HirKind, Literal, RepetitionKind, - RepetitionRange, -}; -use std::char; -use std::fmt::{Debug, Error as FmtError, Formatter}; -use std::usize; - -#[cfg(test)] -mod interpret; - -#[cfg(test)] -mod test; - -#[derive(Debug)] -pub struct NFA { - states: Vec, - edges: Edges, -} - -/// An edge label representing a range of characters, inclusive. Note -/// that this range may contain some endpoints that are not valid -/// unicode, hence we store u32. -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Test { - pub start: u32, - pub end: u32, -} - -/// An "epsilon" edge -- no input -#[derive(Debug, PartialEq, Eq)] -pub struct Noop; - -/// An "other" edge -- fallback if no other edges apply -#[derive(Debug, PartialEq, Eq)] -pub struct Other; - -/// For each state, we just store the indices of the first char and -/// test edges, or usize::MAX if no such edge. You can then find all -/// edges by enumerating subsequent edges in the vectors until you -/// find one with a different `from` value. -#[derive(Debug)] -pub struct State { - kind: StateKind, - first_noop_edge: usize, - first_test_edge: usize, - first_other_edge: usize, -} - -#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum StateKind { - Accept, - Reject, - Neither, -} - -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct NFAStateIndex(usize); - -/// A set of edges for the state machine. Edges are kept sorted by the -/// type of label they have. Within a vector, all edges with the same -/// `from` are grouped together so they can be enumerated later (for -/// now we just ensure this during construction, but one could easily -/// sort). -#[derive(Debug)] -pub struct Edges { - noop_edges: Vec>, - - // edges where we are testing the character in some way; for any - // given state, there should not be multiple edges with the same - // test - test_edges: Vec>, - - // fallback rules if no test_edge applies - other_edges: Vec>, -} - -#[derive(PartialEq, Eq)] -pub struct Edge { - pub from: NFAStateIndex, - pub label: L, - pub to: NFAStateIndex, -} - -pub const ACCEPT: NFAStateIndex = NFAStateIndex(0); -pub const REJECT: NFAStateIndex = NFAStateIndex(1); -pub const START: NFAStateIndex = NFAStateIndex(2); - -#[derive(Debug, PartialEq, Eq)] -pub enum NFAConstructionError { - NamedCaptures, - NonGreedy, - WordBoundary, - LineBoundary, - TextBoundary, - ByteRegex, -} - -impl NFA { - pub fn from_re(regex: &Regex) -> Result { - let mut nfa = NFA::new(); - let s0 = nfa.expr(regex, ACCEPT, REJECT)?; - nfa.push_edge(START, Noop, s0); - Ok(nfa) - } - - /////////////////////////////////////////////////////////////////////////// - // Public methods for querying an NFA - - pub fn edges(&self, from: NFAStateIndex) -> EdgeIterator { - let vec = L::vec(&self.edges); - let first = *L::first(&self.states[from.0]); - EdgeIterator { - edges: vec, - from: from, - index: first, - } - } - - pub fn kind(&self, from: NFAStateIndex) -> StateKind { - self.states[from.0].kind - } - - pub fn is_accepting_state(&self, from: NFAStateIndex) -> bool { - self.states[from.0].kind == StateKind::Accept - } - - pub fn is_rejecting_state(&self, from: NFAStateIndex) -> bool { - self.states[from.0].kind == StateKind::Reject - } - - /////////////////////////////////////////////////////////////////////////// - // Private methods for building an NFA - - fn new() -> NFA { - let mut nfa = NFA { - states: vec![], - edges: Edges { - noop_edges: vec![], - test_edges: vec![], - other_edges: vec![], - }, - }; - - // reserve the ACCEPT, REJECT, and START states ahead of time - assert!(nfa.new_state(StateKind::Accept) == ACCEPT); - assert!(nfa.new_state(StateKind::Reject) == REJECT); - assert!(nfa.new_state(StateKind::Neither) == START); - - // the ACCEPT state, given another token, becomes a REJECT - nfa.push_edge(ACCEPT, Other, REJECT); - - // the REJECT state loops back to itself no matter what - nfa.push_edge(REJECT, Other, REJECT); - - nfa - } - - fn new_state(&mut self, kind: StateKind) -> NFAStateIndex { - let index = self.states.len(); - - // these edge indices will be patched later by patch_edges() - self.states.push(State { - kind: kind, - first_noop_edge: usize::MAX, - first_test_edge: usize::MAX, - first_other_edge: usize::MAX, - }); - - NFAStateIndex(index) - } - - // pushes an edge: note that all outgoing edges from a particular - // state should be pushed together, so that the edge vectors are - // suitably sorted - fn push_edge(&mut self, from: NFAStateIndex, label: L, to: NFAStateIndex) { - let edge_vec = L::vec_mut(&mut self.edges); - let edge_index = edge_vec.len(); - edge_vec.push(Edge { - from: from, - label: label, - to: to, - }); - - // if this is the first edge from the `from` state, set the - // index - let first_index = L::first_mut(&mut self.states[from.0]); - if *first_index == usize::MAX { - *first_index = edge_index; - } else { - // otherwise, check that all edges are continuous - assert_eq!(edge_vec[edge_index - 1].from, from); - } - } - - fn expr( - &mut self, - expr: &Hir, - accept: NFAStateIndex, - reject: NFAStateIndex, - ) -> Result { - match *expr.kind() { - HirKind::Empty => Ok(accept), - - HirKind::Literal(ref l) => { - match *l { - // [s0] -otherwise-> [accept] - Literal::Unicode(c) => { - let s0 = self.new_state(StateKind::Neither); - self.push_edge(s0, Test::char(c), accept); - self.push_edge(s0, Other, reject); - Ok(s0) - } - //Bytes are not supported - Literal::Byte(_) => Err(NFAConstructionError::ByteRegex), - } - } - - HirKind::Class(ref class) => { - match *class { - Class::Unicode(ref uc) => - // [s0] --c0--> [accept] - // | | ^ - // | | ... | - // | | | - // | +---cn-------+ - // +---------------> [reject] - { - let s0 = self.new_state(StateKind::Neither); - for &range in uc.iter() { - let test: Test = range.into(); - self.push_edge(s0, test, accept); - } - self.push_edge(s0, Other, reject); - Ok(s0) - } - //Bytes are not supported - Class::Bytes(_) => Err(NFAConstructionError::ByteRegex), - } - } - - // currently we don't support any boundaries because - // I was too lazy to code them up or think about them - HirKind::WordBoundary(_) => Err(NFAConstructionError::WordBoundary), - HirKind::Anchor(ref a) => match a { - &Anchor::StartLine | &Anchor::EndLine => Err(NFAConstructionError::LineBoundary), - &Anchor::StartText | &Anchor::EndText => Err(NFAConstructionError::TextBoundary), - }, - - // currently we treat all groups the same, whether they - // capture or not; but we don't permit named groups, - // in case we want to give them significance in the future - HirKind::Group(ref g) => match g.kind { - GroupKind::CaptureName { .. } => Err(NFAConstructionError::NamedCaptures), - GroupKind::CaptureIndex(_) | GroupKind::NonCapturing => { - self.expr(&g.hir, accept, reject) - } - }, - - HirKind::Repetition(ref r) => { - if !r.greedy { - // currently we always report the longest match possible - Err(NFAConstructionError::NonGreedy) - } else { - match r.kind { - RepetitionKind::ZeroOrOne => self.optional_expr(&r.hir, accept, reject), - RepetitionKind::ZeroOrMore => self.star_expr(&r.hir, accept, reject), - RepetitionKind::OneOrMore => self.plus_expr(&r.hir, accept, reject), - RepetitionKind::Range(ref range) => { - match *range { - RepetitionRange::Exactly(c) => { - let mut s = accept; - for _ in 0..c { - s = self.expr(&r.hir, s, reject)?; - } - Ok(s) - } - RepetitionRange::AtLeast(min) => { - // +---min times----+ - // | | - // - // [s0] --..e..-- [s1] --..e*..--> [accept] - // | | - // | v - // +-> [reject] - let mut s = self.star_expr(&r.hir, accept, reject)?; - for _ in 0..min { - s = self.expr(&r.hir, s, reject)?; - } - Ok(s) - } - RepetitionRange::Bounded(min, max) => { - let mut s = accept; - for _ in min..max { - s = self.optional_expr(&r.hir, s, reject)?; - } - for _ in 0..min { - s = self.expr(&r.hir, s, reject)?; - } - Ok(s) - } - } - } - } - } - } - - HirKind::Concat(ref exprs) => { - let mut s = accept; - for expr in exprs.iter().rev() { - s = self.expr(expr, s, reject)?; - } - Ok(s) - } - - HirKind::Alternation(ref exprs) => { - // [s0] --exprs[0]--> [accept/reject] - // | ^ - // | | - // +----exprs[..]------+ - // | | - // | | - // +----exprs[n-1]-----+ - - let s0 = self.new_state(StateKind::Neither); - let targets: Vec<_> = exprs - .iter() - .map(|expr| self.expr(expr, accept, reject)) - .collect::, _>>()?; - - // push edges from s0 all together so they are - // adjacant in the edge array - for target in targets { - self.push_edge(s0, Noop, target); - } - Ok(s0) - } - } - } - - fn optional_expr( - &mut self, - expr: &Hir, - accept: NFAStateIndex, - reject: NFAStateIndex, - ) -> Result { - // [s0] ----> [accept] - // | ^ - // v | - // [s1] --...----+ - // | - // v - // [reject] - - let s1 = try!(self.expr(expr, accept, reject)); - - let s0 = self.new_state(StateKind::Neither); - self.push_edge(s0, Noop, accept); // they might supply nothing - self.push_edge(s0, Noop, s1); - - Ok(s0) - } - - fn star_expr( - &mut self, - expr: &Hir, - accept: NFAStateIndex, - reject: NFAStateIndex, - ) -> Result { - // [s0] ----> [accept] - // | ^ - // | | - // | +----------+ - // v | - // [s1] --...----+ - // | - // v - // [reject] - - let s0 = self.new_state(StateKind::Neither); - - let s1 = try!(self.expr(expr, s0, reject)); - - self.push_edge(s0, Noop, accept); - self.push_edge(s0, Noop, s1); - - Ok(s0) - } - - fn plus_expr( - &mut self, - expr: &Hir, - accept: NFAStateIndex, - reject: NFAStateIndex, - ) -> Result { - // [accept] - // ^ - // | - // +----------+ - // v | - // [s0] --...--[s1] - // | - // v - // [reject] - - let s1 = self.new_state(StateKind::Neither); - - let s0 = try!(self.expr(expr, s1, reject)); - - self.push_edge(s1, Noop, accept); - self.push_edge(s1, Noop, s0); - - Ok(s0) - } -} - -pub trait EdgeLabel: Sized { - fn vec_mut(nfa: &mut Edges) -> &mut Vec>; - fn vec(nfa: &Edges) -> &Vec>; - fn first_mut(state: &mut State) -> &mut usize; - fn first(state: &State) -> &usize; -} - -impl EdgeLabel for Noop { - fn vec_mut(nfa: &mut Edges) -> &mut Vec> { - &mut nfa.noop_edges - } - fn first_mut(state: &mut State) -> &mut usize { - &mut state.first_noop_edge - } - fn vec(nfa: &Edges) -> &Vec> { - &nfa.noop_edges - } - fn first(state: &State) -> &usize { - &state.first_noop_edge - } -} - -impl EdgeLabel for Other { - fn vec_mut(nfa: &mut Edges) -> &mut Vec> { - &mut nfa.other_edges - } - fn first_mut(state: &mut State) -> &mut usize { - &mut state.first_other_edge - } - fn vec(nfa: &Edges) -> &Vec> { - &nfa.other_edges - } - fn first(state: &State) -> &usize { - &state.first_other_edge - } -} - -impl EdgeLabel for Test { - fn vec_mut(nfa: &mut Edges) -> &mut Vec> { - &mut nfa.test_edges - } - fn first_mut(state: &mut State) -> &mut usize { - &mut state.first_test_edge - } - fn vec(nfa: &Edges) -> &Vec> { - &nfa.test_edges - } - fn first(state: &State) -> &usize { - &state.first_test_edge - } -} - -pub struct EdgeIterator<'nfa, L: EdgeLabel + 'nfa> { - edges: &'nfa [Edge], - from: NFAStateIndex, - index: usize, -} - -impl<'nfa, L: EdgeLabel> Iterator for EdgeIterator<'nfa, L> { - type Item = &'nfa Edge; - - fn next(&mut self) -> Option<&'nfa Edge> { - let index = self.index; - if index == usize::MAX { - return None; - } - - let next_index = index + 1; - if next_index >= self.edges.len() || self.edges[next_index].from != self.from { - self.index = usize::MAX; - } else { - self.index = next_index; - } - - Some(&self.edges[index]) - } -} - -impl Test { - pub fn char(c: char) -> Test { - let c = c as u32; - Test { - start: c, - end: c + 1, - } - } - - pub fn inclusive_range(s: char, e: char) -> Test { - Test { - start: s as u32, - end: e as u32 + 1, - } - } - - pub fn exclusive_range(s: char, e: char) -> Test { - Test { - start: s as u32, - end: e as u32, - } - } - - pub fn is_char(self) -> bool { - self.len() == 1 - } - - pub fn len(self) -> u32 { - self.end - self.start - } - - pub fn contains_u32(self, c: u32) -> bool { - c >= self.start && c < self.end - } - - pub fn contains_char(self, c: char) -> bool { - self.contains_u32(c as u32) - } - - pub fn intersects(self, r: Test) -> bool { - !self.is_empty() - && !r.is_empty() - && (self.contains_u32(r.start) || r.contains_u32(self.start)) - } - - pub fn is_disjoint(self, r: Test) -> bool { - !self.intersects(r) - } - - pub fn is_empty(self) -> bool { - self.start == self.end - } -} - -impl From for Test { - fn from(range: ClassUnicodeRange) -> Test { - Test::inclusive_range(range.start(), range.end()) - } -} - -impl Debug for Test { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { - match (char::from_u32(self.start), char::from_u32(self.end)) { - (Some(start), Some(end)) => { - if self.is_char() { - if ".[]()?+*!".contains(start) { - write!(fmt, "\\{}", start) - } else { - write!(fmt, "{}", start) - } - } else { - write!(fmt, "[{:?}..{:?}]", start, end) - } - } - _ => write!(fmt, "[{:?}..{:?}]", self.start, self.end), - } - } -} - -impl Debug for NFAStateIndex { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { - write!(fmt, "NFA{}", self.0) - } -} - -impl Debug for Edge { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { - write!(fmt, "{:?} -{:?}-> {:?}", self.from, self.label, self.to) - } -} +//! The NFA we construct for each regex. Since the states are not +//! really of interest, we represent this just as a vector of labeled +//! edges. + +use lexer::re::Regex; +use regex_syntax::hir::{Anchor, Class, ClassUnicodeRange, GroupKind, Hir, HirKind, Literal, + RepetitionKind, RepetitionRange}; +use std::char; +use std::fmt::{Debug, Error as FmtError, Formatter}; +use std::usize; + +#[cfg(test)] +mod interpret; + +#[cfg(test)] +mod test; + +#[derive(Debug)] +pub struct NFA { + states: Vec, + edges: Edges, +} + +/// An edge label representing a range of characters, inclusive. Note +/// that this range may contain some endpoints that are not valid +/// unicode, hence we store u32. +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Test { + pub start: u32, + pub end: u32, +} + +/// An "epsilon" edge -- no input +#[derive(Debug, PartialEq, Eq)] +pub struct Noop; + +/// An "other" edge -- fallback if no other edges apply +#[derive(Debug, PartialEq, Eq)] +pub struct Other; + +/// For each state, we just store the indices of the first char and +/// test edges, or usize::MAX if no such edge. You can then find all +/// edges by enumerating subsequent edges in the vectors until you +/// find one with a different `from` value. +#[derive(Debug)] +pub struct State { + kind: StateKind, + first_noop_edge: usize, + first_test_edge: usize, + first_other_edge: usize, +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum StateKind { + Accept, + Reject, + Neither, +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NFAStateIndex(usize); + +/// A set of edges for the state machine. Edges are kept sorted by the +/// type of label they have. Within a vector, all edges with the same +/// `from` are grouped together so they can be enumerated later (for +/// now we just ensure this during construction, but one could easily +/// sort). +#[derive(Debug)] +pub struct Edges { + noop_edges: Vec>, + + // edges where we are testing the character in some way; for any + // given state, there should not be multiple edges with the same + // test + test_edges: Vec>, + + // fallback rules if no test_edge applies + other_edges: Vec>, +} + +#[derive(PartialEq, Eq)] +pub struct Edge { + pub from: NFAStateIndex, + pub label: L, + pub to: NFAStateIndex, +} + +pub const ACCEPT: NFAStateIndex = NFAStateIndex(0); +pub const REJECT: NFAStateIndex = NFAStateIndex(1); +pub const START: NFAStateIndex = NFAStateIndex(2); + +#[derive(Debug, PartialEq, Eq)] +pub enum NFAConstructionError { + NamedCaptures, + NonGreedy, + WordBoundary, + LineBoundary, + TextBoundary, + ByteRegex, +} + +impl NFA { + pub fn from_re(regex: &Regex) -> Result { + let mut nfa = NFA::new(); + let s0 = nfa.expr(regex, ACCEPT, REJECT)?; + nfa.push_edge(START, Noop, s0); + Ok(nfa) + } + + /////////////////////////////////////////////////////////////////////////// + // Public methods for querying an NFA + + pub fn edges(&self, from: NFAStateIndex) -> EdgeIterator { + let vec = L::vec(&self.edges); + let first = *L::first(&self.states[from.0]); + EdgeIterator { + edges: vec, + from: from, + index: first, + } + } + + pub fn kind(&self, from: NFAStateIndex) -> StateKind { + self.states[from.0].kind + } + + pub fn is_accepting_state(&self, from: NFAStateIndex) -> bool { + self.states[from.0].kind == StateKind::Accept + } + + pub fn is_rejecting_state(&self, from: NFAStateIndex) -> bool { + self.states[from.0].kind == StateKind::Reject + } + + /////////////////////////////////////////////////////////////////////////// + // Private methods for building an NFA + + fn new() -> NFA { + let mut nfa = NFA { + states: vec![], + edges: Edges { + noop_edges: vec![], + test_edges: vec![], + other_edges: vec![], + }, + }; + + // reserve the ACCEPT, REJECT, and START states ahead of time + assert!(nfa.new_state(StateKind::Accept) == ACCEPT); + assert!(nfa.new_state(StateKind::Reject) == REJECT); + assert!(nfa.new_state(StateKind::Neither) == START); + + // the ACCEPT state, given another token, becomes a REJECT + nfa.push_edge(ACCEPT, Other, REJECT); + + // the REJECT state loops back to itself no matter what + nfa.push_edge(REJECT, Other, REJECT); + + nfa + } + + fn new_state(&mut self, kind: StateKind) -> NFAStateIndex { + let index = self.states.len(); + + // these edge indices will be patched later by patch_edges() + self.states.push(State { + kind: kind, + first_noop_edge: usize::MAX, + first_test_edge: usize::MAX, + first_other_edge: usize::MAX, + }); + + NFAStateIndex(index) + } + + // pushes an edge: note that all outgoing edges from a particular + // state should be pushed together, so that the edge vectors are + // suitably sorted + fn push_edge(&mut self, from: NFAStateIndex, label: L, to: NFAStateIndex) { + let edge_vec = L::vec_mut(&mut self.edges); + let edge_index = edge_vec.len(); + edge_vec.push(Edge { + from: from, + label: label, + to: to, + }); + + // if this is the first edge from the `from` state, set the + // index + let first_index = L::first_mut(&mut self.states[from.0]); + if *first_index == usize::MAX { + *first_index = edge_index; + } else { + // otherwise, check that all edges are continuous + assert_eq!(edge_vec[edge_index - 1].from, from); + } + } + + fn expr( + &mut self, + expr: &Hir, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + match *expr.kind() { + HirKind::Empty => Ok(accept), + + HirKind::Literal(ref l) => { + match *l { + // [s0] -otherwise-> [accept] + Literal::Unicode(c) => { + let s0 = self.new_state(StateKind::Neither); + self.push_edge(s0, Test::char(c), accept); + self.push_edge(s0, Other, reject); + Ok(s0) + } + //Bytes are not supported + Literal::Byte(_) => Err(NFAConstructionError::ByteRegex), + } + } + + HirKind::Class(ref class) => { + match *class { + Class::Unicode(ref uc) => + // [s0] --c0--> [accept] + // | | ^ + // | | ... | + // | | | + // | +---cn-------+ + // +---------------> [reject] + { + let s0 = self.new_state(StateKind::Neither); + for &range in uc.iter() + { + let test: Test = range.into(); + self.push_edge(s0, test, accept); + } + self.push_edge(s0, Other, reject); + Ok(s0) + }, + //Bytes are not supported + Class::Bytes(_) => Err(NFAConstructionError::ByteRegex), + + } + } + + // currently we don't support any boundaries because + // I was too lazy to code them up or think about them + HirKind::WordBoundary(_) => Err(NFAConstructionError::WordBoundary), + HirKind::Anchor(ref a) => match a { + &Anchor::StartLine | &Anchor::EndLine => Err(NFAConstructionError::LineBoundary), + &Anchor::StartText | &Anchor::EndText => Err(NFAConstructionError::TextBoundary), + }, + + // currently we treat all groups the same, whether they + // capture or not; but we don't permit named groups, + // in case we want to give them significance in the future + HirKind::Group(ref g) => match g.kind { + GroupKind::CaptureName { .. } => Err(NFAConstructionError::NamedCaptures), + GroupKind::CaptureIndex(_) | GroupKind::NonCapturing => { + self.expr(&g.hir, accept, reject) + } + }, + + HirKind::Repetition(ref r) => { + if !r.greedy { + // currently we always report the longest match possible + Err(NFAConstructionError::NonGreedy) + } else { + match r.kind { + RepetitionKind::ZeroOrOne => self.optional_expr(&r.hir, accept, reject), + RepetitionKind::ZeroOrMore => self.star_expr(&r.hir, accept, reject), + RepetitionKind::OneOrMore => self.plus_expr(&r.hir, accept, reject), + RepetitionKind::Range(ref range) => { + match *range { + RepetitionRange::Exactly(c) => { + let mut s = accept; + for _ in 0..c { + s = self.expr(&r.hir, s, reject)?; + } + Ok(s) + } + RepetitionRange::AtLeast(min) => { + // +---min times----+ + // | | + // + // [s0] --..e..-- [s1] --..e*..--> [accept] + // | | + // | v + // +-> [reject] + let mut s = self.star_expr(&r.hir, accept, reject)?; + for _ in 0..min { + s = self.expr(&r.hir, s, reject)?; + } + Ok(s) + } + RepetitionRange::Bounded(min, max) => { + let mut s = accept; + for _ in min..max { + s = self.optional_expr(&r.hir, s, reject)?; + } + for _ in 0..min { + s = self.expr(&r.hir, s, reject)?; + } + Ok(s) + } + } + } + } + } + } + + HirKind::Concat(ref exprs) => { + let mut s = accept; + for expr in exprs.iter().rev() { + s = self.expr(expr, s, reject)?; + } + Ok(s) + } + + HirKind::Alternation(ref exprs) => { + // [s0] --exprs[0]--> [accept/reject] + // | ^ + // | | + // +----exprs[..]------+ + // | | + // | | + // +----exprs[n-1]-----+ + + let s0 = self.new_state(StateKind::Neither); + let targets: Vec<_> = exprs + .iter() + .map(|expr| self.expr(expr, accept, reject)) + .collect::, _>>()?; + + // push edges from s0 all together so they are + // adjacant in the edge array + for target in targets { + self.push_edge(s0, Noop, target); + } + Ok(s0) + } + } + } + + fn optional_expr( + &mut self, + expr: &Hir, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [s0] ----> [accept] + // | ^ + // v | + // [s1] --...----+ + // | + // v + // [reject] + + let s1 = try!(self.expr(expr, accept, reject)); + + let s0 = self.new_state(StateKind::Neither); + self.push_edge(s0, Noop, accept); // they might supply nothing + self.push_edge(s0, Noop, s1); + + Ok(s0) + } + + fn star_expr( + &mut self, + expr: &Hir, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [s0] ----> [accept] + // | ^ + // | | + // | +----------+ + // v | + // [s1] --...----+ + // | + // v + // [reject] + + let s0 = self.new_state(StateKind::Neither); + + let s1 = try!(self.expr(expr, s0, reject)); + + self.push_edge(s0, Noop, accept); + self.push_edge(s0, Noop, s1); + + Ok(s0) + } + + fn plus_expr( + &mut self, + expr: &Hir, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [accept] + // ^ + // | + // +----------+ + // v | + // [s0] --...--[s1] + // | + // v + // [reject] + + let s1 = self.new_state(StateKind::Neither); + + let s0 = try!(self.expr(expr, s1, reject)); + + self.push_edge(s1, Noop, accept); + self.push_edge(s1, Noop, s0); + + Ok(s0) + } +} + +pub trait EdgeLabel: Sized { + fn vec_mut(nfa: &mut Edges) -> &mut Vec>; + fn vec(nfa: &Edges) -> &Vec>; + fn first_mut(state: &mut State) -> &mut usize; + fn first(state: &State) -> &usize; +} + +impl EdgeLabel for Noop { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.noop_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_noop_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.noop_edges + } + fn first(state: &State) -> &usize { + &state.first_noop_edge + } +} + +impl EdgeLabel for Other { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.other_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_other_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.other_edges + } + fn first(state: &State) -> &usize { + &state.first_other_edge + } +} + +impl EdgeLabel for Test { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.test_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_test_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.test_edges + } + fn first(state: &State) -> &usize { + &state.first_test_edge + } +} + +pub struct EdgeIterator<'nfa, L: EdgeLabel + 'nfa> { + edges: &'nfa [Edge], + from: NFAStateIndex, + index: usize, +} + +impl<'nfa, L: EdgeLabel> Iterator for EdgeIterator<'nfa, L> { + type Item = &'nfa Edge; + + fn next(&mut self) -> Option<&'nfa Edge> { + let index = self.index; + if index == usize::MAX { + return None; + } + + let next_index = index + 1; + if next_index >= self.edges.len() || self.edges[next_index].from != self.from { + self.index = usize::MAX; + } else { + self.index = next_index; + } + + Some(&self.edges[index]) + } +} + +impl Test { + pub fn char(c: char) -> Test { + let c = c as u32; + Test { + start: c, + end: c + 1, + } + } + + pub fn inclusive_range(s: char, e: char) -> Test { + Test { + start: s as u32, + end: e as u32 + 1, + } + } + + pub fn exclusive_range(s: char, e: char) -> Test { + Test { + start: s as u32, + end: e as u32, + } + } + + pub fn is_char(self) -> bool { + self.len() == 1 + } + + pub fn len(self) -> u32 { + self.end - self.start + } + + pub fn contains_u32(self, c: u32) -> bool { + c >= self.start && c < self.end + } + + pub fn contains_char(self, c: char) -> bool { + self.contains_u32(c as u32) + } + + pub fn intersects(self, r: Test) -> bool { + !self.is_empty() && !r.is_empty() + && (self.contains_u32(r.start) || r.contains_u32(self.start)) + } + + pub fn is_disjoint(self, r: Test) -> bool { + !self.intersects(r) + } + + pub fn is_empty(self) -> bool { + self.start == self.end + } +} + +impl From for Test { + fn from(range: ClassUnicodeRange) -> Test { + Test::inclusive_range(range.start(), range.end()) + } +} + +impl Debug for Test { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + match (char::from_u32(self.start), char::from_u32(self.end)) { + (Some(start), Some(end)) => { + if self.is_char() { + if ".[]()?+*!".contains(start) { + write!(fmt, "\\{}", start) + } else { + write!(fmt, "{}", start) + } + } else { + write!(fmt, "[{:?}..{:?}]", start, end) + } + } + _ => write!(fmt, "[{:?}..{:?}]", self.start, self.end), + } + } +} + +impl Debug for NFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + write!(fmt, "NFA{}", self.0) + } +} + +impl Debug for Edge { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + write!(fmt, "{:?} -{:?}-> {:?}", self.from, self.label, self.to) + } +} diff --git a/third_party/rust/lalrpop/src/lexer/nfa/test.rs b/third_party/rust/lalrpop/src/lexer/nfa/test.rs index 11bf08e6ddd5..f13dc8674770 100644 --- a/third_party/rust/lalrpop/src/lexer/nfa/test.rs +++ b/third_party/rust/lalrpop/src/lexer/nfa/test.rs @@ -1,159 +1,159 @@ -use lexer::nfa::interpret::interpret; -use lexer::nfa::{NFAConstructionError, Noop, Other, StateKind, Test, NFA}; -use lexer::re; - -#[test] -fn edge_iter() { - let mut nfa = NFA::new(); - let s0 = nfa.new_state(StateKind::Neither); - let s1 = nfa.new_state(StateKind::Neither); - let s2 = nfa.new_state(StateKind::Neither); - let s3 = nfa.new_state(StateKind::Neither); - - nfa.push_edge(s2, Noop, s3); - nfa.push_edge(s0, Noop, s1); - nfa.push_edge(s0, Noop, s3); - nfa.push_edge(s1, Noop, s2); - - // check that if we mixed up the indies between Noop/Other, we'd get wrong thing here - nfa.push_edge(s0, Other, s2); - - let s0_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); - let s1_edges: Vec<_> = nfa.edges::(s1).map(|e| e.to).collect(); - let s2_edges: Vec<_> = nfa.edges::(s2).map(|e| e.to).collect(); - let s3_edges: Vec<_> = nfa.edges::(s3).map(|e| e.to).collect(); - - let s0_other_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); - let s0_test_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); - - assert_eq!(s0_edges, &[s1, s3]); - assert_eq!(s1_edges, &[s2]); - assert_eq!(s2_edges, &[s3]); - assert_eq!(s3_edges, &[]); - - assert_eq!(s0_other_edges, &[s2]); - assert_eq!(s0_test_edges, &[]); -} - -#[test] -fn identifier_regex() { - let ident = re::parse_regex(r#"[a-zA-Z_][a-zA-Z0-9_]*"#).unwrap(); - println!("{:#?}", ident); - let nfa = NFA::from_re(&ident).unwrap(); - println!("{:#?}", nfa); - assert_eq!(interpret(&nfa, "0123"), None); - assert_eq!(interpret(&nfa, "hello0123"), Some("hello0123")); - assert_eq!(interpret(&nfa, "hello0123 abc"), Some("hello0123")); - assert_eq!(interpret(&nfa, "_0123 abc"), Some("_0123")); -} - -#[test] -fn regex_star_group() { - let ident = re::parse_regex(r#"(abc)*"#).unwrap(); - let nfa = NFA::from_re(&ident).unwrap(); - assert_eq!(interpret(&nfa, "abcabcabcab"), Some("abcabcabc")); -} - -#[test] -fn regex_number() { - let num = re::parse_regex(r#"[0-9]+"#).unwrap(); - let nfa = NFA::from_re(&num).unwrap(); - assert_eq!(interpret(&nfa, "123"), Some("123")); -} - -#[test] -fn dot_newline() { - let num = re::parse_regex(r#"."#).unwrap(); - let nfa = NFA::from_re(&num).unwrap(); - assert_eq!(interpret(&nfa, "\n"), None); -} - -#[test] -fn max_range() { - let num = re::parse_regex(r#"ab{2,4}"#).unwrap(); - let nfa = NFA::from_re(&num).unwrap(); - assert_eq!(interpret(&nfa, "a"), None); - assert_eq!(interpret(&nfa, "ab"), None); - assert_eq!(interpret(&nfa, "abb"), Some("abb")); - assert_eq!(interpret(&nfa, "abbb"), Some("abbb")); - assert_eq!(interpret(&nfa, "abbbb"), Some("abbbb")); - assert_eq!(interpret(&nfa, "abbbbb"), Some("abbbb")); - assert_eq!(interpret(&nfa, "ac"), None); -} - -#[test] -fn literal() { - let num = re::parse_regex(r#"(?i:aBCdeF)"#).unwrap(); - let nfa = NFA::from_re(&num).unwrap(); - assert_eq!(interpret(&nfa, "abcdef"), Some("abcdef")); - assert_eq!(interpret(&nfa, "AbcDEf"), Some("AbcDEf")); -} - -// Test that uses of disallowed features trigger errors -// during NFA construction: - -#[test] -fn captures() { - let num = re::parse_regex(r#"(aBCdeF)"#).unwrap(); - NFA::from_re(&num).unwrap(); // captures are ok - - let num = re::parse_regex(r#"(?:aBCdeF)"#).unwrap(); - NFA::from_re(&num).unwrap(); // non-captures are ok - - let num = re::parse_regex(r#"(?PaBCdeF)"#).unwrap(); // named captures are not - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::NamedCaptures - ); -} - -#[test] -fn line_boundaries() { - let num = re::parse_regex(r#"^aBCdeF"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::TextBoundary - ); - - let num = re::parse_regex(r#"aBCdeF$"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::TextBoundary - ); -} - -#[test] -fn text_boundaries() { - let num = re::parse_regex(r#"(?m)^aBCdeF"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::LineBoundary - ); - - let num = re::parse_regex(r#"(?m)aBCdeF$"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::LineBoundary - ); -} - -#[test] -fn word_boundaries() { - let num = re::parse_regex(r#"\baBCdeF"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::WordBoundary - ); - - let num = re::parse_regex(r#"aBCdeF\B"#).unwrap(); - assert_eq!( - NFA::from_re(&num).unwrap_err(), - NFAConstructionError::WordBoundary - ); -} - -#[test] -fn issue_101() { - let num = re::parse_regex(r#"(1|0?)"#).unwrap(); - NFA::from_re(&num).unwrap(); -} +use lexer::nfa::{NFAConstructionError, Noop, Other, StateKind, Test, NFA}; +use lexer::nfa::interpret::interpret; +use lexer::re; + +#[test] +fn edge_iter() { + let mut nfa = NFA::new(); + let s0 = nfa.new_state(StateKind::Neither); + let s1 = nfa.new_state(StateKind::Neither); + let s2 = nfa.new_state(StateKind::Neither); + let s3 = nfa.new_state(StateKind::Neither); + + nfa.push_edge(s2, Noop, s3); + nfa.push_edge(s0, Noop, s1); + nfa.push_edge(s0, Noop, s3); + nfa.push_edge(s1, Noop, s2); + + // check that if we mixed up the indies between Noop/Other, we'd get wrong thing here + nfa.push_edge(s0, Other, s2); + + let s0_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + let s1_edges: Vec<_> = nfa.edges::(s1).map(|e| e.to).collect(); + let s2_edges: Vec<_> = nfa.edges::(s2).map(|e| e.to).collect(); + let s3_edges: Vec<_> = nfa.edges::(s3).map(|e| e.to).collect(); + + let s0_other_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + let s0_test_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + + assert_eq!(s0_edges, &[s1, s3]); + assert_eq!(s1_edges, &[s2]); + assert_eq!(s2_edges, &[s3]); + assert_eq!(s3_edges, &[]); + + assert_eq!(s0_other_edges, &[s2]); + assert_eq!(s0_test_edges, &[]); +} + +#[test] +fn identifier_regex() { + let ident = re::parse_regex(r#"[a-zA-Z_][a-zA-Z0-9_]*"#).unwrap(); + println!("{:#?}", ident); + let nfa = NFA::from_re(&ident).unwrap(); + println!("{:#?}", nfa); + assert_eq!(interpret(&nfa, "0123"), None); + assert_eq!(interpret(&nfa, "hello0123"), Some("hello0123")); + assert_eq!(interpret(&nfa, "hello0123 abc"), Some("hello0123")); + assert_eq!(interpret(&nfa, "_0123 abc"), Some("_0123")); +} + +#[test] +fn regex_star_group() { + let ident = re::parse_regex(r#"(abc)*"#).unwrap(); + let nfa = NFA::from_re(&ident).unwrap(); + assert_eq!(interpret(&nfa, "abcabcabcab"), Some("abcabcabc")); +} + +#[test] +fn regex_number() { + let num = re::parse_regex(r#"[0-9]+"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "123"), Some("123")); +} + +#[test] +fn dot_newline() { + let num = re::parse_regex(r#"."#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "\n"), None); +} + +#[test] +fn max_range() { + let num = re::parse_regex(r#"ab{2,4}"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "a"), None); + assert_eq!(interpret(&nfa, "ab"), None); + assert_eq!(interpret(&nfa, "abb"), Some("abb")); + assert_eq!(interpret(&nfa, "abbb"), Some("abbb")); + assert_eq!(interpret(&nfa, "abbbb"), Some("abbbb")); + assert_eq!(interpret(&nfa, "abbbbb"), Some("abbbb")); + assert_eq!(interpret(&nfa, "ac"), None); +} + +#[test] +fn literal() { + let num = re::parse_regex(r#"(?i:aBCdeF)"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "abcdef"), Some("abcdef")); + assert_eq!(interpret(&nfa, "AbcDEf"), Some("AbcDEf")); +} + +// Test that uses of disallowed features trigger errors +// during NFA construction: + +#[test] +fn captures() { + let num = re::parse_regex(r#"(aBCdeF)"#).unwrap(); + NFA::from_re(&num).unwrap(); // captures are ok + + let num = re::parse_regex(r#"(?:aBCdeF)"#).unwrap(); + NFA::from_re(&num).unwrap(); // non-captures are ok + + let num = re::parse_regex(r#"(?PaBCdeF)"#).unwrap(); // named captures are not + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::NamedCaptures + ); +} + +#[test] +fn line_boundaries() { + let num = re::parse_regex(r#"^aBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::TextBoundary + ); + + let num = re::parse_regex(r#"aBCdeF$"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::TextBoundary + ); +} + +#[test] +fn text_boundaries() { + let num = re::parse_regex(r#"(?m)^aBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::LineBoundary + ); + + let num = re::parse_regex(r#"(?m)aBCdeF$"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::LineBoundary + ); +} + +#[test] +fn word_boundaries() { + let num = re::parse_regex(r#"\baBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::WordBoundary + ); + + let num = re::parse_regex(r#"aBCdeF\B"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::WordBoundary + ); +} + +#[test] +fn issue_101() { + let num = re::parse_regex(r#"(1|0?)"#).unwrap(); + NFA::from_re(&num).unwrap(); +} diff --git a/third_party/rust/lalrpop/src/lexer/re/mod.rs b/third_party/rust/lalrpop/src/lexer/re/mod.rs index 62ca2866d7db..273802c2bcfc 100644 --- a/third_party/rust/lalrpop/src/lexer/re/mod.rs +++ b/third_party/rust/lalrpop/src/lexer/re/mod.rs @@ -1,24 +1,24 @@ -//! A parser and representation of regular expressions. - -use regex_syntax::hir::Hir; -use regex_syntax::{self, Error, Parser}; - -#[cfg(test)] -mod test; - -pub type Regex = Hir; -pub type RegexError = Error; - -/// Convert a string literal into a parsed regular expression. -pub fn parse_literal(s: &str) -> Regex { - match parse_regex(®ex_syntax::escape(s)) { - Ok(v) => v, - Err(_) => panic!("failed to parse literal regular expression"), - } -} - -/// Parse a regular expression like `a+` etc. -pub fn parse_regex(s: &str) -> Result { - let expr = Parser::new().parse(s)?; - Ok(expr) -} +//! A parser and representation of regular expressions. + +use regex_syntax::{self, Error, Parser}; +use regex_syntax::hir::Hir; + +#[cfg(test)] +mod test; + +pub type Regex = Hir; +pub type RegexError = Error; + +/// Convert a string literal into a parsed regular expression. +pub fn parse_literal(s: &str) -> Regex { + match parse_regex(®ex_syntax::escape(s)) { + Ok(v) => v, + Err(_) => panic!("failed to parse literal regular expression"), + } +} + +/// Parse a regular expression like `a+` etc. +pub fn parse_regex(s: &str) -> Result { + let expr = Parser::new().parse(s)?; + Ok(expr) +} diff --git a/third_party/rust/lalrpop/src/lexer/re/test.rs b/third_party/rust/lalrpop/src/lexer/re/test.rs index ccb3454eff0a..5c416dc2570e 100644 --- a/third_party/rust/lalrpop/src/lexer/re/test.rs +++ b/third_party/rust/lalrpop/src/lexer/re/test.rs @@ -1,11 +1,11 @@ -use super::*; - -#[test] -fn parse_unclosed_group() { - parse_regex(r"(123").unwrap_err(); -} - -#[test] -fn alt_oom() { - parse_regex(r"(%%|[^%])+").unwrap(); -} +use super::*; + +#[test] +fn parse_unclosed_group() { + parse_regex(r"(123").unwrap_err(); +} + +#[test] +fn alt_oom() { + parse_regex(r"(%%|[^%])+").unwrap(); +} diff --git a/third_party/rust/lalrpop/src/lib.rs b/third_party/rust/lalrpop/src/lib.rs index 6d783d65fe38..12f437f87ccd 100644 --- a/third_party/rust/lalrpop/src/lib.rs +++ b/third_party/rust/lalrpop/src/lib.rs @@ -1,58 +1,57 @@ -// Need this for rusty_peg -#![recursion_limit = "256"] -// I hate this lint. -#![allow(unused_parens)] -// The builtin tests don't cover the CLI and so forth, and it's just -// too darn annoying to try and make them do so. -#![cfg_attr(test, allow(dead_code))] - -extern crate ascii_canvas; -extern crate atty; -extern crate bit_set; -extern crate diff; -extern crate ena; -extern crate itertools; -#[cfg_attr(any(feature = "test", test), macro_use)] -extern crate lalrpop_util; -extern crate petgraph; -extern crate regex; -extern crate regex_syntax; -extern crate sha2; -extern crate string_cache; -extern crate term; -extern crate unicode_xid; - -#[cfg(test)] -extern crate rand; - -// hoist the modules that define macros up earlier -#[macro_use] -mod rust; -#[macro_use] -mod log; - -mod api; -mod build; -mod collections; -mod file_text; -mod grammar; -mod kernel_set; -mod lexer; -mod lr1; -mod message; -mod normalize; -mod parser; -mod session; -mod tls; -mod tok; -mod util; - -#[cfg(test)] -mod generate; -#[cfg(test)] -mod test_util; - -pub use api::process_root; -pub use api::process_root_unconditionally; -pub use api::Configuration; -use ascii_canvas::style; +// Need this for rusty_peg +#![recursion_limit = "256"] +// I hate this lint. +#![allow(unused_parens)] +// The builtin tests don't cover the CLI and so forth, and it's just +// too darn annoying to try and make them do so. +#![cfg_attr(test, allow(dead_code))] + +extern crate ascii_canvas; +extern crate atty; +extern crate bit_set; +extern crate diff; +extern crate ena; +extern crate itertools; +extern crate lalrpop_util; +extern crate petgraph; +extern crate regex; +extern crate regex_syntax; +extern crate string_cache; +extern crate term; +extern crate unicode_xid; +extern crate sha2; + +#[cfg(test)] +extern crate rand; + +// hoist the modules that define macros up earlier +#[macro_use] +mod rust; +#[macro_use] +mod log; + +mod api; +mod build; +mod collections; +mod file_text; +mod grammar; +mod lexer; +mod lr1; +mod message; +mod normalize; +mod parser; +mod kernel_set; +mod session; +mod tls; +mod tok; +mod util; + +#[cfg(test)] +mod generate; +#[cfg(test)] +mod test_util; + +pub use api::Configuration; +pub use api::process_root; +pub use api::process_root_unconditionally; +use ascii_canvas::style; diff --git a/third_party/rust/lalrpop/src/log.rs b/third_party/rust/lalrpop/src/log.rs index 13dd05a70a64..9d60c8f756fe 100644 --- a/third_party/rust/lalrpop/src/log.rs +++ b/third_party/rust/lalrpop/src/log.rs @@ -1,67 +1,64 @@ -#[derive(Clone)] -pub struct Log { - level: Level, -} - -#[derive(Clone, PartialOrd, Ord, PartialEq, Eq)] -pub enum Level { - /// No updates unless an error arises. - Taciturn, - - /// Timing and minimal progress. - Informative, - - /// More details, but still stuff an end-user is likely to understand. - Verbose, - - /// Everything you could ever want and then some more. - Debug, -} - -impl Log { - pub fn new(level: Level) -> Log { - Log { level: level } - } - - pub fn set_level(&mut self, level: Level) { - self.level = level; - } - - pub fn log(&self, level: Level, message: M) - where - M: FnOnce() -> String, - { - if self.level >= level { - println!("{}", message()); - } - } -} - -macro_rules! log { - ($session:expr, $level:ident, $($args:expr),*) => { - $session.log(::log::Level::$level, || ::std::fmt::format(format_args!($($args),*))) - } -} - -macro_rules! debug { - ($($args:expr),*) => { - log!(::tls::Tls::session(), Debug, $($args),*) - } -} - -macro_rules! profile { - ($session:expr, $phase_name:expr, $action:expr) => {{ - log!($session, Verbose, "Phase `{}` begun", $phase_name); - let time_stamp = ::std::time::Instant::now(); - let result = $action; - let elapsed = time_stamp.elapsed(); - log!( - $session, - Verbose, - "Phase `{}` completed in {} seconds", - $phase_name, - elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1000_000_000.0 - ); - result - }}; -} +#[derive(Clone)] +pub struct Log { + level: Level, +} + +#[derive(Clone, PartialOrd, Ord, PartialEq, Eq)] +pub enum Level { + /// No updates unless an error arises. + Taciturn, + + /// Timing and minimal progress. + Informative, + + /// More details, but still stuff an end-user is likely to understand. + Verbose, + + /// Everything you could ever want and then some more. + Debug, +} + +impl Log { + pub fn new(level: Level) -> Log { + Log { level: level } + } + + pub fn set_level(&mut self, level: Level) { + self.level = level; + } + + pub fn log(&self, level: Level, message: M) + where + M: FnOnce() -> String, + { + if self.level >= level { + println!("{}", message()); + } + } +} + +macro_rules! log { + ($session:expr, $level:ident, $($args:expr),*) => { + $session.log(::log::Level::$level, || ::std::fmt::format(format_args!($($args),*))) + } +} + +macro_rules! debug { + ($($args:expr),*) => { + log!(::tls::Tls::session(), Debug, $($args),*) + } +} + +macro_rules! profile { + ($session:expr, $phase_name:expr, $action:expr) => { + { + log!($session, Verbose, "Phase `{}` begun", $phase_name); + let time_stamp = ::std::time::Instant::now(); + let result = $action; + let elapsed = time_stamp.elapsed(); + log!($session, Verbose, "Phase `{}` completed in {} seconds", + $phase_name, elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1000_000_000.0); + result + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/build/mod.rs b/third_party/rust/lalrpop/src/lr1/build/mod.rs index 9197d9b6382a..7d2cc0d8f552 100644 --- a/third_party/rust/lalrpop/src/lr1/build/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/build/mod.rs @@ -1,358 +1,357 @@ -//! LR(1) state construction algorithm. - -use collections::{map, Multimap}; -use grammar::repr::*; -use kernel_set; -use lr1::core::*; -use lr1::first; -use lr1::lane_table::*; -use lr1::lookahead::*; -use std::env; -use std::rc::Rc; -use tls::Tls; - -#[cfg(test)] -mod test; - -fn build_lr1_states_legacy<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> LR1Result<'grammar> { - let eof = TokenSet::eof(); - let mut lr1: LR<'grammar, TokenSet> = LR::new(grammar, start, eof); - lr1.set_permit_early_stop(true); - lr1.build_states() -} - -type ConstructionFunction<'grammar> = - fn(&'grammar Grammar, NonterminalString) -> LR1Result<'grammar>; - -pub fn use_lane_table() -> bool { - match env::var("LALRPOP_LANE_TABLE") { - Ok(ref s) => s != "disabled", - _ => true, - } -} - -pub fn build_lr1_states<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> LR1Result<'grammar> { - let (method_name, method_fn) = if use_lane_table() { - ("lane", build_lane_table_states as ConstructionFunction) - } else { - ("legacy", build_lr1_states_legacy as ConstructionFunction) - }; - - profile! { - &Tls::session(), - format!("LR(1) state construction ({})", method_name), - { - method_fn(grammar, start) - } - } -} - -pub fn build_lr0_states<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> Result>, LR0TableConstructionError<'grammar>> { - let lr1 = LR::new(grammar, start, Nil); - lr1.build_states() -} - -pub struct LR<'grammar, L: LookaheadBuild> { - grammar: &'grammar Grammar, - first_sets: first::FirstSets, - start_nt: NonterminalString, - start_lookahead: L, - permit_early_stop: bool, -} - -impl<'grammar, L: LookaheadBuild> LR<'grammar, L> { - fn new(grammar: &'grammar Grammar, start_nt: NonterminalString, start_lookahead: L) -> Self { - LR { - grammar: grammar, - first_sets: first::FirstSets::new(grammar), - start_nt: start_nt, - start_lookahead: start_lookahead, - permit_early_stop: false, - } - } - - fn set_permit_early_stop(&mut self, v: bool) { - self.permit_early_stop = v; - } - - fn build_states(&self) -> Result>, TableConstructionError<'grammar, L>> { - let session = Tls::session(); - let mut kernel_set = kernel_set::KernelSet::new(); - let mut states = vec![]; - let mut conflicts = vec![]; - - // create the starting state - kernel_set.add_state(Kernel::start(self.items( - &self.start_nt, - 0, - &self.start_lookahead, - ))); - - while let Some(Kernel { items: seed_items }) = kernel_set.next() { - let items = self.transitive_closure(seed_items); - let index = StateIndex(states.len()); - - if index.0 % 5000 == 0 && index.0 > 0 { - log!(session, Verbose, "{} states created so far.", index.0); - } - - let mut this_state = State { - index: index, - items: items.clone(), - shifts: map(), - reductions: vec![], - gotos: map(), - }; - - // group the items that we can transition into by shifting - // over a term or nonterm - let transitions: Multimap, L>> = items - .vec - .iter() - .filter_map(|item| item.shifted_item()) - .map( - |( - symbol, - Item { - production, - index, - lookahead, - }, - )| { (symbol, (Item::lr0(production, index), lookahead)) }, - ) - .collect(); - - for (symbol, shifted_items) in transitions.into_iter() { - let shifted_items: Vec> = shifted_items - .into_iter() - .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) - .collect(); - - // Not entirely obvious: if the original set of items - // is sorted to begin with (and it is), then this new - // set of shifted items is *also* sorted. This is - // because it is produced from the old items by simply - // incrementing the index by 1. - let next_state = kernel_set.add_state(Kernel::shifted(shifted_items)); - - match symbol { - Symbol::Terminal(s) => { - let prev = this_state.shifts.insert(s, next_state); - assert!(prev.is_none()); // cannot have a shift/shift conflict - } - - Symbol::Nonterminal(s) => { - let prev = this_state.gotos.insert(s, next_state); - assert!(prev.is_none()); - } - } - } - - // finally, consider the reductions - for item in items.vec.iter().filter(|i| i.can_reduce()) { - this_state - .reductions - .push((item.lookahead.clone(), item.production)); - } - - // check for shift-reduce conflicts (reduce-reduce detected above) - conflicts.extend(L::conflicts(&this_state)); - - // extract a new state - states.push(this_state); - - if self.permit_early_stop && session.stop_after(conflicts.len()) { - log!( - session, - Verbose, - "{} conflicts encountered, stopping.", - conflicts.len() - ); - break; - } - } - - if !conflicts.is_empty() { - Err(TableConstructionError { - states: states, - conflicts: conflicts, - }) - } else { - Ok(states) - } - } - - fn items(&self, id: &NonterminalString, index: usize, lookahead: &L) -> Vec> { - self.grammar - .productions_for(id) - .iter() - .map(|production| { - debug_assert!(index <= production.symbols.len()); - Item { - production: production, - index: index, - lookahead: lookahead.clone(), - } - }) - .collect() - } - - // expands `state` with epsilon moves - fn transitive_closure(&self, items: Vec>) -> Items<'grammar, L> { - let mut stack: Vec> = items.iter().map(|item| item.to_lr0()).collect(); - let mut map: Multimap, L> = items - .into_iter() - .map(|item| (item.to_lr0(), item.lookahead)) - .collect(); - - while let Some(item) = stack.pop() { - let lookahead = map.get(&item).unwrap().clone(); - - let shift_symbol = item.shift_symbol(); - - // Check whether this is an item where the cursor - // is resting on a non-terminal: - // - // I = ... (*) X z... [lookahead] - // - // The `nt` will be X and the `remainder` will be `z...`. - let (nt, remainder) = match shift_symbol { - None => continue, // requires a reduce - Some((Symbol::Terminal(_), _)) => { - continue; // requires a shift - } - Some((Symbol::Nonterminal(nt), remainder)) => (nt, remainder), - }; - - // In that case, for each production of `X`, we are also - // in a state where the cursor rests at the start of that production: - // - // X = (*) a... [lookahead'] - // X = (*) b... [lookahead'] - // - // Here `lookahead'` is computed based on the `remainder` and our - // `lookahead`. In LR1 at least, it is the union of: - // - // (a) FIRST(remainder) - // (b) if remainder may match epsilon, also our lookahead. - for new_item in L::epsilon_moves(self, &nt, remainder, &lookahead) { - let new_item0 = new_item.to_lr0(); - if map.push(new_item0, new_item.lookahead) { - stack.push(new_item0); - } - } - } - - let final_items = map - .into_iter() - .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) - .collect(); - - Items { - vec: Rc::new(final_items), - } - } -} - -/// Except for the initial state, the kernel sets always contain -/// a set of "seed" items where something has been pushed (that is, -/// index > 0). In other words, items like this: -/// -/// A = ...p (*) ... -/// -/// where ...p is non-empty. We now have to expand to include any -/// epsilon moves: -/// -/// A = ... (*) B ... -/// B = (*) ... // added by transitive_closure algorithm -/// -/// But note that the state is completely identified by its -/// kernel set: the same kernel sets always expand to the -/// same transitive closures, and different kernel sets -/// always expand to different transitive closures. The -/// first point is obvious, but the latter point follows -/// because the transitive closure algorithm only adds -/// items where `index == 0`, and hence it can never add an -/// item found in a kernel set. -#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -struct Kernel<'grammar, L: LookaheadBuild> { - items: Vec>, -} - -impl<'grammar, L: LookaheadBuild> Kernel<'grammar, L> { - pub fn start(items: Vec>) -> Kernel<'grammar, L> { - // In start state, kernel should have only items with `index == 0`. - debug_assert!(items.iter().all(|item| item.index == 0)); - Kernel { items: items } - } - - pub fn shifted(items: Vec>) -> Kernel<'grammar, L> { - // Assert that this kernel consists only of shifted items - // where `index > 0`. This assertion could cost real time to - // check so only do it in debug mode. - debug_assert!(items.iter().all(|item| item.index > 0)); - Kernel { items: items } - } -} - -impl<'grammar, L: LookaheadBuild> kernel_set::Kernel for Kernel<'grammar, L> { - type Index = StateIndex; - - fn index(c: usize) -> StateIndex { - StateIndex(c) - } -} - -pub trait LookaheadBuild: Lookahead { - // Given that there exists an item - // - // X = ... (*) Y ...s [L] - // - // where `nt` is `Y`, `remainder` is `...s`, and `lookahead` is - // `L`, computes the new items resulting from epsilon moves (if - // any). The technique of doing this will depend on the amount of - // lookahead. - // - // For example, if we have an LR0 item, then for each `Y = ...` - // production, we just add an `Y = (*) ...` item. But for LR1 - // items, we have to add multiple items where we consider the - // lookahead from `FIRST(...s, L)`. - fn epsilon_moves<'grammar>( - lr: &LR<'grammar, Self>, - nt: &NonterminalString, - remainder: &[Symbol], - lookahead: &Self, - ) -> Vec>; -} - -impl LookaheadBuild for Nil { - fn epsilon_moves<'grammar>( - lr: &LR<'grammar, Self>, - nt: &NonterminalString, - _remainder: &[Symbol], - lookahead: &Nil, - ) -> Vec> { - lr.items(nt, 0, &lookahead) - } -} - -impl LookaheadBuild for TokenSet { - fn epsilon_moves<'grammar>( - lr: &LR<'grammar, Self>, - nt: &NonterminalString, - remainder: &[Symbol], - lookahead: &Self, - ) -> Vec> { - let first_set = lr.first_sets.first1(remainder, lookahead); - lr.items(nt, 0, &first_set) - } -} +//! LR(1) state construction algorithm. + +use collections::{map, Multimap}; +use kernel_set; +use grammar::repr::*; +use lr1::core::*; +use lr1::first; +use lr1::lane_table::*; +use lr1::lookahead::*; +use std::rc::Rc; +use std::env; +use tls::Tls; + +#[cfg(test)] +mod test; + +fn build_lr1_states_legacy<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + let eof = TokenSet::eof(); + let mut lr1: LR<'grammar, TokenSet> = LR::new(grammar, start, eof); + lr1.set_permit_early_stop(true); + lr1.build_states() +} + +type ConstructionFunction<'grammar> = + fn(&'grammar Grammar, NonterminalString) -> LR1Result<'grammar>; + +pub fn use_lane_table() -> bool { + match env::var("LALRPOP_LANE_TABLE") { + Ok(ref s) => s != "disabled", + _ => true, + } +} + +pub fn build_lr1_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + let (method_name, method_fn) = if use_lane_table() { + ("lane", build_lane_table_states as ConstructionFunction) + } else { + ("legacy", build_lr1_states_legacy as ConstructionFunction) + }; + + profile! { + &Tls::session(), + format!("LR(1) state construction ({})", method_name), + { + method_fn(grammar, start) + } + } +} + +pub fn build_lr0_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> Result>, LR0TableConstructionError<'grammar>> { + let lr1 = LR::new(grammar, start, Nil); + lr1.build_states() +} + +pub struct LR<'grammar, L: LookaheadBuild> { + grammar: &'grammar Grammar, + first_sets: first::FirstSets, + start_nt: NonterminalString, + start_lookahead: L, + permit_early_stop: bool, +} + +impl<'grammar, L: LookaheadBuild> LR<'grammar, L> { + fn new(grammar: &'grammar Grammar, start_nt: NonterminalString, start_lookahead: L) -> Self { + LR { + grammar: grammar, + first_sets: first::FirstSets::new(grammar), + start_nt: start_nt, + start_lookahead: start_lookahead, + permit_early_stop: false, + } + } + + fn set_permit_early_stop(&mut self, v: bool) { + self.permit_early_stop = v; + } + + fn build_states(&self) -> Result>, TableConstructionError<'grammar, L>> { + let session = Tls::session(); + let mut kernel_set = kernel_set::KernelSet::new(); + let mut states = vec![]; + let mut conflicts = vec![]; + + // create the starting state + kernel_set.add_state(Kernel::start(self.items( + &self.start_nt, + 0, + &self.start_lookahead, + ))); + + while let Some(Kernel { items: seed_items }) = kernel_set.next() { + let items = self.transitive_closure(seed_items); + let index = StateIndex(states.len()); + + if index.0 % 5000 == 0 && index.0 > 0 { + log!(session, Verbose, "{} states created so far.", index.0); + } + + let mut this_state = State { + index: index, + items: items.clone(), + shifts: map(), + reductions: vec![], + gotos: map(), + }; + + // group the items that we can transition into by shifting + // over a term or nonterm + let transitions: Multimap, L>> = items + .vec + .iter() + .filter_map(|item| item.shifted_item()) + .map( + |( + symbol, + Item { + production, + index, + lookahead, + }, + )| { (symbol, (Item::lr0(production, index), lookahead)) }, + ) + .collect(); + + for (symbol, shifted_items) in transitions.into_iter() { + let shifted_items: Vec> = shifted_items + .into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + + // Not entirely obvious: if the original set of items + // is sorted to begin with (and it is), then this new + // set of shifted items is *also* sorted. This is + // because it is produced from the old items by simply + // incrementing the index by 1. + let next_state = kernel_set.add_state(Kernel::shifted(shifted_items)); + + match symbol { + Symbol::Terminal(s) => { + let prev = this_state.shifts.insert(s, next_state); + assert!(prev.is_none()); // cannot have a shift/shift conflict + } + + Symbol::Nonterminal(s) => { + let prev = this_state.gotos.insert(s, next_state); + assert!(prev.is_none()); + } + } + } + + // finally, consider the reductions + for item in items.vec.iter().filter(|i| i.can_reduce()) { + this_state + .reductions + .push((item.lookahead.clone(), item.production)); + } + + // check for shift-reduce conflicts (reduce-reduce detected above) + conflicts.extend(L::conflicts(&this_state)); + + // extract a new state + states.push(this_state); + + if self.permit_early_stop && session.stop_after(conflicts.len()) { + log!( + session, + Verbose, + "{} conflicts encountered, stopping.", + conflicts.len() + ); + break; + } + } + + if !conflicts.is_empty() { + Err(TableConstructionError { + states: states, + conflicts: conflicts, + }) + } else { + Ok(states) + } + } + + fn items(&self, id: &NonterminalString, index: usize, lookahead: &L) -> Vec> { + self.grammar + .productions_for(id) + .iter() + .map(|production| { + debug_assert!(index <= production.symbols.len()); + Item { + production: production, + index: index, + lookahead: lookahead.clone(), + } + }) + .collect() + } + + // expands `state` with epsilon moves + fn transitive_closure(&self, items: Vec>) -> Items<'grammar, L> { + let mut stack: Vec> = items.iter().map(|item| item.to_lr0()).collect(); + let mut map: Multimap, L> = items + .into_iter() + .map(|item| (item.to_lr0(), item.lookahead)) + .collect(); + + while let Some(item) = stack.pop() { + let lookahead = map.get(&item).unwrap().clone(); + + let shift_symbol = item.shift_symbol(); + + // Check whether this is an item where the cursor + // is resting on a non-terminal: + // + // I = ... (*) X z... [lookahead] + // + // The `nt` will be X and the `remainder` will be `z...`. + let (nt, remainder) = match shift_symbol { + None => continue, // requires a reduce + Some((Symbol::Terminal(_), _)) => { + continue; // requires a shift + } + Some((Symbol::Nonterminal(nt), remainder)) => (nt, remainder), + }; + + // In that case, for each production of `X`, we are also + // in a state where the cursor rests at the start of that production: + // + // X = (*) a... [lookahead'] + // X = (*) b... [lookahead'] + // + // Here `lookahead'` is computed based on the `remainder` and our + // `lookahead`. In LR1 at least, it is the union of: + // + // (a) FIRST(remainder) + // (b) if remainder may match epsilon, also our lookahead. + for new_item in L::epsilon_moves(self, &nt, remainder, &lookahead) { + let new_item0 = new_item.to_lr0(); + if map.push(new_item0, new_item.lookahead) { + stack.push(new_item0); + } + } + } + + let final_items = map.into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + + Items { + vec: Rc::new(final_items), + } + } +} + +/// Except for the initial state, the kernel sets always contain +/// a set of "seed" items where something has been pushed (that is, +/// index > 0). In other words, items like this: +/// +/// A = ...p (*) ... +/// +/// where ...p is non-empty. We now have to expand to include any +/// epsilon moves: +/// +/// A = ... (*) B ... +/// B = (*) ... // added by transitive_closure algorithm +/// +/// But note that the state is completely identified by its +/// kernel set: the same kernel sets always expand to the +/// same transitive closures, and different kernel sets +/// always expand to different transitive closures. The +/// first point is obvious, but the latter point follows +/// because the transitive closure algorithm only adds +/// items where `index == 0`, and hence it can never add an +/// item found in a kernel set. +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct Kernel<'grammar, L: LookaheadBuild> { + items: Vec>, +} + +impl<'grammar, L: LookaheadBuild> Kernel<'grammar, L> { + pub fn start(items: Vec>) -> Kernel<'grammar, L> { + // In start state, kernel should have only items with `index == 0`. + debug_assert!(items.iter().all(|item| item.index == 0)); + Kernel { items: items } + } + + pub fn shifted(items: Vec>) -> Kernel<'grammar, L> { + // Assert that this kernel consists only of shifted items + // where `index > 0`. This assertion could cost real time to + // check so only do it in debug mode. + debug_assert!(items.iter().all(|item| item.index > 0)); + Kernel { items: items } + } +} + +impl<'grammar, L: LookaheadBuild> kernel_set::Kernel for Kernel<'grammar, L> { + type Index = StateIndex; + + fn index(c: usize) -> StateIndex { + StateIndex(c) + } +} + +pub trait LookaheadBuild: Lookahead { + // Given that there exists an item + // + // X = ... (*) Y ...s [L] + // + // where `nt` is `Y`, `remainder` is `...s`, and `lookahead` is + // `L`, computes the new items resulting from epsilon moves (if + // any). The technique of doing this will depend on the amount of + // lookahead. + // + // For example, if we have an LR0 item, then for each `Y = ...` + // production, we just add an `Y = (*) ...` item. But for LR1 + // items, we have to add multiple items where we consider the + // lookahead from `FIRST(...s, L)`. + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + remainder: &[Symbol], + lookahead: &Self, + ) -> Vec>; +} + +impl LookaheadBuild for Nil { + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + _remainder: &[Symbol], + lookahead: &Nil, + ) -> Vec> { + lr.items(nt, 0, &lookahead) + } +} + +impl LookaheadBuild for TokenSet { + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + remainder: &[Symbol], + lookahead: &Self, + ) -> Vec> { + let first_set = lr.first_sets.first1(remainder, lookahead); + lr.items(nt, 0, &first_set) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/build/test.rs b/third_party/rust/lalrpop/src/lr1/build/test.rs index ad05eecb35b7..4e3a6cfd7904 100644 --- a/third_party/rust/lalrpop/src/lr1/build/test.rs +++ b/third_party/rust/lalrpop/src/lr1/build/test.rs @@ -1,354 +1,354 @@ -use generate; -use grammar::repr::*; -use lr1::core::*; -use lr1::interpret::interpret; -use lr1::lookahead::Token; -use lr1::lookahead::Token::EOF; -use lr1::lookahead::TokenSet; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::{compare, expect_debug, normalized_grammar}; -use tls::Tls; - -use super::{build_lr0_states, build_lr1_states, use_lane_table, LR}; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -const ITERATIONS: usize = 22; - -fn random_test<'g>(grammar: &Grammar, states: &'g [LR1State<'g>], start_symbol: NonterminalString) { - for i in 0..ITERATIONS { - let input_tree = generate::random_parse_tree(grammar, start_symbol.clone()); - let output_tree = interpret(&states, input_tree.terminals()).unwrap(); - - println!("test {}", i); - println!("input_tree = {}", input_tree); - println!("output_tree = {}", output_tree); - - compare(output_tree, input_tree); - } -} - -macro_rules! tokens { - ($($x:expr),*) => { - vec![$(TerminalString::quoted(Atom::from($x))),*] - } -} - -fn items<'g>(grammar: &'g Grammar, nonterminal: &str, index: usize, la: Token) -> LR1Items<'g> { - let set = TokenSet::from(la); - let lr1: LR = LR::new(&grammar, nt(nonterminal), set.clone()); - let items = lr1.transitive_closure(lr1.items(&nt(nonterminal), index, &set)); - items -} - -#[test] -fn start_state() { - let grammar = normalized_grammar( - r#" -grammar; - extern { enum Tok { "C" => .., "D" => .. } } - A = B "C"; - B: Option = { - "D" => Some(1), - () => None - }; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let items = items(&grammar, "A", 0, EOF); - expect_debug( - items.vec, - r#"[ - A = (*) B "C" [EOF], - B = (*) ["C"], - B = (*) "D" ["C"] -]"#, - ); -} - -#[test] -fn start_state_1() { - let grammar = normalized_grammar( - r#" -grammar; -extern { enum Tok { "B1" => .., "C1" => .. } } -A = B C; -B: Option = { - "B1" => Some(1), - () => None -}; -C: Option = { - "C1" => Some(1), - () => None -}; -"#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - expect_debug( - items(&grammar, "A", 0, EOF).vec, - r#"[ - A = (*) B C [EOF], - B = (*) ["C1", EOF], - B = (*) "B1" ["C1", EOF] -]"#, - ); - - expect_debug( - items(&grammar, "A", 1, EOF).vec, - r#"[ - A = B (*) C [EOF], - C = (*) [EOF], - C = (*) "C1" [EOF] -]"#, - ); -} - -#[test] -fn expr_grammar1() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r#" -grammar; - extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } - - S: () = - E => (); - - E: () = { - E "-" T => (), - T => () - }; - - T: () = { - "N" => (), - "(" E ")" => () - }; -"#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - // for now, just test that process does not result in an error - // and yields expected number of states. - let states = build_lr1_states(&grammar, nt("S")).unwrap(); - println!("{:#?}", states); - assert_eq!(states.len(), if use_lane_table() { 9 } else { 16 }); - - // execute it on some sample inputs. - let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); - assert_eq!( - &format!("{}", tree)[..], - r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# - ); - - // incomplete: - assert!(interpret(&states, tokens!["N", "-", "(", "N", "-", "N"]).is_err()); - - // incomplete: - assert!(interpret(&states, tokens!["N", "-"]).is_err()); - - // unexpected character: - assert!(interpret(&states, tokens!["N", "-", ")", "N", "-", "N", "("]).is_err()); - - // parens first: - let tree = interpret(&states, tokens!["(", "N", "-", "N", ")", "-", "N"]).unwrap(); - println!("{}", tree); - assert_eq!( - &format!("{}", tree)[..], - r#"[S: [E: [E: [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]], "-", [T: "N"]]]"# - ); - - // run some random tests - random_test(&grammar, &states, nt("S")); -} - -#[test] -fn shift_reduce_conflict1() { - let _tls = Tls::test(); - - // This grammar gets a shift-reduce conflict because if the input - // is "&" (*) "L", then we see two possibilities, and we must decide - // between them: - // - // "&" (*) "L" E - // | | | - // +-------+--| - // | - // E - // - // or - // - // "&" (*) "L" - // | | - // | OPT_L E - // | | | - // +---+---+----+ - // | - // E - // - // to some extent this may be a false conflict, in that inlined - // rules would address it, but it's an interesting one for - // producing a useful error message. - - let grammar = normalized_grammar( - r#" - grammar; - extern { enum Tok { "L" => .., "&" => .., } } - E: () = { - "L", - "&" OPT_L E - }; - OPT_L: () = { - (), - "L" - }; - "#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - assert!(build_lr1_states(&grammar, nt("E")).is_err()); -} - -/// One of the few grammars that IS LR(0). -#[test] -fn lr0_expr_grammar_with_explicit_eof() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r#" -grammar; - -S: () = E "$"; - -E: () = { - E "-" T, - T, -}; - -T: () = { - "N", - "(" E ")", -}; -"#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - // for now, just test that process does not result in an error - // and yields expected number of states. - let states = build_lr0_states(&grammar, nt("S")).unwrap(); - assert_eq!(states.len(), 10); -} - -/// Without the artifical '$', grammar is not LR(0). -#[test] -fn lr0_expr_grammar_with_implicit_eof() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r#" -grammar; - -S: () = E; - -E: () = { - E "-" T, - T, -}; - -T: () = { - "N", - "(" E ")", -}; -"#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - build_lr0_states(&grammar, nt("S")).unwrap_err(); -} - -/// When we moved to storing items as (lr0 -> TokenSet) pairs, a bug -/// in the transitive closure routine could cause us to have `(Foo, -/// S0)` and `(Foo, S1)` as distinct items instead of `(Foo, S0|S1)`. -#[test] -fn issue_144() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r##" -grammar; - -pub ForeignItem: () = { - AttrsAndVis "item_foreign_fn", - AttrsAndVis "unsafe" "item_foreign_fn", -}; - -AttrsAndVis: () = { - MaybeOuterAttrs visibility, -}; - -MaybeOuterAttrs: () = { - OuterAttrs, - (), -}; - -visibility: () = { - "pub", - (), -}; - -OuterAttrs: () = { - OuterAttr, - OuterAttrs OuterAttr, -}; - -OuterAttr: () = { - "#" "[" "]", -}; - -Ident: () = { - "IDENT", -}; - -ty: () = { - "ty" -}; -"##, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - build_lr1_states(&grammar, nt("ForeignItem")).unwrap(); -} - -// Not sure if this is the right spot -#[test] -fn match_grammar() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r#" -grammar; - -match { - r"(?i)select" => SELECT -} else { - _ -} - -pub Query = SELECT r"[a-z]+"; -"#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - let states = build_lr0_states(&grammar, nt("Query")).expect("build states"); - println!("states: {:?}", states); -} +use string_cache::DefaultAtom as Atom; +use generate; +use grammar::repr::*; +use test_util::{compare, expect_debug, normalized_grammar}; +use lr1::core::*; +use lr1::interpret::interpret; +use lr1::lookahead::Token; +use lr1::lookahead::Token::EOF; +use lr1::lookahead::TokenSet; +use lr1::tls::Lr1Tls; +use tls::Tls; + +use super::{use_lane_table, build_lr0_states, build_lr1_states, LR}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +const ITERATIONS: usize = 22; + +fn random_test<'g>(grammar: &Grammar, states: &'g [LR1State<'g>], start_symbol: NonterminalString) { + for i in 0..ITERATIONS { + let input_tree = generate::random_parse_tree(grammar, start_symbol.clone()); + let output_tree = interpret(&states, input_tree.terminals()).unwrap(); + + println!("test {}", i); + println!("input_tree = {}", input_tree); + println!("output_tree = {}", output_tree); + + compare(output_tree, input_tree); + } +} + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +fn items<'g>(grammar: &'g Grammar, nonterminal: &str, index: usize, la: Token) -> LR1Items<'g> { + let set = TokenSet::from(la); + let lr1: LR = LR::new(&grammar, nt(nonterminal), set.clone()); + let items = lr1.transitive_closure(lr1.items(&nt(nonterminal), index, &set)); + items +} + +#[test] +fn start_state() { + let grammar = normalized_grammar( + r#" +grammar; + extern { enum Tok { "C" => .., "D" => .. } } + A = B "C"; + B: Option = { + "D" => Some(1), + () => None + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let items = items(&grammar, "A", 0, EOF); + expect_debug( + items.vec, + r#"[ + A = (*) B "C" [EOF], + B = (*) ["C"], + B = (*) "D" ["C"] +]"#, + ); +} + +#[test] +fn start_state_1() { + let grammar = normalized_grammar( + r#" +grammar; +extern { enum Tok { "B1" => .., "C1" => .. } } +A = B C; +B: Option = { + "B1" => Some(1), + () => None +}; +C: Option = { + "C1" => Some(1), + () => None +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + expect_debug( + items(&grammar, "A", 0, EOF).vec, + r#"[ + A = (*) B C [EOF], + B = (*) ["C1", EOF], + B = (*) "B1" ["C1", EOF] +]"#, + ); + + expect_debug( + items(&grammar, "A", 1, EOF).vec, + r#"[ + A = B (*) C [EOF], + C = (*) [EOF], + C = (*) "C1" [EOF] +]"#, + ); +} + +#[test] +fn expr_grammar1() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } + + S: () = + E => (); + + E: () = { + E "-" T => (), + T => () + }; + + T: () = { + "N" => (), + "(" E ")" => () + }; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + // for now, just test that process does not result in an error + // and yields expected number of states. + let states = build_lr1_states(&grammar, nt("S")).unwrap(); + println!("{:#?}", states); + assert_eq!(states.len(), if use_lane_table() { 9 } else { 16 }); + + // execute it on some sample inputs. + let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); + assert_eq!( + &format!("{}", tree)[..], + r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# + ); + + // incomplete: + assert!(interpret(&states, tokens!["N", "-", "(", "N", "-", "N"]).is_err()); + + // incomplete: + assert!(interpret(&states, tokens!["N", "-"]).is_err()); + + // unexpected character: + assert!(interpret(&states, tokens!["N", "-", ")", "N", "-", "N", "("]).is_err()); + + // parens first: + let tree = interpret(&states, tokens!["(", "N", "-", "N", ")", "-", "N"]).unwrap(); + println!("{}", tree); + assert_eq!( + &format!("{}", tree)[..], + r#"[S: [E: [E: [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]], "-", [T: "N"]]]"# + ); + + // run some random tests + random_test(&grammar, &states, nt("S")); +} + +#[test] +fn shift_reduce_conflict1() { + let _tls = Tls::test(); + + // This grammar gets a shift-reduce conflict because if the input + // is "&" (*) "L", then we see two possibilities, and we must decide + // between them: + // + // "&" (*) "L" E + // | | | + // +-------+--| + // | + // E + // + // or + // + // "&" (*) "L" + // | | + // | OPT_L E + // | | | + // +---+---+----+ + // | + // E + // + // to some extent this may be a false conflict, in that inlined + // rules would address it, but it's an interesting one for + // producing a useful error message. + + let grammar = normalized_grammar( + r#" + grammar; + extern { enum Tok { "L" => .., "&" => .., } } + E: () = { + "L", + "&" OPT_L E + }; + OPT_L: () = { + (), + "L" + }; + "#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + assert!(build_lr1_states(&grammar, nt("E")).is_err()); +} + +/// One of the few grammars that IS LR(0). +#[test] +fn lr0_expr_grammar_with_explicit_eof() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +S: () = E "$"; + +E: () = { + E "-" T, + T, +}; + +T: () = { + "N", + "(" E ")", +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + // for now, just test that process does not result in an error + // and yields expected number of states. + let states = build_lr0_states(&grammar, nt("S")).unwrap(); + assert_eq!(states.len(), 10); +} + +/// Without the artifical '$', grammar is not LR(0). +#[test] +fn lr0_expr_grammar_with_implicit_eof() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +S: () = E; + +E: () = { + E "-" T, + T, +}; + +T: () = { + "N", + "(" E ")", +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + build_lr0_states(&grammar, nt("S")).unwrap_err(); +} + +/// When we moved to storing items as (lr0 -> TokenSet) pairs, a bug +/// in the transitive closure routine could cause us to have `(Foo, +/// S0)` and `(Foo, S1)` as distinct items instead of `(Foo, S0|S1)`. +#[test] +fn issue_144() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r##" +grammar; + +pub ForeignItem: () = { + AttrsAndVis "item_foreign_fn", + AttrsAndVis "unsafe" "item_foreign_fn", +}; + +AttrsAndVis: () = { + MaybeOuterAttrs visibility, +}; + +MaybeOuterAttrs: () = { + OuterAttrs, + (), +}; + +visibility: () = { + "pub", + (), +}; + +OuterAttrs: () = { + OuterAttr, + OuterAttrs OuterAttr, +}; + +OuterAttr: () = { + "#" "[" "]", +}; + +Ident: () = { + "IDENT", +}; + +ty: () = { + "ty" +}; +"##, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + build_lr1_states(&grammar, nt("ForeignItem")).unwrap(); +} + +// Not sure if this is the right spot +#[test] +fn match_grammar() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +match { + r"(?i)select" => SELECT +} else { + _ +} + +pub Query = SELECT r"[a-z]+"; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + let states = build_lr0_states(&grammar, nt("Query")).expect("build states"); + println!("states: {:?}", states); +} diff --git a/third_party/rust/lalrpop/src/lr1/build_lalr/mod.rs b/third_party/rust/lalrpop/src/lr1/build_lalr/mod.rs index 5d86fd7ae0e5..a9060c6a5f01 100644 --- a/third_party/rust/lalrpop/src/lr1/build_lalr/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/build_lalr/mod.rs @@ -1,163 +1,163 @@ -//! Mega naive LALR(1) generation algorithm. - -use collections::{map, Map, Multimap}; -use grammar::repr::*; -use itertools::Itertools; -use lr1::build; -use lr1::core::*; -use lr1::lookahead::*; -use std::mem; -use std::rc::Rc; -use tls::Tls; - -#[cfg(test)] -mod test; - -// Intermediate LALR(1) state. Identical to an LR(1) state, but that -// the items can be pushed to. We initially create these with an empty -// set of actions, as well. -struct LALR1State<'grammar> { - pub index: StateIndex, - pub items: Vec>, - pub shifts: Map, - pub reductions: Multimap<&'grammar Production, TokenSet>, - pub gotos: Map, -} - -pub fn build_lalr_states<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> LR1Result<'grammar> { - // First build the LR(1) states - let lr_states = try!(build::build_lr1_states(grammar, start)); - - // With lane table, there is no reason to do state collapse - // for LALR. In fact, LALR is pointless! - if build::use_lane_table() { - println!("Warning: Now that the new lane-table algorithm is the default,"); - println!(" #[lalr] mode has no effect and can be removed."); - return Ok(lr_states); - } - - profile! { - &Tls::session(), - "LALR(1) state collapse", - collapse_to_lalr_states(&lr_states) - } -} - -pub fn collapse_to_lalr_states<'grammar>(lr_states: &[LR1State<'grammar>]) -> LR1Result<'grammar> { - // Now compress them. This vector stores, for each state, the - // LALR(1) state to which we will remap it. - let mut remap: Vec<_> = (0..lr_states.len()).map(|_| StateIndex(0)).collect(); - let mut lalr1_map: Map, StateIndex> = map(); - let mut lalr1_states: Vec = vec![]; - - for (lr1_index, lr1_state) in lr_states.iter().enumerate() { - let lr0_kernel: Vec<_> = lr1_state - .items - .vec - .iter() - .map(|item| item.to_lr0()) - .dedup() - .collect(); - - let lalr1_index = *lalr1_map.entry(lr0_kernel).or_insert_with(|| { - let index = StateIndex(lalr1_states.len()); - lalr1_states.push(LALR1State { - index: index, - items: vec![], - shifts: map(), - reductions: Multimap::new(), - gotos: map(), - }); - index - }); - - lalr1_states[lalr1_index.0] - .items - .extend(lr1_state.items.vec.iter().cloned()); - - remap[lr1_index] = lalr1_index; - } - - // The reduction process can leave us with multiple - // overlapping LR(0) items, whose lookaheads must be - // unioned. e.g. we may now have: - // - // X = "(" (*) ")" ["Foo"] - // X = "(" (*) ")" ["Bar"] - // - // which we will convert to: - // - // X = "(" (*) ")" ["Foo", "Bar"] - for lalr1_state in &mut lalr1_states { - let items = mem::replace(&mut lalr1_state.items, vec![]); - - let items: Multimap, TokenSet> = items - .into_iter() - .map( - |Item { - production, - index, - lookahead, - }| { (Item::lr0(production, index), lookahead) }, - ) - .collect(); - - lalr1_state.items = items - .into_iter() - .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) - .collect(); - } - - // Now that items are fully built, create the actions - for (lr1_index, lr1_state) in lr_states.iter().enumerate() { - let lalr1_index = remap[lr1_index]; - let lalr1_state = &mut lalr1_states[lalr1_index.0]; - - for (terminal, &lr1_state) in &lr1_state.shifts { - let target_state = remap[lr1_state.0]; - let prev = lalr1_state.shifts.insert(terminal.clone(), target_state); - assert!(prev.unwrap_or(target_state) == target_state); - } - - for (nt, lr1_state) in &lr1_state.gotos { - let target_state = remap[lr1_state.0]; - let prev = lalr1_state.gotos.insert(nt.clone(), target_state); - assert!(prev.unwrap_or(target_state) == target_state); // as above - } - - for &(ref token_set, production) in &lr1_state.reductions { - lalr1_state.reductions.push(production, token_set.clone()); - } - } - - // Finally, create the new states and detect conflicts - let lr1_states: Vec<_> = lalr1_states - .into_iter() - .map(|lr| State { - index: lr.index, - items: Items { - vec: Rc::new(lr.items), - }, - shifts: lr.shifts, - reductions: lr.reductions.into_iter().map(|(p, ts)| (ts, p)).collect(), - gotos: lr.gotos, - }) - .collect(); - - let conflicts: Vec<_> = lr1_states - .iter() - .flat_map(|s| TokenSet::conflicts(s)) - .collect(); - - if !conflicts.is_empty() { - Err(TableConstructionError { - states: lr1_states, - conflicts: conflicts, - }) - } else { - Ok(lr1_states) - } -} +//! Mega naive LALR(1) generation algorithm. + +use collections::{map, Map, Multimap}; +use itertools::Itertools; +use lr1::build; +use lr1::core::*; +use lr1::lookahead::*; +use grammar::repr::*; +use std::rc::Rc; +use std::mem; +use tls::Tls; + +#[cfg(test)] +mod test; + +// Intermediate LALR(1) state. Identical to an LR(1) state, but that +// the items can be pushed to. We initially create these with an empty +// set of actions, as well. +struct LALR1State<'grammar> { + pub index: StateIndex, + pub items: Vec>, + pub shifts: Map, + pub reductions: Multimap<&'grammar Production, TokenSet>, + pub gotos: Map, +} + +pub fn build_lalr_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + // First build the LR(1) states + let lr_states = try!(build::build_lr1_states(grammar, start)); + + // With lane table, there is no reason to do state collapse + // for LALR. In fact, LALR is pointless! + if build::use_lane_table() { + println!("Warning: Now that the new lane-table algorithm is the default,"); + println!(" #[lalr] mode has no effect and can be removed."); + return Ok(lr_states); + } + + profile! { + &Tls::session(), + "LALR(1) state collapse", + collapse_to_lalr_states(&lr_states) + } +} + +pub fn collapse_to_lalr_states<'grammar>(lr_states: &[LR1State<'grammar>]) -> LR1Result<'grammar> { + // Now compress them. This vector stores, for each state, the + // LALR(1) state to which we will remap it. + let mut remap: Vec<_> = (0..lr_states.len()).map(|_| StateIndex(0)).collect(); + let mut lalr1_map: Map, StateIndex> = map(); + let mut lalr1_states: Vec = vec![]; + + for (lr1_index, lr1_state) in lr_states.iter().enumerate() { + let lr0_kernel: Vec<_> = lr1_state + .items + .vec + .iter() + .map(|item| item.to_lr0()) + .dedup() + .collect(); + + let lalr1_index = *lalr1_map.entry(lr0_kernel).or_insert_with(|| { + let index = StateIndex(lalr1_states.len()); + lalr1_states.push(LALR1State { + index: index, + items: vec![], + shifts: map(), + reductions: Multimap::new(), + gotos: map(), + }); + index + }); + + lalr1_states[lalr1_index.0] + .items + .extend(lr1_state.items.vec.iter().cloned()); + + remap[lr1_index] = lalr1_index; + } + + // The reduction process can leave us with multiple + // overlapping LR(0) items, whose lookaheads must be + // unioned. e.g. we may now have: + // + // X = "(" (*) ")" ["Foo"] + // X = "(" (*) ")" ["Bar"] + // + // which we will convert to: + // + // X = "(" (*) ")" ["Foo", "Bar"] + for lalr1_state in &mut lalr1_states { + let items = mem::replace(&mut lalr1_state.items, vec![]); + + let items: Multimap, TokenSet> = items + .into_iter() + .map( + |Item { + production, + index, + lookahead, + }| { (Item::lr0(production, index), lookahead) }, + ) + .collect(); + + lalr1_state.items = items + .into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + } + + // Now that items are fully built, create the actions + for (lr1_index, lr1_state) in lr_states.iter().enumerate() { + let lalr1_index = remap[lr1_index]; + let lalr1_state = &mut lalr1_states[lalr1_index.0]; + + for (terminal, &lr1_state) in &lr1_state.shifts { + let target_state = remap[lr1_state.0]; + let prev = lalr1_state.shifts.insert(terminal.clone(), target_state); + assert!(prev.unwrap_or(target_state) == target_state); + } + + for (nt, lr1_state) in &lr1_state.gotos { + let target_state = remap[lr1_state.0]; + let prev = lalr1_state.gotos.insert(nt.clone(), target_state); + assert!(prev.unwrap_or(target_state) == target_state); // as above + } + + for &(ref token_set, production) in &lr1_state.reductions { + lalr1_state.reductions.push(production, token_set.clone()); + } + } + + // Finally, create the new states and detect conflicts + let lr1_states: Vec<_> = lalr1_states + .into_iter() + .map(|lr| State { + index: lr.index, + items: Items { + vec: Rc::new(lr.items), + }, + shifts: lr.shifts, + reductions: lr.reductions.into_iter().map(|(p, ts)| (ts, p)).collect(), + gotos: lr.gotos, + }) + .collect(); + + let conflicts: Vec<_> = lr1_states + .iter() + .flat_map(|s| TokenSet::conflicts(s)) + .collect(); + + if !conflicts.is_empty() { + Err(TableConstructionError { + states: lr1_states, + conflicts: conflicts, + }) + } else { + Ok(lr1_states) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/build_lalr/test.rs b/third_party/rust/lalrpop/src/lr1/build_lalr/test.rs index a88ad4edbfdb..4fecb5d38df0 100644 --- a/third_party/rust/lalrpop/src/lr1/build_lalr/test.rs +++ b/third_party/rust/lalrpop/src/lr1/build_lalr/test.rs @@ -1,49 +1,49 @@ -use super::super::interpret::interpret; -use super::build_lalr_states; -use grammar::repr::*; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::normalized_grammar; -use tls::Tls; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -macro_rules! tokens { - ($($x:expr),*) => { - vec![$(TerminalString::quoted(Atom::from($x))),*] - } -} - -#[test] -fn figure9_23() { - let _tls = Tls::test(); - - let grammar = normalized_grammar( - r#" - grammar; - extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } - S: () = E => (); - E: () = { - E "-" T => (), - T => () - }; - T: () = { - "N" => (), - "(" E ")" => () - }; - "#, - ); - - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - - let states = build_lalr_states(&grammar, nt("S")).unwrap(); - println!("{:#?}", states); - - let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); - assert_eq!( - &format!("{:?}", tree)[..], - r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# - ); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use tls::Tls; +use super::build_lalr_states; +use super::super::interpret::interpret; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +#[test] +fn figure9_23() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" + grammar; + extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } + S: () = E => (); + E: () = { + E "-" T => (), + T => () + }; + T: () = { + "N" => (), + "(" E ")" => () + }; + "#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + let states = build_lalr_states(&grammar, nt("S")).unwrap(); + println!("{:#?}", states); + + let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); + assert_eq!( + &format!("{:?}", tree)[..], + r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# + ); +} diff --git a/third_party/rust/lalrpop/src/lr1/codegen/ascent.rs b/third_party/rust/lalrpop/src/lr1/codegen/ascent.rs index 601b1bcdff18..ff92d90c3f8b 100644 --- a/third_party/rust/lalrpop/src/lr1/codegen/ascent.rs +++ b/third_party/rust/lalrpop/src/lr1/codegen/ascent.rs @@ -1,1021 +1,1019 @@ -//! A compiler from an LR(1) table to a [recursive ascent] parser. -//! -//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser - -use collections::{Multimap, Set}; -use grammar::parse_tree::WhereClause; -use grammar::repr::{ - Grammar, NonterminalString, Production, Symbol, TerminalString, TypeParameter, TypeRepr, - Visibility, -}; -use lr1::core::*; -use lr1::lookahead::Token; -use lr1::state_graph::StateGraph; -use rust::RustWrite; -use std::io::{self, Write}; -use tls::Tls; -use util::{Escape, Sep}; - -use super::base::CodeGenerator; - -pub fn compile<'grammar, W: Write>( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &[LR1State<'grammar>], - action_module: &str, - out: &mut RustWrite, -) -> io::Result<()> { - let graph = StateGraph::new(&states); - let mut ascent = CodeGenerator::new_ascent( - grammar, - user_start_symbol, - start_symbol, - &graph, - states, - action_module, - out, - ); - ascent.write() -} - -struct RecursiveAscent<'ascent, 'grammar> { - graph: &'ascent StateGraph, - - /// for each state, the set of symbols that it will require for - /// input - state_inputs: Vec>, - - /// type parameters for the `Nonterminal` type - nonterminal_type_params: Vec, - - nonterminal_where_clauses: Vec>, -} - -/// Tracks the suffix of the stack (that is, top-most elements) that any -/// particular state is aware of. We break the suffix into two parts: -/// optional and fixed, which always look like this: -/// -/// ``` -/// ... A B C X Y Z -/// ~~~ ~~~~~ ~~~~~ -/// | | | -/// | | Fixed (top of the stack) -/// | | -/// | Optional (will be popped after the fixed portion) -/// | -/// Prefix (stuff we don't know about that is also on the stack -/// ``` -/// -/// The idea of an "optional" member is not that it may or may not be -/// on the stack. The entire suffix will always be on the stack. An -/// *optional* member is one that *we* may or may not *consume*. So -/// the above stack suffix could occur given a state with items like: -/// -/// ``` -/// NT1 = A B C X Y Z (*) "." -/// NT2 = X Y Z (*) "," -/// ``` -/// -/// Depending on what comes next, if we reduce NT1, we will consume -/// all six symbols, but if we reduce NT2, we will only reduce three. -#[derive(Copy, Clone, Debug)] -struct StackSuffix<'grammar> { - /// all symbols that are known to be on the stack (optional + fixed). - all: &'grammar [Symbol], - - /// optional symbols will be consumed by *some* reductions in this - /// state, but not all - len_optional: usize, -} - -impl<'grammar> StackSuffix<'grammar> { - fn len(&self) -> usize { - self.all.len() - } - - /// returns the (optional, fixed) -- number of optional - /// items in stack prefix and numer of fixed - fn optional_fixed_lens(&self) -> (usize, usize) { - (self.len_optional, self.len() - self.len_optional) - } - - fn is_not_empty(&self) -> bool { - self.len() > 0 - } - - fn optional(&self) -> &'grammar [Symbol] { - &self.all[..self.len_optional] - } - - fn fixed(&self) -> &'grammar [Symbol] { - &self.all[self.len_optional..] - } -} - -impl<'ascent, 'grammar, W: Write> - CodeGenerator<'ascent, 'grammar, W, RecursiveAscent<'ascent, 'grammar>> -{ - fn new_ascent( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - graph: &'ascent StateGraph, - states: &'ascent [LR1State<'grammar>], - action_module: &str, - out: &'ascent mut RustWrite, - ) -> Self { - // The nonterminal type needs to be parameterized by all the - // type parameters that actually appear in the types of - // nonterminals. We can't just use *all* type parameters - // because that would leave unused lifetime/type parameters in - // some cases. - let referenced_ty_params: Set = grammar - .types - .nonterminal_types() - .into_iter() - .flat_map(|t| t.referenced()) - .collect(); - - let nonterminal_type_params: Vec<_> = grammar - .type_parameters - .iter() - .filter(|t| referenced_ty_params.contains(t)) - .cloned() - .collect(); - - let mut referenced_where_clauses = Set::new(); - for wc in &grammar.where_clauses { - wc.map(|ty| { - if ty - .referenced() - .iter() - .any(|p| nonterminal_type_params.contains(p)) - { - referenced_where_clauses.insert(wc.clone()); - } - }); - } - - let nonterminal_where_clauses: Vec<_> = grammar - .where_clauses - .iter() - .filter(|wc| referenced_where_clauses.contains(wc)) - .cloned() - .collect(); - - let state_inputs = states - .iter() - .map(|state| Self::state_input_for(state)) - .collect(); - - CodeGenerator::new( - grammar, - user_start_symbol, - start_symbol, - states, - out, - false, - action_module, - RecursiveAscent { - graph: graph, - state_inputs: state_inputs, - nonterminal_type_params: nonterminal_type_params, - nonterminal_where_clauses: nonterminal_where_clauses, - }, - ) - } - - /// Compute the stack suffix that the state expects on entry. - fn state_input_for(state: &'ascent LR1State<'grammar>) -> StackSuffix<'grammar> { - let max_prefix = state.max_prefix(); - let will_pop = state.will_pop(); - StackSuffix { - all: max_prefix, - len_optional: max_prefix.len() - will_pop.len(), - } - } - - fn write(&mut self) -> io::Result<()> { - self.write_parse_mod(|this| { - try!(this.write_start_fn()); - rust!(this.out, ""); - try!(this.write_return_type_defn()); - for i in 0..this.states.len() { - try!(this.write_state_fn(StateIndex(i))); - } - Ok(()) - }) - } - - fn write_return_type_defn(&mut self) -> io::Result<()> { - // sometimes some of the variants are not used, particularly - // if we are generating multiple parsers from the same file: - rust!(self.out, "#[allow(dead_code)]"); - rust!( - self.out, - "pub enum {}Nonterminal<{}>", - self.prefix, - Sep(", ", &self.custom.nonterminal_type_params) - ); - - if !self.custom.nonterminal_where_clauses.is_empty() { - rust!( - self.out, - " where {}", - Sep(", ", &self.custom.nonterminal_where_clauses) - ); - } - - rust!(self.out, " {{"); - - // make an enum with one variant per nonterminal; I considered - // making different enums per state, but this would mean we - // have to unwrap and rewrap as we pass up the stack, which - // seems silly - for ref nt in self.grammar.nonterminals.keys() { - let ty = self - .types - .spanned_type(self.types.nonterminal_type(nt).clone()); - rust!(self.out, "{}({}),", Escape(nt), ty); - } - - rust!(self.out, "}}"); - Ok(()) - } - - // Generates a function `parse_Foo` that will parse an entire - // input as `Foo`. An error is reported if the entire input is not - // consumed. - fn write_start_fn(&mut self) -> io::Result<()> { - let phantom_data = self.phantom_data_expr(); - try!(self.start_parser_fn()); - try!(self.define_tokens()); - - try!(self.next_token("lookahead", "tokens")); - rust!( - self.out, - "match try!({}state0({}&mut {}tokens, {}lookahead, {})) {{", - self.prefix, - self.grammar.user_parameter_refs(), - self.prefix, - self.prefix, - phantom_data - ); - - // extra tokens? - rust!(self.out, "(Some({}lookahead), _) => {{", self.prefix); - rust!( - self.out, - "Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }})", - self.prefix, - self.prefix - ); - rust!(self.out, "}}"); - - // otherwise, we expect to see only the goal terminal - rust!( - self.out, - "(None, {}Nonterminal::{}((_, {}nt, _))) => {{", - self.prefix, - Escape(&self.start_symbol), - self.prefix - ); - rust!(self.out, "Ok({}nt)", self.prefix); - rust!(self.out, "}}"); - - // nothing else should be possible - rust!(self.out, "_ => unreachable!(),"); - rust!(self.out, "}}"); - - self.end_parser_fn() - } - - /// Writes the function that corresponds to a given state. This - /// function takes arguments corresponding to the stack slots of - /// the LR(1) machine. It consumes tokens and handles reduces - /// etc. It will return once it has popped at least one symbol off - /// of the LR stack. - /// - /// Note that for states which have a custom kind, this function - /// emits nothing at all other than a possible comment explaining - /// the state. - fn write_state_fn(&mut self, this_index: StateIndex) -> io::Result<()> { - let this_state = &self.states[this_index.0]; - let inputs = self.custom.state_inputs[this_index.0]; - - rust!(self.out, ""); - - // Leave a comment explaining what this state is. - if Tls::session().emit_comments { - rust!(self.out, "// State {}", this_index.0); - rust!(self.out, "// AllInputs = {:?}", inputs.all); - rust!(self.out, "// OptionalInputs = {:?}", inputs.optional()); - rust!(self.out, "// FixedInputs = {:?}", inputs.fixed()); - rust!( - self.out, - "// WillPushLen = {:?}", - this_state.will_push().len() - ); - rust!(self.out, "// WillPush = {:?}", this_state.will_push()); - rust!( - self.out, - "// WillProduce = {:?}", - this_state.will_produce() - ); - rust!(self.out, "//"); - for item in this_state.items.vec.iter() { - rust!(self.out, "// {:?}", item); - } - rust!(self.out, "//"); - for (terminal, action) in &this_state.shifts { - rust!(self.out, "// {:?} -> {:?}", terminal, action); - } - for &(ref tokens, action) in &this_state.reductions { - rust!(self.out, "// {:?} -> {:?}", tokens, action); - } - rust!(self.out, "//"); - for (nt, state) in &this_state.gotos { - rust!(self.out, "// {:?} -> {:?}", nt, state); - } - } - - try!(self.emit_state_fn_header("state", this_index.0, inputs)); - - // possibly move some fixed inputs into optional stack slots - let stack_suffix = try!(self.adjust_inputs(this_index, inputs)); - - // set to true if goto actions are worth generating - let mut fallthrough = false; - - rust!(self.out, "match {}lookahead {{", self.prefix); - - // first emit shifts: - for (terminal, &next_index) in &this_state.shifts { - let sym_name = format!("{}sym{}", self.prefix, inputs.len()); - try!(self.consume_terminal(terminal, sym_name)); - - // transition to the new state - if try!(self.transition("result", stack_suffix, next_index, &["tokens"])) { - fallthrough = true; - } - - rust!(self.out, "}}"); - } - - // now emit reduces. It frequently happens that many tokens - // trigger the same reduction, so group these by the - // production that we are going to be reducing. - let reductions: Multimap<_, Vec<_>> = this_state - .reductions - .iter() - .flat_map(|&(ref tokens, production)| tokens.iter().map(move |t| (production, t))) - .collect(); - for (production, tokens) in reductions { - for (index, token) in tokens.iter().enumerate() { - let pattern = match *token { - Token::Terminal(ref s) => format!("Some({})", self.match_terminal_pattern(s)), - Token::Error => { - panic!("Error recovery is not implemented for recursive ascent parsers") - } - Token::EOF => format!("None"), - }; - if index < tokens.len() - 1 { - rust!(self.out, "{} |", pattern); - } else { - rust!(self.out, "{} => {{", pattern); - } - } - - try!(self.emit_reduce_action("result", stack_suffix, production)); - - if production.symbols.len() > 0 { - // if we popped anything off of the stack, then this frame is done - rust!(self.out, "return Ok({}result);", self.prefix); - } else { - fallthrough = true; - } - - rust!(self.out, "}}"); - } - - // if we hit this, the next token is not recognized, so generate an error - rust!(self.out, "_ => {{"); - // The terminals which would have resulted in a successful parse in this state - let successful_terminals = self.grammar.terminals.all.iter().filter(|&terminal| { - this_state.shifts.contains_key(terminal) || this_state - .reductions - .iter() - .any(|&(ref t, _)| t.contains(&Token::Terminal(terminal.clone()))) - }); - rust!( - self.out, - "return Err({}lalrpop_util::ParseError::UnrecognizedToken {{", - self.prefix - ); - rust!(self.out, "token: {}lookahead,", self.prefix); - rust!(self.out, "expected: vec!["); - for terminal in successful_terminals { - rust!(self.out, "r###\"{}\"###.to_string(),", terminal); - } - rust!(self.out, "]"); - rust!(self.out, "}});"); - rust!(self.out, "}}"); - - rust!(self.out, "}}"); // match - - // finally, emit gotos (if relevant) - if fallthrough && !this_state.gotos.is_empty() { - rust!(self.out, "loop {{"); - - // In most states, we know precisely when the top stack - // slot will be consumed (basically, when we reduce or - // when we transition to another state). But in some states, - // we may not know. Consider: - // - // X = A (*) "0" ["."] - // X = A (*) B ["."] - // B = (*) "0" "1" ["."] - // - // Now if we see a `"0"` this *could* be the start of a `B - // = "0" "1"` or it could be the continuation of `X = A - // "0"`. We won't know until we see the *next* character - // (which will either be `"0"` or `"."`). If it turns out to be - // `X = A "0"`, then the state handling the `"0"` will reduce - // and consume the `A` and the `"0"`. But otherwise it will shift - // the `"1"` and leave the `A` unprocessed. - // - // In cases like this, the `adjust_inputs` routine will - // have taken the top of the stack ("A") and put it into - // an `Option`. After the state processing the `"0"` - // returns then, we can check this option to see whether - // it has popped the `"A"` (in which case we ought to - // return) or not (in which case we ought to shift the `B` - // value that it returned to us). - let top_slot_optional = - { stack_suffix.is_not_empty() && stack_suffix.fixed().is_empty() }; - if top_slot_optional { - rust!( - self.out, - "if {}sym{}.is_none() {{", - self.prefix, - stack_suffix.len() - 1 - ); - rust!(self.out, "return Ok({}result);", self.prefix); - rust!(self.out, "}}"); - } - - rust!( - self.out, - "let ({}lookahead, {}nt) = {}result;", - self.prefix, - self.prefix, - self.prefix - ); - - rust!(self.out, "match {}nt {{", self.prefix); - for (ref nt, &next_index) in &this_state.gotos { - // The nonterminal we are shifting becomes symN, where - // N is the number of inputs to this state (which are - // numbered sym0..sym(N-1)). It is never optional - // because we always transition to a state with at - // least *one* fixed input. - rust!( - self.out, - "{}Nonterminal::{}({}sym{}) => {{", - self.prefix, - Escape(nt), - self.prefix, - stack_suffix.len() - ); - try!(self.transition("result", stack_suffix, next_index, &["tokens", "lookahead"])); - rust!(self.out, "}}"); - } - - // Errors are not possible in the goto phase; a missing entry - // indicates parse successfully completed, so just bail out. - if this_state.gotos.len() != self.grammar.nonterminals.keys().len() { - rust!(self.out, "_ => {{"); - rust!( - self.out, - "return Ok(({}lookahead, {}nt));", - self.prefix, - self.prefix - ); - rust!(self.out, "}}"); - } - - rust!(self.out, "}}"); // match - - rust!(self.out, "}}"); // while/loop - } else if fallthrough { - rust!(self.out, "return Ok({}result);", self.prefix); - } - - rust!(self.out, "}}"); // fn - - Ok(()) - } - - fn emit_state_fn_header( - &mut self, - fn_kind: &str, // e.g. "state", "custom" - fn_index: usize, // state index, custom kind index, etc - suffix: StackSuffix<'grammar>, - ) -> io::Result<()> { - let optional_prefix = suffix.optional(); - let fixed_prefix = suffix.fixed(); - - let triple_type = self.triple_type(); - let parse_error_type = self.types.parse_error_type(); - let error_type = self.types.error_type(); - - // If we are generated the tokenizer, it generates ParseError - // errors, otherwise they are user errors. - let iter_error_type = if self.grammar.intern_token.is_some() { - parse_error_type - } else { - &error_type - }; - - let (fn_args, starts_with_terminal) = self.fn_args(optional_prefix, fixed_prefix); - - try!(self.out.write_fn_header( - self.grammar, - &Visibility::Priv, - format!("{}{}{}", self.prefix, fn_kind, fn_index), - vec![format!( - "{}TOKENS: Iterator>", - self.prefix, triple_type, iter_error_type - ),], - None, - fn_args, - format!( - "Result<(Option<{}>, {}Nonterminal<{}>), {}>", - triple_type, - self.prefix, - Sep(", ", &self.custom.nonterminal_type_params), - parse_error_type - ), - vec![] - )); - - rust!(self.out, "{{"); - - rust!( - self.out, - "let mut {}result: (Option<{}>, {}Nonterminal<{}>);", - self.prefix, - triple_type, - self.prefix, - Sep(", ", &self.custom.nonterminal_type_params) - ); - - // shift lookahead is necessary; see `starts_with_terminal` above - if starts_with_terminal { - try!(self.next_token("lookahead", "tokens")); - } - - Ok(()) - } - - // Compute the set of arguments that the function for a state or - // custom-kind expects. The argument `symbols` represents the top - // portion of the stack which this function expects to be given. - // Each of them will be given an argument like `sym3: &mut - // Option` where `Sym3` is the type of the symbol. - // - // Returns a list of argument names and a flag if this fn resulted - // from pushing a terminal (in which case the lookahead must be - // computed interally). - fn fn_args( - &mut self, - optional_prefix: &[Symbol], - fixed_prefix: &[Symbol], - ) -> (Vec, bool) { - assert!( - // start state: - (optional_prefix.is_empty() && fixed_prefix.is_empty()) || - /* any other state: */ !fixed_prefix.is_empty() - ); - let triple_type = self.triple_type(); - - // to reduce the size of the generated code, if the state - // results from shifting a terminal, then we do not pass the - // lookahead in as an argument, but rather we load it as the - // first thing in this function; this saves some space because - // there are more edges than there are states in the graph. - let starts_with_terminal = fixed_prefix - .last() - .map(|l| l.is_terminal()) - .unwrap_or(false); - - let mut base_args = vec![format!("{}tokens: &mut {}TOKENS", self.prefix, self.prefix)]; - if !starts_with_terminal { - base_args.push(format!("{}lookahead: Option<{}>", self.prefix, triple_type)); - } - - // "Optional symbols" may or may not be consumed, so take an - // `&mut Option` - let optional_args = (0..optional_prefix.len()).map(|i| { - format!( - "{}sym{}: &mut Option<{}>", - self.prefix, - i, - self.types - .spanned_type(optional_prefix[i].ty(&self.types).clone()) - ) - }); - - // "Fixed symbols" will be consumed before we return, so take the value itself - let fixed_args = (0..fixed_prefix.len()).map(|i| { - format!( - "{}sym{}: {}", - self.prefix, - optional_prefix.len() + i, - self.types - .spanned_type(fixed_prefix[i].ty(&self.types).clone()) - ) - }); - - let all_args = base_args - .into_iter() - .chain(optional_args) - .chain(fixed_args) - .chain(Some(format!("_: {}", self.phantom_data_type()))) - .collect(); - - (all_args, starts_with_terminal) - } - - /// Examine the states that we may transition to. Unless this is - /// the start state, we will always take at least 1 fixed input: - /// the most recently pushed symbol (let's call it `symX`), and we - /// may have others as well. But if this state can transition to - /// another state can takes some of those inputs as optional - /// parameters, we need to convert them them options. This - /// function thus emits code to move each sum `symX` into an - /// option, and returns an adjusted stack-suffix that reflects the - /// changes made. - fn adjust_inputs( - &mut self, - state_index: StateIndex, - inputs: StackSuffix<'grammar>, - ) -> io::Result> { - let mut result = inputs; - - let top_opt = self - .custom - .graph - .successors(state_index) - .iter() - .any(|succ_state| { - let succ_inputs = &self.custom.state_inputs[succ_state.0]; - - // Check for a successor state with a suffix like: - // - // ... OPT_1 ... OPT_N FIXED_1 - // - // (Remember that *every* successor state will have - // at least one fixed input.) - // - // So basically we are looking for states - // that, when they return, may *optionally* have consumed - // the top of our stack. - assert!(succ_inputs.fixed().len() >= 1); - succ_inputs.fixed().len() == 1 && succ_inputs.optional().len() > 0 - }); - - // If we find a successor that may optionally consume the top - // of our stack, convert our fixed inputs into optional ones. - // - // (Here we convert *all* fixed inputs. Honestly, I can't - // remember if this is necessary, or just for simplicity. I - // suspect the latter. --nmatsakis) - if top_opt { - let start_num = inputs.optional().len(); - for sym_num in (start_num..start_num + inputs.fixed().len()) { - rust!( - self.out, - "let {}sym{} = &mut Some({}sym{});", - self.prefix, - sym_num, - self.prefix, - sym_num - ); - } - result.len_optional = result.len(); - } - - Ok(result) - } - - /// Given that we have, locally, `optional` number of optional stack slots - /// followed by `fixed` number of fixed stack slots, prepare the inputs - /// to be supplied to `inputs`. Returns a string of names for this inputs. - fn pop_syms( - &mut self, - optional: usize, - fixed: usize, - inputs: StackSuffix<'grammar>, - ) -> io::Result> { - let total_have = optional + fixed; - let total_need = inputs.len(); - (total_have - total_need..total_have) // number relative to us - .zip(0..total_need) // number relative to them - .map(|(h, n)| { - let name = format!("{}sym{}", self.prefix, h); - let have_optional = h < optional; - let need_optional = n < inputs.len_optional; - - // if we have something stored in an `Option`, but the next state - // consumes it unconditionally, then "pop" it - if have_optional && !need_optional { - rust!(self.out, "let {} = {}.take().unwrap();", name, name); - } else { - // we should never have something stored - // unconditionally that the next state only - // "maybe" consumes -- we should have fixed this - // in the `adjust_inputs` phase - assert_eq!(have_optional, need_optional); - } - Ok(name) - }) - .collect() - } - - /// Emit code to shift/goto into the state `next_index`. Returns - /// `true` if the current state may be valid after the target - /// state returns, or `false` if `transition` will just return - /// afterwards. - /// - /// # Arguments - /// - /// - `into_result`: name of variable to store result from target state into - /// - `stack_suffix`: the suffix of the LR stack that current state is aware of, - /// and how it is distributed into optional/fixed slots - /// - `next_index`: target state - /// - `other_args`: other arguments we are threading along - fn transition( - &mut self, - into_result: &str, - stack_suffix: StackSuffix<'grammar>, - next_index: StateIndex, - other_args: &[&str], - ) -> io::Result { - // the depth of the suffix of the stack that we are aware of - // in the current state, including the newly shifted token - let (optional, mut fixed) = stack_suffix.optional_fixed_lens(); - fixed += 1; // we just shifted another symbol - let total = optional + fixed; - assert!(total == stack_suffix.len() + 1); - - // symbols that the next state expects; will always be include - // at least one fixed input - let next_inputs = self.custom.state_inputs[next_index.0]; - assert!(next_inputs.fixed().len() >= 1); - assert!(next_inputs.len() <= total); - - let transfer_syms = try!(self.pop_syms(optional, fixed, next_inputs)); - - let other_args = other_args - .iter() - .map(|s| format!("{}{}", self.prefix, s)) - .collect(); - - let fn_name = format!("{}state{}", self.prefix, next_index.0); - - // invoke next state, transferring the top `m` tokens - let phantom_data_expr = self.phantom_data_expr(); - rust!( - self.out, - "{}{} = try!({}({}{}, {}, {}));", - self.prefix, - into_result, - fn_name, - self.grammar.user_parameter_refs(), - Sep(", ", &other_args), - Sep(", ", &transfer_syms), - phantom_data_expr - ); - - // if the target state takes at least **two** fixed tokens, - // then it will have consumed the top of **our** stack frame, - // so we should just return - if next_inputs.fixed().len() >= 2 { - rust!(self.out, "return Ok({}{});", self.prefix, into_result); - Ok(false) - } else { - Ok(true) - } - } - - /// Executes a reduction of `production`, storing the result into - /// the variable `into_var`, which should have type - /// `(Option<(L,T,L)>, Nonterminal)`. - fn emit_reduce_action( - &mut self, - into_var: &str, - stack_suffix: StackSuffix<'grammar>, - production: &'grammar Production, - ) -> io::Result<()> { - let loc_type = self.types.terminal_loc_type(); - - let (optional, fixed) = stack_suffix.optional_fixed_lens(); - let production_inputs = StackSuffix { - all: &production.symbols, - len_optional: 0, - }; - let transfer_syms = try!(self.pop_syms(optional, fixed, production_inputs)); - - // identify the "start" location for this production; this - // is typically the start of the first symbol we are - // reducing; but in the case of an empty production, it - // will be the last symbol pushed, or at worst `default`. - if let Some(first_sym) = transfer_syms.first() { - rust!( - self.out, - "let {}start = {}.0.clone();", - self.prefix, - first_sym - ); - } else if stack_suffix.len() > 0 { - // we pop no symbols, so grab from the top of the stack - // (unless we are in the start state) - let top = stack_suffix.len() - 1; - if !stack_suffix.fixed().is_empty() { - rust!( - self.out, - "let {}start = {}sym{}.2.clone();", - self.prefix, - self.prefix, - top - ); - } else { - // top of stack is optional; should not have been popped yet tho - rust!( - self.out, - "let {}start = {}sym{}.as_ref().unwrap().2.clone();", - self.prefix, - self.prefix, - top - ); - } - } else { - // this only occurs in the start state - rust!( - self.out, - "let {}start: {} = ::std::default::Default::default();", - self.prefix, - loc_type - ); - } - - // identify the "end" location for this production; - // this is typically the end of the last symbol we are reducing, - // but in the case of an empty production it will come from the - // lookahead - if let Some(last_sym) = transfer_syms.last() { - rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); - } else { - rust!( - self.out, - "let {}end = {}lookahead.as_ref().map(|o| o.0.clone()).unwrap_or_else(|| \ - {}start.clone());", - self.prefix, - self.prefix, - self.prefix - ); - } - - let transfered_syms = transfer_syms.len(); - - let mut args = transfer_syms; - if transfered_syms == 0 { - args.push(format!("&{}start", self.prefix)); - args.push(format!("&{}end", self.prefix)); - } - - // invoke the action code - let is_fallible = self.grammar.action_is_fallible(production.action); - if is_fallible { - rust!( - self.out, - "let {}nt = try!({}::{}action{}::<{}>({}{}));", - self.prefix, - self.action_module, - self.prefix, - production.action.index(), - Sep(", ", &self.grammar.non_lifetime_type_parameters()), - self.grammar.user_parameter_refs(), - Sep(", ", &args) - ) - } else { - rust!( - self.out, - "let {}nt = {}::{}action{}::<{}>({}{});", - self.prefix, - self.action_module, - self.prefix, - production.action.index(), - Sep(", ", &self.grammar.non_lifetime_type_parameters()), - self.grammar.user_parameter_refs(), - Sep(", ", &args) - ) - } - - // wrap up the produced value into `Nonterminal` along with - rust!( - self.out, - "let {}nt = {}Nonterminal::{}((", - self.prefix, - self.prefix, - Escape(&production.nonterminal) - ); - rust!(self.out, "{}start,", self.prefix); - rust!(self.out, "{}nt,", self.prefix); - rust!(self.out, "{}end,", self.prefix); - rust!(self.out, "));"); - - // wrap up the result along with the (unused) lookahead - rust!( - self.out, - "{}{} = ({}lookahead, {}nt);", - self.prefix, - into_var, - self.prefix, - self.prefix - ); - - Ok(()) - } - - /// Emit a pattern that matches `id` but doesn't extract any data. - fn match_terminal_pattern(&mut self, id: &TerminalString) -> String { - let pattern = self.grammar.pattern(id).map(&mut |_| "_"); - let pattern = format!("{}", pattern); - format!("(_, {}, _)", pattern) - } - - /// Emit a pattern that matches `id` and extracts its value, storing - /// that value as `let_name`. - fn consume_terminal(&mut self, id: &TerminalString, let_name: String) -> io::Result<()> { - let mut pattern_names = vec![]; - let pattern = self.grammar.pattern(id).map(&mut |_| { - let index = pattern_names.len(); - pattern_names.push(format!("{}tok{}", self.prefix, index)); - pattern_names.last().cloned().unwrap() - }); - - let mut pattern = format!("{}", pattern); - if pattern_names.is_empty() { - pattern_names.push(format!("{}tok", self.prefix)); - pattern = format!("{}tok @ {}", self.prefix, pattern); - } - - pattern = format!("({}loc1, {}, {}loc2)", self.prefix, pattern, self.prefix); - - rust!(self.out, "Some({}) => {{", pattern); - - rust!( - self.out, - "let {} = ({}loc1, ({}), {}loc2);", - let_name, - self.prefix, - pattern_names.join(", "), - self.prefix - ); - - Ok(()) - } - - fn triple_type(&self) -> TypeRepr { - self.types.triple_type() - } - - fn next_token(&mut self, lookahead: &str, tokens: &str) -> io::Result<()> { - rust!( - self.out, - "let {}{} = match {}{}.next() {{", - self.prefix, - lookahead, - self.prefix, - tokens - ); - rust!(self.out, "Some(Ok(v)) => Some(v),"); - rust!(self.out, "None => None,"); - if self.grammar.intern_token.is_some() { - // when we generate the tokenizer, the generated errors are `ParseError` values - rust!(self.out, "Some(Err(e)) => return Err(e),"); - } else { - // otherwise, they are user errors - rust!( - self.out, - "Some(Err(e)) => return Err({}lalrpop_util::ParseError::User {{ error: e }}),", - self.prefix - ); - } - rust!(self.out, "}};"); - Ok(()) - } -} +//! A compiler from an LR(1) table to a [recursive ascent] parser. +//! +//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser + +use collections::{Multimap, Set}; +use grammar::parse_tree::WhereClause; +use grammar::repr::{Grammar, NonterminalString, Production, Symbol, TerminalString, TypeParameter, + TypeRepr, Visibility}; +use lr1::core::*; +use lr1::lookahead::Token; +use lr1::state_graph::StateGraph; +use rust::RustWrite; +use std::io::{self, Write}; +use tls::Tls; +use util::{Escape, Sep}; + +use super::base::CodeGenerator; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + action_module: &str, + out: &mut RustWrite, +) -> io::Result<()> { + let graph = StateGraph::new(&states); + let mut ascent = CodeGenerator::new_ascent( + grammar, + user_start_symbol, + start_symbol, + &graph, + states, + action_module, + out, + ); + ascent.write() +} + +struct RecursiveAscent<'ascent, 'grammar> { + graph: &'ascent StateGraph, + + /// for each state, the set of symbols that it will require for + /// input + state_inputs: Vec>, + + /// type parameters for the `Nonterminal` type + nonterminal_type_params: Vec, + + nonterminal_where_clauses: Vec>, +} + +/// Tracks the suffix of the stack (that is, top-most elements) that any +/// particular state is aware of. We break the suffix into two parts: +/// optional and fixed, which always look like this: +/// +/// ``` +/// ... A B C X Y Z +/// ~~~ ~~~~~ ~~~~~ +/// | | | +/// | | Fixed (top of the stack) +/// | | +/// | Optional (will be popped after the fixed portion) +/// | +/// Prefix (stuff we don't know about that is also on the stack +/// ``` +/// +/// The idea of an "optional" member is not that it may or may not be +/// on the stack. The entire suffix will always be on the stack. An +/// *optional* member is one that *we* may or may not *consume*. So +/// the above stack suffix could occur given a state with items like: +/// +/// ``` +/// NT1 = A B C X Y Z (*) "." +/// NT2 = X Y Z (*) "," +/// ``` +/// +/// Depending on what comes next, if we reduce NT1, we will consume +/// all six symbols, but if we reduce NT2, we will only reduce three. +#[derive(Copy, Clone, Debug)] +struct StackSuffix<'grammar> { + /// all symbols that are known to be on the stack (optional + fixed). + all: &'grammar [Symbol], + + /// optional symbols will be consumed by *some* reductions in this + /// state, but not all + len_optional: usize, +} + +impl<'grammar> StackSuffix<'grammar> { + fn len(&self) -> usize { + self.all.len() + } + + /// returns the (optional, fixed) -- number of optional + /// items in stack prefix and numer of fixed + fn optional_fixed_lens(&self) -> (usize, usize) { + (self.len_optional, self.len() - self.len_optional) + } + + fn is_not_empty(&self) -> bool { + self.len() > 0 + } + + fn optional(&self) -> &'grammar [Symbol] { + &self.all[..self.len_optional] + } + + fn fixed(&self) -> &'grammar [Symbol] { + &self.all[self.len_optional..] + } +} + +impl<'ascent, 'grammar, W: Write> + CodeGenerator<'ascent, 'grammar, W, RecursiveAscent<'ascent, 'grammar>> +{ + fn new_ascent( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + graph: &'ascent StateGraph, + states: &'ascent [LR1State<'grammar>], + action_module: &str, + out: &'ascent mut RustWrite, + ) -> Self { + // The nonterminal type needs to be parameterized by all the + // type parameters that actually appear in the types of + // nonterminals. We can't just use *all* type parameters + // because that would leave unused lifetime/type parameters in + // some cases. + let referenced_ty_params: Set = grammar + .types + .nonterminal_types() + .into_iter() + .flat_map(|t| t.referenced()) + .collect(); + + let nonterminal_type_params: Vec<_> = grammar + .type_parameters + .iter() + .filter(|t| referenced_ty_params.contains(t)) + .cloned() + .collect(); + + let mut referenced_where_clauses = Set::new(); + for wc in &grammar.where_clauses { + wc.map(|ty| { + if ty.referenced() + .iter() + .any(|p| nonterminal_type_params.contains(p)) + { + referenced_where_clauses.insert(wc.clone()); + } + }); + } + + let nonterminal_where_clauses: Vec<_> = grammar + .where_clauses + .iter() + .filter(|wc| referenced_where_clauses.contains(wc)) + .cloned() + .collect(); + + let state_inputs = states + .iter() + .map(|state| Self::state_input_for(state)) + .collect(); + + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + false, + action_module, + RecursiveAscent { + graph: graph, + state_inputs: state_inputs, + nonterminal_type_params: nonterminal_type_params, + nonterminal_where_clauses: nonterminal_where_clauses, + }, + ) + } + + /// Compute the stack suffix that the state expects on entry. + fn state_input_for(state: &'ascent LR1State<'grammar>) -> StackSuffix<'grammar> { + let max_prefix = state.max_prefix(); + let will_pop = state.will_pop(); + StackSuffix { + all: max_prefix, + len_optional: max_prefix.len() - will_pop.len(), + } + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_start_fn()); + rust!(this.out, ""); + try!(this.write_return_type_defn()); + for i in 0..this.states.len() { + try!(this.write_state_fn(StateIndex(i))); + } + Ok(()) + }) + } + + fn write_return_type_defn(&mut self) -> io::Result<()> { + // sometimes some of the variants are not used, particularly + // if we are generating multiple parsers from the same file: + rust!(self.out, "#[allow(dead_code)]"); + rust!( + self.out, + "pub enum {}Nonterminal<{}>", + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params) + ); + + if !self.custom.nonterminal_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.nonterminal_where_clauses) + ); + } + + rust!(self.out, " {{"); + + // make an enum with one variant per nonterminal; I considered + // making different enums per state, but this would mean we + // have to unwrap and rewrap as we pass up the stack, which + // seems silly + for ref nt in self.grammar.nonterminals.keys() { + let ty = self.types + .spanned_type(self.types.nonterminal_type(nt).clone()); + rust!(self.out, "{}({}),", Escape(nt), ty); + } + + rust!(self.out, "}}"); + Ok(()) + } + + // Generates a function `parse_Foo` that will parse an entire + // input as `Foo`. An error is reported if the entire input is not + // consumed. + fn write_start_fn(&mut self) -> io::Result<()> { + let phantom_data = self.phantom_data_expr(); + try!(self.start_parser_fn()); + try!(self.define_tokens()); + + try!(self.next_token("lookahead", "tokens")); + rust!( + self.out, + "match try!({}state0({}&mut {}tokens, {}lookahead, {})) {{", + self.prefix, + self.grammar.user_parameter_refs(), + self.prefix, + self.prefix, + phantom_data + ); + + // extra tokens? + rust!(self.out, "(Some({}lookahead), _) => {{", self.prefix); + rust!( + self.out, + "Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }})", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + + // otherwise, we expect to see only the goal terminal + rust!( + self.out, + "(None, {}Nonterminal::{}((_, {}nt, _))) => {{", + self.prefix, + Escape(&self.start_symbol), + self.prefix + ); + rust!(self.out, "Ok({}nt)", self.prefix); + rust!(self.out, "}}"); + + // nothing else should be possible + rust!(self.out, "_ => unreachable!(),"); + rust!(self.out, "}}"); + + self.end_parser_fn() + } + + /// Writes the function that corresponds to a given state. This + /// function takes arguments corresponding to the stack slots of + /// the LR(1) machine. It consumes tokens and handles reduces + /// etc. It will return once it has popped at least one symbol off + /// of the LR stack. + /// + /// Note that for states which have a custom kind, this function + /// emits nothing at all other than a possible comment explaining + /// the state. + fn write_state_fn(&mut self, this_index: StateIndex) -> io::Result<()> { + let this_state = &self.states[this_index.0]; + let inputs = self.custom.state_inputs[this_index.0]; + + rust!(self.out, ""); + + // Leave a comment explaining what this state is. + if Tls::session().emit_comments { + rust!(self.out, "// State {}", this_index.0); + rust!(self.out, "// AllInputs = {:?}", inputs.all); + rust!(self.out, "// OptionalInputs = {:?}", inputs.optional()); + rust!(self.out, "// FixedInputs = {:?}", inputs.fixed()); + rust!( + self.out, + "// WillPushLen = {:?}", + this_state.will_push().len() + ); + rust!(self.out, "// WillPush = {:?}", this_state.will_push()); + rust!( + self.out, + "// WillProduce = {:?}", + this_state.will_produce() + ); + rust!(self.out, "//"); + for item in this_state.items.vec.iter() { + rust!(self.out, "// {:?}", item); + } + rust!(self.out, "//"); + for (terminal, action) in &this_state.shifts { + rust!(self.out, "// {:?} -> {:?}", terminal, action); + } + for &(ref tokens, action) in &this_state.reductions { + rust!(self.out, "// {:?} -> {:?}", tokens, action); + } + rust!(self.out, "//"); + for (nt, state) in &this_state.gotos { + rust!(self.out, "// {:?} -> {:?}", nt, state); + } + } + + try!(self.emit_state_fn_header("state", this_index.0, inputs)); + + // possibly move some fixed inputs into optional stack slots + let stack_suffix = try!(self.adjust_inputs(this_index, inputs)); + + // set to true if goto actions are worth generating + let mut fallthrough = false; + + rust!(self.out, "match {}lookahead {{", self.prefix); + + // first emit shifts: + for (terminal, &next_index) in &this_state.shifts { + let sym_name = format!("{}sym{}", self.prefix, inputs.len()); + try!(self.consume_terminal(terminal, sym_name)); + + // transition to the new state + if try!(self.transition("result", stack_suffix, next_index, &["tokens"])) { + fallthrough = true; + } + + rust!(self.out, "}}"); + } + + // now emit reduces. It frequently happens that many tokens + // trigger the same reduction, so group these by the + // production that we are going to be reducing. + let reductions: Multimap<_, Vec<_>> = this_state + .reductions + .iter() + .flat_map(|&(ref tokens, production)| tokens.iter().map(move |t| (production, t))) + .collect(); + for (production, tokens) in reductions { + for (index, token) in tokens.iter().enumerate() { + let pattern = match *token { + Token::Terminal(ref s) => format!("Some({})", self.match_terminal_pattern(s)), + Token::Error => { + panic!("Error recovery is not implemented for recursive ascent parsers") + } + Token::EOF => format!("None"), + }; + if index < tokens.len() - 1 { + rust!(self.out, "{} |", pattern); + } else { + rust!(self.out, "{} => {{", pattern); + } + } + + try!(self.emit_reduce_action("result", stack_suffix, production)); + + if production.symbols.len() > 0 { + // if we popped anything off of the stack, then this frame is done + rust!(self.out, "return Ok({}result);", self.prefix); + } else { + fallthrough = true; + } + + rust!(self.out, "}}"); + } + + // if we hit this, the next token is not recognized, so generate an error + rust!(self.out, "_ => {{"); + // The terminals which would have resulted in a successful parse in this state + let successful_terminals = self.grammar.terminals.all.iter().filter(|&terminal| { + this_state.shifts.contains_key(terminal) + || this_state + .reductions + .iter() + .any(|&(ref t, _)| t.contains(&Token::Terminal(terminal.clone()))) + }); + rust!( + self.out, + "return Err({}lalrpop_util::ParseError::UnrecognizedToken {{", + self.prefix + ); + rust!(self.out, "token: {}lookahead,", self.prefix); + rust!(self.out, "expected: vec!["); + for terminal in successful_terminals { + rust!(self.out, "r###\"{}\"###.to_string(),", terminal); + } + rust!(self.out, "]"); + rust!(self.out, "}});"); + rust!(self.out, "}}"); + + rust!(self.out, "}}"); // match + + // finally, emit gotos (if relevant) + if fallthrough && !this_state.gotos.is_empty() { + rust!(self.out, "loop {{"); + + // In most states, we know precisely when the top stack + // slot will be consumed (basically, when we reduce or + // when we transition to another state). But in some states, + // we may not know. Consider: + // + // X = A (*) "0" ["."] + // X = A (*) B ["."] + // B = (*) "0" "1" ["."] + // + // Now if we see a `"0"` this *could* be the start of a `B + // = "0" "1"` or it could be the continuation of `X = A + // "0"`. We won't know until we see the *next* character + // (which will either be `"0"` or `"."`). If it turns out to be + // `X = A "0"`, then the state handling the `"0"` will reduce + // and consume the `A` and the `"0"`. But otherwise it will shift + // the `"1"` and leave the `A` unprocessed. + // + // In cases like this, the `adjust_inputs` routine will + // have taken the top of the stack ("A") and put it into + // an `Option`. After the state processing the `"0"` + // returns then, we can check this option to see whether + // it has popped the `"A"` (in which case we ought to + // return) or not (in which case we ought to shift the `B` + // value that it returned to us). + let top_slot_optional = + { stack_suffix.is_not_empty() && stack_suffix.fixed().is_empty() }; + if top_slot_optional { + rust!( + self.out, + "if {}sym{}.is_none() {{", + self.prefix, + stack_suffix.len() - 1 + ); + rust!(self.out, "return Ok({}result);", self.prefix); + rust!(self.out, "}}"); + } + + rust!( + self.out, + "let ({}lookahead, {}nt) = {}result;", + self.prefix, + self.prefix, + self.prefix + ); + + rust!(self.out, "match {}nt {{", self.prefix); + for (ref nt, &next_index) in &this_state.gotos { + // The nonterminal we are shifting becomes symN, where + // N is the number of inputs to this state (which are + // numbered sym0..sym(N-1)). It is never optional + // because we always transition to a state with at + // least *one* fixed input. + rust!( + self.out, + "{}Nonterminal::{}({}sym{}) => {{", + self.prefix, + Escape(nt), + self.prefix, + stack_suffix.len() + ); + try!(self.transition("result", stack_suffix, next_index, &["tokens", "lookahead"])); + rust!(self.out, "}}"); + } + + // Errors are not possible in the goto phase; a missing entry + // indicates parse successfully completed, so just bail out. + if this_state.gotos.len() != self.grammar.nonterminals.keys().len() { + rust!(self.out, "_ => {{"); + rust!( + self.out, + "return Ok(({}lookahead, {}nt));", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + } + + rust!(self.out, "}}"); // match + + rust!(self.out, "}}"); // while/loop + } else if fallthrough { + rust!(self.out, "return Ok({}result);", self.prefix); + } + + rust!(self.out, "}}"); // fn + + Ok(()) + } + + fn emit_state_fn_header( + &mut self, + fn_kind: &str, // e.g. "state", "custom" + fn_index: usize, // state index, custom kind index, etc + suffix: StackSuffix<'grammar>, + ) -> io::Result<()> { + let optional_prefix = suffix.optional(); + let fixed_prefix = suffix.fixed(); + + let triple_type = self.triple_type(); + let parse_error_type = self.types.parse_error_type(); + let error_type = self.types.error_type(); + + // If we are generated the tokenizer, it generates ParseError + // errors, otherwise they are user errors. + let iter_error_type = if self.grammar.intern_token.is_some() { + parse_error_type + } else { + &error_type + }; + + let (fn_args, starts_with_terminal) = self.fn_args(optional_prefix, fixed_prefix); + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{}{}{}", self.prefix, fn_kind, fn_index), + vec![ + format!( + "{}TOKENS: Iterator>", + self.prefix, triple_type, iter_error_type + ), + ], + None, + fn_args, + format!( + "Result<(Option<{}>, {}Nonterminal<{}>), {}>", + triple_type, + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params), + parse_error_type + ), + vec![] + )); + + rust!(self.out, "{{"); + + rust!( + self.out, + "let mut {}result: (Option<{}>, {}Nonterminal<{}>);", + self.prefix, + triple_type, + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params) + ); + + // shift lookahead is necessary; see `starts_with_terminal` above + if starts_with_terminal { + try!(self.next_token("lookahead", "tokens")); + } + + Ok(()) + } + + // Compute the set of arguments that the function for a state or + // custom-kind expects. The argument `symbols` represents the top + // portion of the stack which this function expects to be given. + // Each of them will be given an argument like `sym3: &mut + // Option` where `Sym3` is the type of the symbol. + // + // Returns a list of argument names and a flag if this fn resulted + // from pushing a terminal (in which case the lookahead must be + // computed interally). + fn fn_args( + &mut self, + optional_prefix: &[Symbol], + fixed_prefix: &[Symbol], + ) -> (Vec, bool) { + assert!( + // start state: + (optional_prefix.is_empty() && fixed_prefix.is_empty()) || + /* any other state: */ !fixed_prefix.is_empty() + ); + let triple_type = self.triple_type(); + + // to reduce the size of the generated code, if the state + // results from shifting a terminal, then we do not pass the + // lookahead in as an argument, but rather we load it as the + // first thing in this function; this saves some space because + // there are more edges than there are states in the graph. + let starts_with_terminal = fixed_prefix + .last() + .map(|l| l.is_terminal()) + .unwrap_or(false); + + let mut base_args = vec![format!("{}tokens: &mut {}TOKENS", self.prefix, self.prefix)]; + if !starts_with_terminal { + base_args.push(format!("{}lookahead: Option<{}>", self.prefix, triple_type)); + } + + // "Optional symbols" may or may not be consumed, so take an + // `&mut Option` + let optional_args = (0..optional_prefix.len()).map(|i| { + format!( + "{}sym{}: &mut Option<{}>", + self.prefix, + i, + self.types + .spanned_type(optional_prefix[i].ty(&self.types).clone()) + ) + }); + + // "Fixed symbols" will be consumed before we return, so take the value itself + let fixed_args = (0..fixed_prefix.len()).map(|i| { + format!( + "{}sym{}: {}", + self.prefix, + optional_prefix.len() + i, + self.types + .spanned_type(fixed_prefix[i].ty(&self.types).clone()) + ) + }); + + let all_args = base_args + .into_iter() + .chain(optional_args) + .chain(fixed_args) + .chain(Some(format!("_: {}", self.phantom_data_type()))) + .collect(); + + (all_args, starts_with_terminal) + } + + /// Examine the states that we may transition to. Unless this is + /// the start state, we will always take at least 1 fixed input: + /// the most recently pushed symbol (let's call it `symX`), and we + /// may have others as well. But if this state can transition to + /// another state can takes some of those inputs as optional + /// parameters, we need to convert them them options. This + /// function thus emits code to move each sum `symX` into an + /// option, and returns an adjusted stack-suffix that reflects the + /// changes made. + fn adjust_inputs( + &mut self, + state_index: StateIndex, + inputs: StackSuffix<'grammar>, + ) -> io::Result> { + let mut result = inputs; + + let top_opt = self.custom + .graph + .successors(state_index) + .iter() + .any(|succ_state| { + let succ_inputs = &self.custom.state_inputs[succ_state.0]; + + // Check for a successor state with a suffix like: + // + // ... OPT_1 ... OPT_N FIXED_1 + // + // (Remember that *every* successor state will have + // at least one fixed input.) + // + // So basically we are looking for states + // that, when they return, may *optionally* have consumed + // the top of our stack. + assert!(succ_inputs.fixed().len() >= 1); + succ_inputs.fixed().len() == 1 && succ_inputs.optional().len() > 0 + }); + + // If we find a successor that may optionally consume the top + // of our stack, convert our fixed inputs into optional ones. + // + // (Here we convert *all* fixed inputs. Honestly, I can't + // remember if this is necessary, or just for simplicity. I + // suspect the latter. --nmatsakis) + if top_opt { + let start_num = inputs.optional().len(); + for sym_num in (start_num..start_num + inputs.fixed().len()) { + rust!( + self.out, + "let {}sym{} = &mut Some({}sym{});", + self.prefix, + sym_num, + self.prefix, + sym_num + ); + } + result.len_optional = result.len(); + } + + Ok(result) + } + + /// Given that we have, locally, `optional` number of optional stack slots + /// followed by `fixed` number of fixed stack slots, prepare the inputs + /// to be supplied to `inputs`. Returns a string of names for this inputs. + fn pop_syms( + &mut self, + optional: usize, + fixed: usize, + inputs: StackSuffix<'grammar>, + ) -> io::Result> { + let total_have = optional + fixed; + let total_need = inputs.len(); + (total_have - total_need .. total_have) // number relative to us + .zip(0 .. total_need) // number relative to them + .map(|(h, n)| { + let name = format!("{}sym{}", self.prefix, h); + let have_optional = h < optional; + let need_optional = n < inputs.len_optional; + + // if we have something stored in an `Option`, but the next state + // consumes it unconditionally, then "pop" it + if have_optional && !need_optional { + rust!(self.out, "let {} = {}.take().unwrap();", name, name); + } else { + // we should never have something stored + // unconditionally that the next state only + // "maybe" consumes -- we should have fixed this + // in the `adjust_inputs` phase + assert_eq!(have_optional, need_optional); + } + Ok(name) + }) + .collect() + } + + /// Emit code to shift/goto into the state `next_index`. Returns + /// `true` if the current state may be valid after the target + /// state returns, or `false` if `transition` will just return + /// afterwards. + /// + /// # Arguments + /// + /// - `into_result`: name of variable to store result from target state into + /// - `stack_suffix`: the suffix of the LR stack that current state is aware of, + /// and how it is distributed into optional/fixed slots + /// - `next_index`: target state + /// - `other_args`: other arguments we are threading along + fn transition( + &mut self, + into_result: &str, + stack_suffix: StackSuffix<'grammar>, + next_index: StateIndex, + other_args: &[&str], + ) -> io::Result { + // the depth of the suffix of the stack that we are aware of + // in the current state, including the newly shifted token + let (optional, mut fixed) = stack_suffix.optional_fixed_lens(); + fixed += 1; // we just shifted another symbol + let total = optional + fixed; + assert!(total == stack_suffix.len() + 1); + + // symbols that the next state expects; will always be include + // at least one fixed input + let next_inputs = self.custom.state_inputs[next_index.0]; + assert!(next_inputs.fixed().len() >= 1); + assert!(next_inputs.len() <= total); + + let transfer_syms = try!(self.pop_syms(optional, fixed, next_inputs)); + + let other_args = other_args + .iter() + .map(|s| format!("{}{}", self.prefix, s)) + .collect(); + + let fn_name = format!("{}state{}", self.prefix, next_index.0); + + // invoke next state, transferring the top `m` tokens + let phantom_data_expr = self.phantom_data_expr(); + rust!( + self.out, + "{}{} = try!({}({}{}, {}, {}));", + self.prefix, + into_result, + fn_name, + self.grammar.user_parameter_refs(), + Sep(", ", &other_args), + Sep(", ", &transfer_syms), + phantom_data_expr + ); + + // if the target state takes at least **two** fixed tokens, + // then it will have consumed the top of **our** stack frame, + // so we should just return + if next_inputs.fixed().len() >= 2 { + rust!(self.out, "return Ok({}{});", self.prefix, into_result); + Ok(false) + } else { + Ok(true) + } + } + + /// Executes a reduction of `production`, storing the result into + /// the variable `into_var`, which should have type + /// `(Option<(L,T,L)>, Nonterminal)`. + fn emit_reduce_action( + &mut self, + into_var: &str, + stack_suffix: StackSuffix<'grammar>, + production: &'grammar Production, + ) -> io::Result<()> { + let loc_type = self.types.terminal_loc_type(); + + let (optional, fixed) = stack_suffix.optional_fixed_lens(); + let production_inputs = StackSuffix { + all: &production.symbols, + len_optional: 0, + }; + let transfer_syms = try!(self.pop_syms(optional, fixed, production_inputs)); + + // identify the "start" location for this production; this + // is typically the start of the first symbol we are + // reducing; but in the case of an empty production, it + // will be the last symbol pushed, or at worst `default`. + if let Some(first_sym) = transfer_syms.first() { + rust!( + self.out, + "let {}start = {}.0.clone();", + self.prefix, + first_sym + ); + } else if stack_suffix.len() > 0 { + // we pop no symbols, so grab from the top of the stack + // (unless we are in the start state) + let top = stack_suffix.len() - 1; + if !stack_suffix.fixed().is_empty() { + rust!( + self.out, + "let {}start = {}sym{}.2.clone();", + self.prefix, + self.prefix, + top + ); + } else { + // top of stack is optional; should not have been popped yet tho + rust!( + self.out, + "let {}start = {}sym{}.as_ref().unwrap().2.clone();", + self.prefix, + self.prefix, + top + ); + } + } else { + // this only occurs in the start state + rust!( + self.out, + "let {}start: {} = ::std::default::Default::default();", + self.prefix, + loc_type + ); + } + + // identify the "end" location for this production; + // this is typically the end of the last symbol we are reducing, + // but in the case of an empty production it will come from the + // lookahead + if let Some(last_sym) = transfer_syms.last() { + rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); + } else { + rust!( + self.out, + "let {}end = {}lookahead.as_ref().map(|o| o.0.clone()).unwrap_or_else(|| \ + {}start.clone());", + self.prefix, + self.prefix, + self.prefix + ); + } + + let transfered_syms = transfer_syms.len(); + + let mut args = transfer_syms; + if transfered_syms == 0 { + args.push(format!("&{}start", self.prefix)); + args.push(format!("&{}end", self.prefix)); + } + + // invoke the action code + let is_fallible = self.grammar.action_is_fallible(production.action); + if is_fallible { + rust!( + self.out, + "let {}nt = try!({}::{}action{}::<{}>({}{}));", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ) + } else { + rust!( + self.out, + "let {}nt = {}::{}action{}::<{}>({}{});", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ) + } + + // wrap up the produced value into `Nonterminal` along with + rust!( + self.out, + "let {}nt = {}Nonterminal::{}((", + self.prefix, + self.prefix, + Escape(&production.nonterminal) + ); + rust!(self.out, "{}start,", self.prefix); + rust!(self.out, "{}nt,", self.prefix); + rust!(self.out, "{}end,", self.prefix); + rust!(self.out, "));"); + + // wrap up the result along with the (unused) lookahead + rust!( + self.out, + "{}{} = ({}lookahead, {}nt);", + self.prefix, + into_var, + self.prefix, + self.prefix + ); + + Ok(()) + } + + /// Emit a pattern that matches `id` but doesn't extract any data. + fn match_terminal_pattern(&mut self, id: &TerminalString) -> String { + let pattern = self.grammar.pattern(id).map(&mut |_| "_"); + let pattern = format!("{}", pattern); + format!("(_, {}, _)", pattern) + } + + /// Emit a pattern that matches `id` and extracts its value, storing + /// that value as `let_name`. + fn consume_terminal(&mut self, id: &TerminalString, let_name: String) -> io::Result<()> { + let mut pattern_names = vec![]; + let pattern = self.grammar.pattern(id).map(&mut |_| { + let index = pattern_names.len(); + pattern_names.push(format!("{}tok{}", self.prefix, index)); + pattern_names.last().cloned().unwrap() + }); + + let mut pattern = format!("{}", pattern); + if pattern_names.is_empty() { + pattern_names.push(format!("{}tok", self.prefix)); + pattern = format!("{}tok @ {}", self.prefix, pattern); + } + + pattern = format!("({}loc1, {}, {}loc2)", self.prefix, pattern, self.prefix); + + rust!(self.out, "Some({}) => {{", pattern); + + rust!( + self.out, + "let {} = ({}loc1, ({}), {}loc2);", + let_name, + self.prefix, + pattern_names.join(", "), + self.prefix + ); + + Ok(()) + } + + fn triple_type(&self) -> TypeRepr { + self.types.triple_type() + } + + fn next_token(&mut self, lookahead: &str, tokens: &str) -> io::Result<()> { + rust!( + self.out, + "let {}{} = match {}{}.next() {{", + self.prefix, + lookahead, + self.prefix, + tokens + ); + rust!(self.out, "Some(Ok(v)) => Some(v),"); + rust!(self.out, "None => None,"); + if self.grammar.intern_token.is_some() { + // when we generate the tokenizer, the generated errors are `ParseError` values + rust!(self.out, "Some(Err(e)) => return Err(e),"); + } else { + // otherwise, they are user errors + rust!( + self.out, + "Some(Err(e)) => return Err({}lalrpop_util::ParseError::User {{ error: e }}),", + self.prefix + ); + } + rust!(self.out, "}};"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/codegen/base.rs b/third_party/rust/lalrpop/src/lr1/codegen/base.rs index 2d59f6780e8c..73206109519f 100644 --- a/third_party/rust/lalrpop/src/lr1/codegen/base.rs +++ b/third_party/rust/lalrpop/src/lr1/codegen/base.rs @@ -1,279 +1,279 @@ -//! Base helper routines for a code generator. - -use grammar::repr::*; -use lr1::core::*; -use rust::RustWrite; -use std::io::{self, Write}; -use util::Sep; - -/// Base struct for various kinds of code generator. The flavor of -/// code generator is customized by supplying distinct types for `C` -/// (e.g., `self::ascent::RecursiveAscent`). -pub struct CodeGenerator<'codegen, 'grammar: 'codegen, W: Write + 'codegen, C> { - /// the complete grammar - pub grammar: &'grammar Grammar, - - /// some suitable prefix to separate our identifiers from the user's - pub prefix: &'grammar str, - - /// types from the grammar - pub types: &'grammar Types, - - /// the start symbol S the user specified - pub user_start_symbol: NonterminalString, - - /// the synthetic start symbol S' that we specified - pub start_symbol: NonterminalString, - - /// the vector of states - pub states: &'codegen [LR1State<'grammar>], - - /// where we write output - pub out: &'codegen mut RustWrite, - - /// where to find the action routines (typically `super`) - pub action_module: String, - - /// custom fields for the specific kind of codegenerator - /// (recursive ascent, table-driven, etc) - pub custom: C, - - pub repeatable: bool, -} - -impl<'codegen, 'grammar, W: Write, C> CodeGenerator<'codegen, 'grammar, W, C> { - pub fn new( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &'codegen [LR1State<'grammar>], - out: &'codegen mut RustWrite, - repeatable: bool, - action_module: &str, - custom: C, - ) -> Self { - CodeGenerator { - grammar: grammar, - prefix: &grammar.prefix, - types: &grammar.types, - states: states, - user_start_symbol: user_start_symbol, - start_symbol: start_symbol, - out: out, - custom: custom, - repeatable: repeatable, - action_module: action_module.to_string(), - } - } - - pub fn write_parse_mod(&mut self, body: F) -> io::Result<()> - where - F: FnOnce(&mut Self) -> io::Result<()>, - { - rust!(self.out, ""); - rust!(self.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); - rust!(self.out, "mod {}parse{} {{", self.prefix, self.start_symbol); - - // these stylistic lints are annoying for the generated code, - // which doesn't follow conventions: - rust!( - self.out, - "#![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, \ - unused_imports, unused_parens)]" - ); - rust!(self.out, ""); - - try!(self.write_uses()); - - try!(body(self)); - - rust!(self.out, "}}"); - Ok(()) - } - - pub fn write_uses(&mut self) -> io::Result<()> { - try!( - self.out - .write_uses(&format!("{}::", self.action_module), &self.grammar) - ); - - if self.grammar.intern_token.is_some() { - rust!( - self.out, - "use {}::{}intern_token::Token;", - self.action_module, - self.prefix - ); - } else { - rust!( - self.out, - "use {}::{}ToTriple;", - self.action_module, - self.prefix - ); - } - - Ok(()) - } - - pub fn start_parser_fn(&mut self) -> io::Result<()> { - let error_type = self.types.error_type(); - let parse_error_type = self.types.parse_error_type(); - - let (type_parameters, parameters, mut where_clauses); - - let intern_token = self.grammar.intern_token.is_some(); - if intern_token { - // if we are generating the tokenizer, we just need the - // input, and that has already been added as one of the - // user parameters - type_parameters = vec![]; - parameters = vec![]; - where_clauses = vec![]; - } else { - // otherwise, we need an iterator of type `TOKENS` - let mut user_type_parameters = String::new(); - for type_parameter in &self.grammar.type_parameters { - user_type_parameters.push_str(&format!("{}, ", type_parameter)); - } - type_parameters = vec![ - format!( - "{}TOKEN: {}ToTriple<{}Error={}>", - self.prefix, self.prefix, user_type_parameters, error_type - ), - format!( - "{}TOKENS: IntoIterator", - self.prefix, self.prefix - ), - ]; - parameters = vec![format!("{}tokens0: {}TOKENS", self.prefix, self.prefix)]; - where_clauses = vec![]; - - if self.repeatable { - where_clauses.push(format!("{}TOKENS: Clone", self.prefix)); - } - } - - rust!( - self.out, - "{}struct {}Parser {{", - self.grammar.nonterminals[&self.start_symbol].visibility, - self.user_start_symbol - ); - if intern_token { - rust!( - self.out, - "builder: {1}::{0}intern_token::{0}MatcherBuilder,", - self.prefix, - self.action_module - ); - } - rust!(self.out, "_priv: (),"); - rust!(self.out, "}}"); - rust!(self.out, ""); - - rust!(self.out, "impl {}Parser {{", self.user_start_symbol); - rust!( - self.out, - "{}fn new() -> {}Parser {{", - self.grammar.nonterminals[&self.start_symbol].visibility, - self.user_start_symbol - ); - if intern_token { - rust!( - self.out, - "let {0}builder = {1}::{0}intern_token::{0}MatcherBuilder::new();", - self.prefix, - self.action_module - ); - } - rust!(self.out, "{}Parser {{", self.user_start_symbol); - if intern_token { - rust!(self.out, "builder: {}builder,", self.prefix); - } - rust!(self.out, "_priv: (),"); - rust!(self.out, "}}"); // Parser - rust!(self.out, "}}"); // new() - rust!(self.out, ""); - - rust!(self.out, "#[allow(dead_code)]"); - try!(self.out.write_fn_header( - self.grammar, - &self.grammar.nonterminals[&self.start_symbol].visibility, - "parse".to_owned(), - type_parameters, - Some("&self".to_owned()), - parameters, - format!( - "Result<{}, {}>", - self.types.nonterminal_type(&self.start_symbol), - parse_error_type - ), - where_clauses - )); - rust!(self.out, "{{"); - - Ok(()) - } - - pub fn define_tokens(&mut self) -> io::Result<()> { - if self.grammar.intern_token.is_some() { - // if we are generating the tokenizer, create a matcher as our input iterator - rust!( - self.out, - "let mut {}tokens = self.builder.matcher(input);", - self.prefix - ); - } else { - // otherwise, convert one from the `IntoIterator` - // supplied, using the `ToTriple` trait which inserts - // errors/locations etc if none are given - let clone_call = if self.repeatable { ".clone()" } else { "" }; - rust!( - self.out, - "let {}tokens = {}tokens0{}.into_iter();", - self.prefix, - self.prefix, - clone_call - ); - - rust!( - self.out, - "let mut {}tokens = {}tokens.map(|t| {}ToTriple::to_triple(t));", - self.prefix, - self.prefix, - self.prefix - ); - } - - Ok(()) - } - - pub fn end_parser_fn(&mut self) -> io::Result<()> { - rust!(self.out, "}}"); // fn - rust!(self.out, "}}"); // impl - Ok(()) - } - - /// Returns phantom data type that captures the user-declared type - /// parameters in a phantom-data. This helps with ensuring that - /// all type parameters are constrained, even if they are not - /// used. - pub fn phantom_data_type(&self) -> String { - format!( - "::std::marker::PhantomData<({})>", - Sep(", ", &self.grammar.non_lifetime_type_parameters()) - ) - } - - /// Returns expression that captures the user-declared type - /// parameters in a phantom-data. This helps with ensuring that - /// all type parameters are constrained, even if they are not - /// used. - pub fn phantom_data_expr(&self) -> String { - format!( - "::std::marker::PhantomData::<({})>", - Sep(", ", &self.grammar.non_lifetime_type_parameters()) - ) - } -} +//! Base helper routines for a code generator. + +use grammar::repr::*; +use lr1::core::*; +use rust::RustWrite; +use std::io::{self, Write}; +use util::Sep; + +/// Base struct for various kinds of code generator. The flavor of +/// code generator is customized by supplying distinct types for `C` +/// (e.g., `self::ascent::RecursiveAscent`). +pub struct CodeGenerator<'codegen, 'grammar: 'codegen, W: Write + 'codegen, C> { + /// the complete grammar + pub grammar: &'grammar Grammar, + + /// some suitable prefix to separate our identifiers from the user's + pub prefix: &'grammar str, + + /// types from the grammar + pub types: &'grammar Types, + + /// the start symbol S the user specified + pub user_start_symbol: NonterminalString, + + /// the synthetic start symbol S' that we specified + pub start_symbol: NonterminalString, + + /// the vector of states + pub states: &'codegen [LR1State<'grammar>], + + /// where we write output + pub out: &'codegen mut RustWrite, + + /// where to find the action routines (typically `super`) + pub action_module: String, + + /// custom fields for the specific kind of codegenerator + /// (recursive ascent, table-driven, etc) + pub custom: C, + + pub repeatable: bool, +} + +impl<'codegen, 'grammar, W: Write, C> CodeGenerator<'codegen, 'grammar, W, C> { + pub fn new( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'codegen [LR1State<'grammar>], + out: &'codegen mut RustWrite, + repeatable: bool, + action_module: &str, + custom: C, + ) -> Self { + CodeGenerator { + grammar: grammar, + prefix: &grammar.prefix, + types: &grammar.types, + states: states, + user_start_symbol: user_start_symbol, + start_symbol: start_symbol, + out: out, + custom: custom, + repeatable: repeatable, + action_module: action_module.to_string(), + } + } + + pub fn write_parse_mod(&mut self, body: F) -> io::Result<()> + where + F: FnOnce(&mut Self) -> io::Result<()>, + { + rust!(self.out, ""); + rust!(self.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(self.out, "mod {}parse{} {{", self.prefix, self.start_symbol); + + // these stylistic lints are annoying for the generated code, + // which doesn't follow conventions: + rust!( + self.out, + "#![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, \ + unused_imports, unused_parens)]" + ); + rust!(self.out, ""); + + try!(self.write_uses()); + + try!(body(self)); + + rust!(self.out, "}}"); + Ok(()) + } + + pub fn write_uses(&mut self) -> io::Result<()> { + try!( + self.out + .write_uses(&format!("{}::", self.action_module), &self.grammar) + ); + + if self.grammar.intern_token.is_some() { + rust!( + self.out, + "use {}::{}intern_token::Token;", + self.action_module, + self.prefix + ); + } else { + rust!( + self.out, + "use {}::{}ToTriple;", + self.action_module, + self.prefix + ); + } + + Ok(()) + } + + pub fn start_parser_fn(&mut self) -> io::Result<()> { + let error_type = self.types.error_type(); + let parse_error_type = self.types.parse_error_type(); + + let (type_parameters, parameters, mut where_clauses); + + let intern_token = self.grammar.intern_token.is_some(); + if intern_token { + // if we are generating the tokenizer, we just need the + // input, and that has already been added as one of the + // user parameters + type_parameters = vec![]; + parameters = vec![]; + where_clauses = vec![]; + } else { + // otherwise, we need an iterator of type `TOKENS` + let mut user_type_parameters = String::new(); + for type_parameter in &self.grammar.type_parameters { + user_type_parameters.push_str(&format!("{}, ", type_parameter)); + } + type_parameters = vec![ + format!( + "{}TOKEN: {}ToTriple<{}Error={}>", + self.prefix, self.prefix, user_type_parameters, error_type + ), + format!( + "{}TOKENS: IntoIterator", + self.prefix, self.prefix + ), + ]; + parameters = vec![format!("{}tokens0: {}TOKENS", self.prefix, self.prefix)]; + where_clauses = vec![]; + + if self.repeatable { + where_clauses.push(format!("{}TOKENS: Clone", self.prefix)); + } + } + + rust!( + self.out, + "{}struct {}Parser {{", + self.grammar.nonterminals[&self.start_symbol].visibility, + self.user_start_symbol + ); + if intern_token { + rust!( + self.out, + "builder: {1}::{0}intern_token::{0}MatcherBuilder,", + self.prefix, + self.action_module + ); + } + rust!(self.out, "_priv: (),"); + rust!(self.out, "}}"); + rust!(self.out, ""); + + rust!(self.out, "impl {}Parser {{", self.user_start_symbol); + rust!( + self.out, + "{}fn new() -> {}Parser {{", + self.grammar.nonterminals[&self.start_symbol].visibility, + self.user_start_symbol + ); + if intern_token { + rust!( + self.out, + "let {0}builder = {1}::{0}intern_token::{0}MatcherBuilder::new();", + self.prefix, + self.action_module + ); + } + rust!(self.out, "{}Parser {{", self.user_start_symbol); + if intern_token { + rust!(self.out, "builder: {}builder,", self.prefix); + } + rust!(self.out, "_priv: (),"); + rust!(self.out, "}}"); // Parser + rust!(self.out, "}}"); // new() + rust!(self.out, ""); + + rust!(self.out, "#[allow(dead_code)]"); + try!(self.out.write_fn_header( + self.grammar, + &self.grammar.nonterminals[&self.start_symbol].visibility, + "parse".to_owned(), + type_parameters, + Some("&self".to_owned()), + parameters, + format!( + "Result<{}, {}>", + self.types.nonterminal_type(&self.start_symbol), + parse_error_type + ), + where_clauses + )); + rust!(self.out, "{{"); + + Ok(()) + } + + pub fn define_tokens(&mut self) -> io::Result<()> { + if self.grammar.intern_token.is_some() { + // if we are generating the tokenizer, create a matcher as our input iterator + rust!( + self.out, + "let mut {}tokens = self.builder.matcher(input);", + self.prefix + ); + } else { + // otherwise, convert one from the `IntoIterator` + // supplied, using the `ToTriple` trait which inserts + // errors/locations etc if none are given + let clone_call = if self.repeatable { ".clone()" } else { "" }; + rust!( + self.out, + "let {}tokens = {}tokens0{}.into_iter();", + self.prefix, + self.prefix, + clone_call + ); + + rust!( + self.out, + "let mut {}tokens = {}tokens.map(|t| {}ToTriple::to_triple(t));", + self.prefix, + self.prefix, + self.prefix + ); + } + + Ok(()) + } + + pub fn end_parser_fn(&mut self) -> io::Result<()> { + rust!(self.out, "}}"); // fn + rust!(self.out, "}}"); // impl + Ok(()) + } + + /// Returns phantom data type that captures the user-declared type + /// parameters in a phantom-data. This helps with ensuring that + /// all type parameters are constrained, even if they are not + /// used. + pub fn phantom_data_type(&self) -> String { + format!( + "::std::marker::PhantomData<({})>", + Sep(", ", &self.grammar.non_lifetime_type_parameters()) + ) + } + + /// Returns expression that captures the user-declared type + /// parameters in a phantom-data. This helps with ensuring that + /// all type parameters are constrained, even if they are not + /// used. + pub fn phantom_data_expr(&self) -> String { + format!( + "::std::marker::PhantomData::<({})>", + Sep(", ", &self.grammar.non_lifetime_type_parameters()) + ) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/codegen/mod.rs b/third_party/rust/lalrpop/src/lr1/codegen/mod.rs index bd1f4c90824f..a6290825f6c5 100644 --- a/third_party/rust/lalrpop/src/lr1/codegen/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/codegen/mod.rs @@ -1,4 +1,4 @@ -pub mod ascent; -mod base; -pub mod parse_table; -pub mod test_all; +pub mod ascent; +mod base; +pub mod parse_table; +pub mod test_all; diff --git a/third_party/rust/lalrpop/src/lr1/codegen/parse_table.rs b/third_party/rust/lalrpop/src/lr1/codegen/parse_table.rs index c68a222537e8..6ef29b59992d 100644 --- a/third_party/rust/lalrpop/src/lr1/codegen/parse_table.rs +++ b/third_party/rust/lalrpop/src/lr1/codegen/parse_table.rs @@ -1,2224 +1,2220 @@ -//! A compiler from an LR(1) table to a traditional table driven parser. - -use collections::{Entry, Map, Set}; -use grammar::parse_tree::WhereClause; -use grammar::repr::*; -use lr1::core::*; -use lr1::lookahead::Token; -use rust::RustWrite; -use std::fmt; -use std::io::{self, Write}; -use string_cache::DefaultAtom as Atom; -use tls::Tls; -use util::Sep; - -use super::base::CodeGenerator; - -const DEBUG_PRINT: bool = false; - -pub fn compile<'grammar, W: Write>( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &[LR1State<'grammar>], - action_module: &str, - out: &mut RustWrite, -) -> io::Result<()> { - let mut table_driven = CodeGenerator::new_table_driven( - grammar, - user_start_symbol, - start_symbol, - states, - action_module, - out, - ); - table_driven.write() -} - -// We create three parse tables: -// -// - `ACTION[state * num_states + terminal]: i32`: given a state and next token, -// yields an integer indicating whether to shift/reduce (see below) -// - `EOF_ACTION[state]: i32`: as above, but for the EOF token -// - `GOTO[state * num_states + nonterminal]: i32`: index + 1 of state to jump to when given -// nonterminal is pushed (no error is possible) -// -// For the `ACTION` and `EOF_ACTION` tables, the value is an `i32` and -// its interpretation varies depending on whether it is positive or -// negative: -// -// - if zero, parse error. -// - if a positive integer (not zero), it is the next state to shift to. -// - if a negative integer (not zero), it is the index of a reduction -// action to execute (actually index + 1). -// -// We maintain two stacks: one is a stack of state indexes (each an -// u32). The other is a stack of values and spans: `(L, T, L)`. `L` is -// the location type and represents the start/end span. `T` is the -// value of the symbol. The type `T` is an `enum` that we synthesize -// which contains a variant for all the possibilities: -// -// ``` -// enum Value<> { -// // One variant for each terminal: -// Term1(Ty1), -// ... -// TermN(TyN), -// -// // One variant for each nonterminal: -// Nt1(Ty1), -// ... -// NtN(TyN), -// } -// ``` -// -// The action parser function looks like this (pseudo-code): -// -// ``` -// fn parse_fn(tokens: TOKENS) -> Result -// where TOKENS: Iterator> -// { -// let mut states = vec![0]; // initial state is zero -// let mut symbols = vec![]; -// 'shift: loop { -// // Code to shift the next symbol and determine which terminal -// // it is; emitted by `shift_symbol()`. -// let lookahead = match tokens.next() { -// Some(Ok(l)) => l, -// None => break 'shift, -// Some(Err(e)) => return Err(e), -// }; -// let integer = match lookahead { -// (_, PatternForTerminal0(...), _) => 0, -// ... -// }; -// -// // Code to process next symbol. -// 'inner: loop { -// let symbol = match lookahead { -// (l, PatternForTerminal0(...), r) => { -// (l, Value::VariantForTerminal0(...), r), -// } -// ... -// }; -// let state = *states.last().unwrap() as usize; -// let action = ACTION[state * NUM_STATES + integer]; -// if action > 0 { // shift -// states.push(action - 1); -// symbols.push(symbol); -// continue 'shift; -// } else if action < 0 { // reduce -// if let Some(r) = reduce(action, Some(&lookahead.0), &mut states, &mut symbols) { -// // Give errors from within grammar a higher priority -// if r.is_err() { -// return r; -// } -// return Err(lalrpop_util::ParseError::ExtraToken { token: lookahead }); -// } -// } else { -// // Error recovery code: emitted by `try_error_recovery` -// let mut err_lookahead = Some(lookahead); -// let mut err_integer = Some(integer); -// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, -// &mut err_lookahead, &mut err_integer) { -// Err(e) => return e, -// Ok(Some(v)) => return Ok(v), -// Ok(None) => { } -// } -// match (err_lookahead, err_integer) { -// (Some(l), Some(i)) => { -// lookahead = l; -// integer = i; -// continue 'inner; -// } -// _ => break 'shift; -// } -// } -// } -// } -// -// // Process EOF -// while let Some(state) = self.states.pop() { -// let action = EOF_ACTION[state * NUM_STATES]; -// if action < 0 { // reduce -// try!(reduce(action, None, &mut states, &mut symbols)); -// } else { -// let mut err_lookahead = None; -// let mut err_integer = None; -// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, -// &mut err_lookahead, &mut err_integer) { -// Err(e) => return e, -// Ok(Some(v)) => return Ok(v), -// Ok(None) => { } -// } -// } -// } -// } -// -// // generated by `emit_reduce_actions()` -// fn reduce(action: i32, lookahead_start: Option<&L>, -// states: &mut Vec, symbols: &mut Vec<(L, Symbol, L)) -// -> Option> { -// let nonterminal = match -action { -// 0 => { -// // Execute reduce action 0 to produce nonterminal N, popping from stacks etc -// // (generated by `emit_reduce_action()`). If this is a fallible action, -// // it may return `Some(Err)`, and if this is a reduce of the start NT, -// // it may return `Some(Ok)`. -// states.pop(); // however many times -// symbols.pop(); // however many times -// let data = action_fn0(...); -// symbols.push((l, Value::VariantForNonterminalN(data), r)); -// N -// } -// ... -// }; -// let state = *states.last().unwrap(); -// let next_state = GOTO[state * NUM_STATES + nonterminal] - 1; -// state_stack.push(next_state); -// None -// } -// -// generated by `write_error_recovery_fn` -// fn error_recovery(...) { -// let mut dropped_tokens = vec![]; -// -// // First, reduce as long as we can with the `!` token as lookahead -// loop { -// let state = *states.last().unwrap() as usize; -// let action = ACTION[(state + 1) * ACTIONS_PER_STATE - 1]; -// if action >= 0 { -// break; -// } -// if let Some(r) = reduce(action, None, &mut states, &mut symbols) { -// return r; -// } -// } -// -// let top0; -// 'find_state: loop { -// // See if there is a state that can shift `!` token. If so, -// // break. -// for top in (0..states.len()).rev() { -// let state = states[top]; -// let action = ACTION[state * ACTIONS_PER_STATE + 1]; -// if action <= 0 { continue; } -// let error_state = action - 1; -// if accepts(error_state, &states[..top+1], *opt-integer) { -// top0 = top; -// break 'find_state; -// } -// } -// -// // Else, drop a token from the input and try again. -// 'eof: loop { -// match opt_lookahead.take() { -// None => { -// // No more tokens to drop -// return Err(...); -// } -// Some(mut lookahead) => { -// dropped_tokens.push(lookahead); -// next_token() -// opt_lookahead = Some(match tokens.next() { -// Some(Ok(l)) => l, -// None => break 'eof, -// Some(Err(e)) => return Err(e), -// }); -// opt_integer = Some(match lookahead { -// (_, PatternForTerminal0(...), _) => 0, -// ... -// }); -// continue 'find_state; -// } -// } -// } -// opt_lookahead = None; -// opt_integer = None; -// } -// -// let top = top0; -// let start = /* figure out "start" of error */; -// let end = /* figure out "end" of error */; -// states.truncate(top + 1); -// symbols.truncate(top); -// let recover_state = states[top]; -// let error_state = ACTION[recover_state * ACTIONS_PER_STATE + 1] - 1; -// states.push(error_state); -// let recovery = ErrorRecovery { dropped_tokens, ... }; -// symbols.push((start, Symbol::Termerror(recovery), end)); -// Ok(None) -// } -// ``` - -enum Comment<'a, T> { - Goto(T, usize), - Error(T), - Reduce(T, &'a Production), -} - -impl<'a, T: fmt::Display> fmt::Display for Comment<'a, T> { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - Comment::Goto(ref token, new_state) => { - write!(f, " // on {}, goto {}", token, new_state) - } - Comment::Error(ref token) => write!(f, " // on {}, error", token), - Comment::Reduce(ref token, production) => { - write!(f, " // on {}, reduce `{:?}`", token, production) - } - } - } -} - -struct TableDriven<'grammar> { - /// type parameters for the `Nonterminal` type - symbol_type_params: Vec, - - symbol_where_clauses: Vec>, - - /// a list of each nonterminal in some specific order - all_nonterminals: Vec, - - reduce_indices: Map<&'grammar Production, usize>, - - state_type: &'static str, - - variant_names: Map, - variants: Map, - reduce_functions: Set, -} - -impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TableDriven<'grammar>> { - fn new_table_driven( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &'ascent [LR1State<'grammar>], - action_module: &str, - out: &'ascent mut RustWrite, - ) -> Self { - // The nonterminal type needs to be parameterized by all the - // type parameters that actually appear in the types of - // nonterminals. We can't just use *all* type parameters - // because that would leave unused lifetime/type parameters in - // some cases. - let referenced_ty_params: Set = grammar - .types - .nonterminal_types() - .into_iter() - .chain(grammar.types.terminal_types()) - .flat_map(|t| t.referenced()) - .collect(); - - let symbol_type_params: Vec<_> = grammar - .type_parameters - .iter() - .filter(|t| referenced_ty_params.contains(t)) - .cloned() - .collect(); - - let mut referenced_where_clauses = Set::new(); - for wc in &grammar.where_clauses { - wc.map(|ty| { - if ty - .referenced() - .iter() - .any(|p| symbol_type_params.contains(p)) - { - referenced_where_clauses.insert(wc.clone()); - } - }); - } - - let symbol_where_clauses: Vec<_> = grammar - .where_clauses - .iter() - .filter(|wc| referenced_where_clauses.contains(wc)) - .cloned() - .collect(); - - // Assign each production a unique index to use as the values for reduce - // actions in the ACTION and EOF_ACTION tables. - let reduce_indices: Map<&'grammar Production, usize> = grammar - .nonterminals - .values() - .flat_map(|nt| &nt.productions) - .zip(0..) - .collect(); - - let state_type = { - // `reduce_indices` are allowed to be +1 since the negative maximum of any integer type - // is one larger than the positive maximum - let max_value = ::std::cmp::max(states.len(), reduce_indices.len()); - if max_value <= ::std::i8::MAX as usize { - "i8" - } else if max_value <= ::std::i16::MAX as usize { - "i16" - } else { - "i32" - } - }; - - CodeGenerator::new( - grammar, - user_start_symbol, - start_symbol, - states, - out, - false, - action_module, - TableDriven { - symbol_type_params: symbol_type_params, - symbol_where_clauses: symbol_where_clauses, - all_nonterminals: grammar.nonterminals.keys().cloned().collect(), - reduce_indices: reduce_indices, - state_type: state_type, - variant_names: Map::new(), - variants: Map::new(), - reduce_functions: Set::new(), - }, - ) - } - - fn write(&mut self) -> io::Result<()> { - self.write_parse_mod(|this| { - try!(this.write_value_type_defn()); - try!(this.write_parse_table()); - try!(this.write_parser_fn()); - try!(this.write_error_recovery_fn()); - try!(this.write_accepts_fn()); - try!(this.emit_reduce_actions()); - try!(this.emit_downcast_fns()); - try!(this.emit_reduce_action_functions()); - Ok(()) - }) - } - - fn write_value_type_defn(&mut self) -> io::Result<()> { - // sometimes some of the variants are not used, particularly - // if we are generating multiple parsers from the same file: - rust!(self.out, "#[allow(dead_code)]"); - rust!( - self.out, - "pub enum {}Symbol<{}>", - self.prefix, - Sep(", ", &self.custom.symbol_type_params) - ); - - if !self.custom.symbol_where_clauses.is_empty() { - rust!( - self.out, - " where {}", - Sep(", ", &self.custom.symbol_where_clauses) - ); - } - - rust!(self.out, " {{"); - - // make one variant per terminal - for term in &self.grammar.terminals.all { - let ty = self.types.terminal_type(term).clone(); - let len = self.custom.variants.len(); - let name = match self.custom.variants.entry(ty.clone()) { - Entry::Occupied(entry) => entry.into_mut(), - Entry::Vacant(entry) => { - let name = format!("Variant{}", len); - - rust!(self.out, "{}({}),", name, ty); - entry.insert(name) - } - }; - - self.custom - .variant_names - .insert(Symbol::Terminal(term.clone()), name.clone()); - } - - // make one variant per nonterminal - for nt in self.grammar.nonterminals.keys() { - let ty = self.types.nonterminal_type(nt).clone(); - let len = self.custom.variants.len(); - let name = match self.custom.variants.entry(ty.clone()) { - Entry::Occupied(entry) => entry.into_mut(), - Entry::Vacant(entry) => { - let name = format!("Variant{}", len); - - rust!(self.out, "{}({}),", name, ty); - entry.insert(name) - } - }; - - self.custom - .variant_names - .insert(Symbol::Nonterminal(nt.clone()), name.clone()); - } - rust!(self.out, "}}"); - Ok(()) - } - - fn write_parse_table(&mut self) -> io::Result<()> { - // The table is a two-dimensional matrix indexed first by state - // and then by the terminal index. The value is described above. - rust!( - self.out, - "const {}ACTION: &'static [{}] = &[", - self.prefix, - self.custom.state_type - ); - - for (index, state) in self.states.iter().enumerate() { - rust!(self.out, "// State {}", index); - - if Tls::session().emit_comments { - for item in state.items.vec.iter() { - rust!(self.out, "// {:?}", item); - } - } - - // Write an action for each terminal (either shift, reduce, or error). - let custom = &self.custom; - let iterator = self.grammar.terminals.all.iter().map(|terminal| { - if let Some(new_state) = state.shifts.get(&terminal) { - ( - new_state.0 as i32 + 1, - Comment::Goto(Token::Terminal(terminal.clone()), new_state.0), - ) - } else { - Self::write_reduction(custom, state, &Token::Terminal(terminal.clone())) - } - }); - try!(self.out.write_table_row(iterator)) - } - - rust!(self.out, "];"); - - // Actions on EOF. Indexed just by state. - rust!( - self.out, - "const {}EOF_ACTION: &'static [{}] = &[", - self.prefix, - self.custom.state_type - ); - for (index, state) in self.states.iter().enumerate() { - rust!(self.out, "// State {}", index); - let reduction = Self::write_reduction(&self.custom, state, &Token::EOF); - try!(self.out.write_table_row(Some(reduction))); - } - rust!(self.out, "];"); - - // The goto table is indexed by state and *nonterminal*. - rust!( - self.out, - "const {}GOTO: &'static [{}] = &[", - self.prefix, - self.custom.state_type - ); - for (index, state) in self.states.iter().enumerate() { - rust!(self.out, "// State {}", index); - let iterator = self.grammar.nonterminals.keys().map(|nonterminal| { - if let Some(&new_state) = state.gotos.get(&nonterminal) { - ( - new_state.0 as i32 + 1, - Comment::Goto(nonterminal, new_state.0), - ) - } else { - (0, Comment::Error(nonterminal)) - } - }); - try!(self.out.write_table_row(iterator)); - } - rust!(self.out, "];"); - - try!(self.emit_expected_tokens_fn()); - - Ok(()) - } - - fn write_reduction<'s>( - custom: &TableDriven<'grammar>, - state: &'s LR1State, - token: &Token, - ) -> (i32, Comment<'s, Token>) { - let reduction = state - .reductions - .iter() - .filter(|&&(ref t, _)| t.contains(token)) - .map(|&(_, p)| p) - .next(); - if let Some(production) = reduction { - let action = custom.reduce_indices[production]; - ( - -(action as i32 + 1), - Comment::Reduce(token.clone(), production), - ) - } else { - // Otherwise, this is an error. Store 0. - (0, Comment::Error(token.clone())) - } - } - - fn write_parser_fn(&mut self) -> io::Result<()> { - let phantom_data_expr = self.phantom_data_expr(); - - try!(self.start_parser_fn()); - - try!(self.define_tokens()); - - // State and data stack. - rust!( - self.out, - "let mut {}states = vec![0_{}];", - self.prefix, - self.custom.state_type - ); - rust!(self.out, "let mut {}symbols = vec![];", self.prefix); - - rust!(self.out, "let mut {}integer;", self.prefix); - rust!(self.out, "let mut {}lookahead;", self.prefix); - // The location of the last token is necessary for for error recovery at EOF (or they would not have - // a location) - rust!( - self.out, - "let {}last_location = &mut Default::default();", - self.prefix - ); - - // Outer loop: each time we continue around this loop, we - // shift a new token from the input. We break from the loop - // when the end of the input is reached (we return early if an - // error occurs). - rust!(self.out, "'{}shift: loop {{", self.prefix); - - // Read next token from input. - try!(self.next_token("lookahead", "tokens", "last_location", "shift")); - try!(self.token_to_integer("integer", "lookahead")); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"pulled next token from input: {{:?}}\", \ - {p}lookahead);", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - integer: {{}}\", \ - {p}integer);", - p = self.prefix - ); - } - - // Loop. - rust!(self.out, "'{}inner: loop {{", self.prefix); - rust!( - self.out, - "let {}state = *{}states.last().unwrap() as usize;", - self.prefix, - self.prefix - ); - - // Load the next action to take. - rust!( - self.out, - "let {}action = {}ACTION[{}state * {} + {}integer];", - self.prefix, - self.prefix, - self.prefix, - self.grammar.terminals.all.len(), - self.prefix - ); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"state: {{}} lookahead: {{:?}}/{{}} action: {{}} stack-depth: {{}}\", \ - {p}state, {p}lookahead, {p}integer, {p}action, {p}symbols.len());", - p = self.prefix - ); - } - - // Shift. - rust!(self.out, "if {}action > 0 {{", self.prefix); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"--> shift `{{:?}}`\", {p}lookahead);", - p = self.prefix - ); - } - try!(self.token_to_symbol()); - rust!( - self.out, - "{}states.push({}action - 1);", - self.prefix, - self.prefix - ); - rust!( - self.out, - "{}symbols.push(({}lookahead.0, {}symbol, {}lookahead.2));", - self.prefix, - self.prefix, - self.prefix, - self.prefix - ); - rust!(self.out, "continue '{}shift;", self.prefix); - - // Reduce. - rust!(self.out, "}} else if {}action < 0 {{", self.prefix); - if DEBUG_PRINT { - rust!(self.out, "println!(\"--> reduce\");"); - } - rust!( - self.out, - "if let Some(r) = {p}reduce({}{p}action, Some(&{p}lookahead.0), &mut {p}states, &mut \ - {p}symbols, {}) {{", - self.grammar.user_parameter_refs(), - phantom_data_expr, - p = self.prefix - ); - rust!(self.out, "if r.is_err() {{"); - rust!(self.out, "return r;"); - rust!(self.out, "}}"); - rust!( - self.out, - "return Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }});", - self.prefix, - self.prefix - ); - rust!(self.out, "}}"); - - // Error. - rust!(self.out, "}} else {{"); - - self.try_error_recovery( - "tokens", - "states", - "symbols", - "last_location", - Some(("lookahead", "integer", "inner", "shift")), - )?; - - rust!(self.out, "}}"); // if-else-if-else - - rust!(self.out, "}}"); // reduce loop - - rust!(self.out, "}}"); // shift loop - - // EOF loop - rust!(self.out, "loop {{"); - rust!( - self.out, - "let {}state = *{}states.last().unwrap() as usize;", - self.prefix, - self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"EOF loop state: {{}}\", {}state);", - self.prefix - ); - } - rust!( - self.out, - "let {}action = {}EOF_ACTION[{}state];", - self.prefix, - self.prefix, - self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"EOF in state {{}} takes action {{}}\", {}state, {}action);", - self.prefix, - self.prefix - ); - } - rust!(self.out, "if {}action < 0 {{", self.prefix); - rust!( - self.out, - "if let Some(r) = {}reduce({}{}action, None, &mut {}states, &mut {}symbols, {}) {{", - self.prefix, - self.grammar.user_parameter_refs(), - self.prefix, - self.prefix, - self.prefix, - phantom_data_expr - ); - rust!(self.out, "return r;"); - rust!(self.out, "}}"); - rust!(self.out, "}} else {{"); - - self.try_error_recovery("tokens", "states", "symbols", "last_location", None)?; - - rust!(self.out, "}}"); // else - - rust!(self.out, "}}"); // while let - - self.end_parser_fn() - } - - fn next_token( - &mut self, - lookahead: &str, - tokens: &str, - last_location: &str, - break_on_eof: &str, - ) -> io::Result<()> { - rust!( - self.out, - "{p}{lookahead} = match {p}{tokens}.next() {{", - lookahead = lookahead, - tokens = tokens, - p = self.prefix - ); - rust!(self.out, "Some(Ok(v)) => v,"); - rust!(self.out, "None => break '{}{},", self.prefix, break_on_eof); // EOF: break out - if self.grammar.intern_token.is_some() { - // when we generate the tokenizer, the generated errors are `ParseError` values - rust!(self.out, "Some(Err(e)) => return Err(e),"); - } else { - // otherwise, they are user errors - rust!( - self.out, - "Some(Err(e)) => return Err({p}lalrpop_util::ParseError::User {{ error: e }}),", - p = self.prefix - ); - } - rust!(self.out, "}};"); - rust!( - self.out, - "*{p}{last_location} = {p}{lookahead}.2.clone();", - last_location = last_location, - lookahead = lookahead, - p = self.prefix - ); - Ok(()) - } - - fn token_to_integer(&mut self, integer: &str, lookahead: &str) -> io::Result<()> { - rust!( - self.out, - "{p}{integer} = match {p}{lookahead}.1 {{", - integer = integer, - lookahead = lookahead, - p = self.prefix - ); - for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { - if *terminal == TerminalString::Error { - continue; - } - let pattern = self.grammar.pattern(terminal).map(&mut |_| "_"); - rust!( - self.out, - "{pattern} if true => {index},", - pattern = pattern, - index = index - ); - } - - rust!(self.out, "_ => {{"); - let prefix = self.prefix; - try!(self.let_unrecognized_token_error( - "error", - &format!("Some({p}{lookahead})", lookahead = lookahead, p = prefix) - )); - rust!(self.out, "return Err({p}error);", p = self.prefix); - rust!(self.out, "}}"); - - rust!(self.out, "}};"); - Ok(()) - } - - fn token_to_symbol(&mut self) -> io::Result<()> { - rust!( - self.out, - "let {}symbol = match {}integer {{", - self.prefix, - self.prefix - ); - for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { - if *terminal == TerminalString::Error { - continue; - } - rust!(self.out, "{} => match {}lookahead.1 {{", index, self.prefix); - - let mut pattern_names = vec![]; - let pattern = self.grammar.pattern(terminal).map(&mut |_| { - let index = pattern_names.len(); - pattern_names.push(format!("{}tok{}", self.prefix, index)); - pattern_names.last().cloned().unwrap() - }); - - let mut pattern = format!("{}", pattern); - if pattern_names.is_empty() { - pattern_names.push(format!("{}tok", self.prefix)); - pattern = format!("{}tok @ {}", self.prefix, pattern); - } - - let variant_name = self.variant_name_for_symbol(&Symbol::Terminal(terminal.clone())); - rust!( - self.out, - "{} => {}Symbol::{}(({})),", - pattern, - self.prefix, - variant_name, - pattern_names.join(", ") - ); - rust!(self.out, "_ => unreachable!(),"); - rust!(self.out, "}},"); - } - - rust!(self.out, "_ => unreachable!(),"); - - rust!(self.out, "}};"); - Ok(()) - } - - fn emit_reduce_actions(&mut self) -> io::Result<()> { - let success_type = self.types.nonterminal_type(&self.start_symbol); - let parse_error_type = self.types.parse_error_type(); - let loc_type = self.types.terminal_loc_type(); - let spanned_symbol_type = self.spanned_symbol_type(); - - let parameters = vec![ - format!("{}action: {}", self.prefix, self.custom.state_type), - format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), - format!( - "{}states: &mut ::std::vec::Vec<{}>", - self.prefix, self.custom.state_type - ), - format!( - "{}symbols: &mut ::std::vec::Vec<{}>", - self.prefix, spanned_symbol_type - ), - format!("_: {}", self.phantom_data_type()), - ]; - - try!(self.out.write_fn_header( - self.grammar, - &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), - format!("{}reduce", self.prefix), - vec![], - None, - parameters, - format!("Option>", success_type, parse_error_type), - vec![] - )); - rust!(self.out, "{{"); - - rust!( - self.out, - "let ({p}pop_states, {p}symbol, {p}nonterminal) = match -{}action {{", - p = self.prefix - ); - for (production, index) in self - .grammar - .nonterminals - .values() - .flat_map(|nt| &nt.productions) - .zip(1..) - { - rust!(self.out, "{} => {{", index); - // In debug builds LLVM is not very good at reusing stack space which makes this - // reduce function take up O(number of states) space. By wrapping each reduce action in - // an immediately called function each reduction takes place in their own function - // context which ends up reducing the stack space used. - - // Fallible actions and the start symbol may do early returns so we avoid wrapping - // those - let is_fallible = self.grammar.action_is_fallible(production.action); - let reduce_stack_space = !is_fallible && production.nonterminal != self.start_symbol; - - if reduce_stack_space { - self.custom.reduce_functions.insert(index); - let phantom_data_expr = self.phantom_data_expr(); - rust!( - self.out, - "{p}reduce{}({}{p}action, {p}lookahead_start, {p}states, {p}symbols, {})", - index, - self.grammar.user_parameter_refs(), - phantom_data_expr, - p = self.prefix - ); - } else { - try!(self.emit_reduce_action(production)); - } - - rust!(self.out, "}}"); - } - rust!( - self.out, - "_ => panic!(\"invalid action code {{}}\", {}action)", - self.prefix - ); - rust!(self.out, "}};"); - - // pop the consumed states from the stack - rust!( - self.out, - "let {p}states_len = {p}states.len();", - p = self.prefix - ); - rust!( - self.out, - "{p}states.truncate({p}states_len - {p}pop_states);", - p = self.prefix - ); - - rust!(self.out, "{p}symbols.push({p}symbol);", p = self.prefix); - - rust!( - self.out, - "let {}state = *{}states.last().unwrap() as usize;", - self.prefix, - self.prefix - ); - rust!( - self.out, - "let {}next_state = {}GOTO[{}state * {} + {}nonterminal] - 1;", - self.prefix, - self.prefix, - self.prefix, - self.grammar.nonterminals.len(), - self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"goto state {{}} from {{}} due to nonterminal {{}}\", {}next_state, \ - {}state, {}nonterminal);", - self.prefix, - self.prefix, - self.prefix - ); - } - rust!( - self.out, - "{}states.push({}next_state);", - self.prefix, - self.prefix - ); - rust!(self.out, "None"); - rust!(self.out, "}}"); - Ok(()) - } - - fn emit_reduce_action_functions(&mut self) -> io::Result<()> { - for (production, index) in self - .grammar - .nonterminals - .values() - .flat_map(|nt| &nt.productions) - .zip(1..) - { - if self.custom.reduce_functions.contains(&index) { - self.emit_reduce_alternative_fn_header(index)?; - self.emit_reduce_action(production)?; - rust!(self.out, "}}"); - } - } - Ok(()) - } - - fn emit_reduce_alternative_fn_header(&mut self, index: usize) -> io::Result<()> { - let loc_type = self.types.terminal_loc_type(); - let spanned_symbol_type = self.spanned_symbol_type(); - - let parameters = vec![ - format!("{}action: {}", self.prefix, self.custom.state_type), - format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), - format!( - "{}states: &mut ::std::vec::Vec<{}>", - self.prefix, self.custom.state_type - ), - format!( - "{}symbols: &mut ::std::vec::Vec<{}>", - self.prefix, spanned_symbol_type - ), - format!("_: {}", self.phantom_data_type()), - ]; - - try!(self.out.write_fn_header( - self.grammar, - &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), - format!("{}reduce{}", self.prefix, index), - vec![], - None, - parameters, - format!("(usize, {}, usize)", spanned_symbol_type,), - vec![] - )); - rust!(self.out, "{{"); - Ok(()) - } - - fn emit_reduce_action(&mut self, production: &Production) -> io::Result<()> { - rust!(self.out, "// {:?}", production); - - // Pop each of the symbols and their associated states. - for (index, symbol) in production.symbols.iter().enumerate().rev() { - let name = self.variant_name_for_symbol(symbol); - rust!( - self.out, - "let {}sym{} = {}pop_{}({}symbols);", - self.prefix, - index, - self.prefix, - name, - self.prefix - ); - } - let transfer_syms: Vec<_> = (0..production.symbols.len()) - .map(|i| format!("{}sym{}", self.prefix, i)) - .collect(); - - // Execute the action fn - // identify the "start" location for this production; this - // is typically the start of the first symbol we are - // reducing; but in the case of an empty production, it - // will be the last symbol pushed, or at worst `default`. - if let Some(first_sym) = transfer_syms.first() { - rust!( - self.out, - "let {}start = {}.0.clone();", - self.prefix, - first_sym - ); - } else { - // we pop no symbols, so grab from the top of the stack - // (unless we are in the start state, in which case the - // stack will be empty) - rust!( - self.out, - "let {}start = {}symbols.last().map(|s| s.2.clone()).unwrap_or_default();", - self.prefix, - self.prefix - ); - } - - // identify the "end" location for this production; - // this is typically the end of the last symbol we are reducing, - // but in the case of an empty production it will come from the - // lookahead - if let Some(last_sym) = transfer_syms.last() { - rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); - } else { - rust!( - self.out, - "let {}end = {}lookahead_start.cloned().unwrap_or_else(|| \ - {}start.clone());", - self.prefix, - self.prefix, - self.prefix - ); - } - - let transfered_syms = transfer_syms.len(); - - let mut args = transfer_syms; - if transfered_syms == 0 { - args.push(format!("&{}start", self.prefix)); - args.push(format!("&{}end", self.prefix)); - } - - // invoke the action code - let is_fallible = self.grammar.action_is_fallible(production.action); - if is_fallible { - rust!( - self.out, - "let {}nt = match {}::{}action{}::<{}>({}{}) {{", - self.prefix, - self.action_module, - self.prefix, - production.action.index(), - Sep(", ", &self.grammar.non_lifetime_type_parameters()), - self.grammar.user_parameter_refs(), - Sep(", ", &args) - ); - rust!(self.out, "Ok(v) => v,"); - rust!(self.out, "Err(e) => return Some(Err(e)),"); - rust!(self.out, "}};"); - } else { - rust!( - self.out, - "let {}nt = {}::{}action{}::<{}>({}{});", - self.prefix, - self.action_module, - self.prefix, - production.action.index(), - Sep(", ", &self.grammar.non_lifetime_type_parameters()), - self.grammar.user_parameter_refs(), - Sep(", ", &args) - ); - } - - // if this is the final state, return it - if production.nonterminal == self.start_symbol { - rust!(self.out, "return Some(Ok({}nt));", self.prefix); - return Ok(()); - } - - // push the produced value on the stack - let name = - self.variant_name_for_symbol(&Symbol::Nonterminal(production.nonterminal.clone())); - rust!( - self.out, - "let {}symbol = ({}start, {}Symbol::{}({}nt), {}end);", - self.prefix, - self.prefix, - self.prefix, - name, - self.prefix, - self.prefix - ); - - // produce the index that we will use to extract the next state - // from GOTO array - let index = self - .custom - .all_nonterminals - .iter() - .position(|x| *x == production.nonterminal) - .unwrap(); - rust!( - self.out, - "({len}, {p}symbol, {index})", - p = self.prefix, - index = index, - len = production.symbols.len() - ); - - Ok(()) - } - - fn variant_name_for_symbol(&mut self, s: &Symbol) -> String { - self.custom.variant_names[s].clone() - } - - fn emit_downcast_fns(&mut self) -> io::Result<()> { - for (ty, name) in self.custom.variants.clone() { - try!(self.emit_downcast_fn(&name, ty)); - } - - Ok(()) - } - - fn emit_downcast_fn(&mut self, variant_name: &str, variant_ty: TypeRepr) -> io::Result<()> { - let spanned_symbol_type = self.spanned_symbol_type(); - - rust!(self.out, "fn {}pop_{}<", self.prefix, variant_name); - for type_parameter in &self.custom.symbol_type_params { - rust!(self.out, " {},", type_parameter); - } - rust!(self.out, ">("); - rust!( - self.out, - "{}symbols: &mut ::std::vec::Vec<{}>", - self.prefix, - spanned_symbol_type - ); - rust!(self.out, ") -> {}", self.types.spanned_type(variant_ty)); - - if !self.custom.symbol_where_clauses.is_empty() { - rust!( - self.out, - " where {}", - Sep(", ", &self.custom.symbol_where_clauses) - ); - } - - rust!(self.out, " {{"); - - if DEBUG_PRINT { - rust!(self.out, "println!(\"pop_{}\");", variant_name); - } - rust!(self.out, "match {}symbols.pop().unwrap() {{", self.prefix); - rust!( - self.out, - "({}l, {}Symbol::{}({}v), {}r) => ({}l, {}v, {}r),", - self.prefix, - self.prefix, - variant_name, - self.prefix, - self.prefix, - self.prefix, - self.prefix, - self.prefix - ); - rust!(self.out, "_ => panic!(\"symbol type mismatch\")"); - rust!(self.out, "}}"); - - rust!(self.out, "}}"); - - Ok(()) - } - - /// Tries to invoke the error recovery function. Takes a bunch of - /// arguments from the surrounding state: - /// - /// - `tokens` -- name of a mut variable of type `I` where `I` is an iterator over tokens - /// - `symbols` -- name of symbols vector - /// - `last_location` -- name of `last_location` variable - /// - `opt_lookahead` -- see below - /// - /// The `opt_lookahead` tuple contains the lookahead -- if any -- - /// or None for EOF. It is a 4-tuple: (lookahead, integer, - /// tok_target, and eof_target). The idea is like this: on entry, - /// lookahead/integer have values. On exit, if the next token is - /// EOF, because we have dropped all remaining tokens, we will - /// `break` to `eof_target`. Otherwise, we will `continue` to - /// `tok_target` after storing next token into the variable - /// `lookahead` and its integer index into `integer`. - fn try_error_recovery( - &mut self, - tokens: &str, - states: &str, - symbols: &str, - last_location: &str, - opt_lookahead: Option<(&str, &str, &str, &str)>, - ) -> io::Result<()> { - if let Some((out_lookahead, out_integer, _, _)) = opt_lookahead { - rust!( - self.out, - "let mut {p}err_lookahead = Some({p}{});", - out_lookahead, - p = self.prefix, - ); - - rust!( - self.out, - "let mut {p}err_integer: Option = Some({p}{});", - out_integer, - p = self.prefix, - ); - } else { - rust!( - self.out, - "let mut {p}err_lookahead = None;", - p = self.prefix, - ); - - rust!( - self.out, - "let mut {p}err_integer: Option = None;", - p = self.prefix, - ); - } - - // Easy case: error recovery is disabled. Just error out. - if !self.grammar.uses_error_recovery { - let prefix = self.prefix; - self.let_unrecognized_token_error("error", &format!("{p}err_lookahead", p = prefix))?; - rust!(self.out, "return Err({p}error)", p = prefix); - return Ok(()); - } - - let phantom_data_expr = self.phantom_data_expr(); - - rust!( - self.out, - "match {p}error_recovery(\ - {upr} \ - &mut {p}{tokens}, \ - &mut {p}{states}, \ - &mut {p}{symbols}, \ - {p}{last_location}, \ - &mut {p}err_lookahead, \ - &mut {p}err_integer, \ - {phantom_data_expr}) {{", - upr = self.grammar.user_parameter_refs(), - tokens = tokens, - states = states, - symbols = symbols, - last_location = last_location, - phantom_data_expr = phantom_data_expr, - p = self.prefix - ); - rust!(self.out, "Err({p}e) => return Err({p}e),", p = self.prefix); - rust!( - self.out, - "Ok(Some({p}v)) => return Ok({p}v),", - p = self.prefix - ); - rust!(self.out, "Ok(None) => (),"); - rust!(self.out, "}}"); - - if let Some((out_lookahead, out_integer, tok_target, eof_target)) = opt_lookahead { - rust!( - self.out, - "match ({p}err_lookahead, {p}err_integer) {{", - p = self.prefix - ); - rust!(self.out, "(Some({p}l), Some({p}i)) => {{", p = self.prefix); - rust!(self.out, "{p}{} = {p}l;", out_lookahead, p = self.prefix); - rust!(self.out, "{p}{} = {p}i;", out_integer, p = self.prefix); - rust!(self.out, "continue '{p}{};", tok_target, p = self.prefix); - rust!(self.out, "}}"); // end arm - rust!(self.out, "_ => break '{p}{},", eof_target, p = self.prefix); - rust!(self.out, "}}"); // end match - } - - Ok(()) - } - - fn write_error_recovery_fn(&mut self) -> io::Result<()> { - // Easy case: error recovery is disabled. Just error out. - if !self.grammar.uses_error_recovery { - return Ok(()); - } - - let parse_error_type = self.types.parse_error_type(); - let error_type = self.types.error_type(); - let spanned_symbol_type = self.spanned_symbol_type(); - let triple_type = self.types.triple_type(); - let loc_type = self.types.terminal_loc_type(); - let prefix = self.prefix; - let actions_per_state = self.grammar.terminals.all.len(); - let start_type = self.types.nonterminal_type(&self.start_symbol); - - // The tokenizr, when we supply it, returns parse - // errors. Otherwise, it returns custom user errors. - let tok_error_type = if self.grammar.intern_token.is_some() { - parse_error_type - } else { - &error_type - }; - - let parameters = vec![ - format!("{p}tokens: &mut {p}I", p = self.prefix), - format!( - "{p}states: &mut ::std::vec::Vec<{typ}>", - p = self.prefix, - typ = self.custom.state_type - ), - format!( - "{p}symbols: &mut ::std::vec::Vec<{spanned_symbol_type}>", - spanned_symbol_type = spanned_symbol_type, - p = self.prefix - ), - format!( - "{p}last_location: &mut {loc_type}", - loc_type = loc_type, - p = self.prefix - ), - format!( - "{p}opt_lookahead: &mut Option<{triple_type}>", - triple_type = triple_type, - p = self.prefix - ), - format!("{p}opt_integer: &mut Option", p = self.prefix), - format!("_: {}", self.phantom_data_type()), - ]; - - try!(self.out.write_fn_header( - self.grammar, - &Visibility::Priv, - format!("{p}error_recovery", p = self.prefix), - vec![format!("{p}I", p = self.prefix)], - None, - parameters, - format!( - "Result, {parse_error_type}>", - start_type = start_type, - parse_error_type = parse_error_type - ), - vec![format!( - "{p}I: Iterator\ - >", - triple_type = triple_type, - tok_error_type = tok_error_type, - p = self.prefix - ),] - )); - - rust!(self.out, "{{"); - - self.let_unrecognized_token_error( - "error", - &format!("{p}opt_lookahead.clone()", p = prefix), - )?; - - rust!(self.out, "let mut {}dropped_tokens = vec![];", prefix); - - let phantom_data_expr = self.phantom_data_expr(); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Initiating error recovery in state: {{}}\", \ - {p}states.last().unwrap());", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - state stack size: {{}}\", \ - {p}states.len());", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - symbol stack size: {{}}\", \ - {p}symbols.len());", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - opt lookahead: {{:?}}\", \ - {p}opt_lookahead);", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - opt integer: {{:?}}\", \ - {p}opt_integer);", - p = self.prefix - ); - } - - // We are going to insert ERROR into the lookahead. So, first, - // perform all reductions from current state triggered by having - // ERROR in the lookahead. - rust!(self.out, "loop {{"); - rust!( - self.out, - "let {p}state = *{p}states.last().unwrap() as usize;", - p = self.prefix - ); - - // Access the action with `error` as the lookahead; it is always final - // column in the row for this state - rust!( - self.out, - "let {p}action = {p}ACTION[{p}state * {} + {}];", - actions_per_state, - actions_per_state - 1, - p = self.prefix - ); - rust!(self.out, "if {p}action >= 0 {{", p = self.prefix); - rust!(self.out, "break;"); - rust!(self.out, "}}"); - - if DEBUG_PRINT { - rust!( - self.out, - r#"println!("Error recovery reduces on action: {{}}", {}action);"#, - self.prefix - ); - } - - rust!( - self.out, - "let {p}lookahead_start = {p}opt_lookahead.as_ref().map(|l| &l.0);", - p = self.prefix - ); - rust!( - self.out, - "if let Some(r) = {p}reduce( \ - {upr} \ - {p}action, \ - {p}lookahead_start, \ - {p}states, \ - {p}symbols, \ - {phantoms} \ - ) {{", - upr = self.grammar.user_parameter_refs(), - phantoms = phantom_data_expr, - p = self.prefix - ); - rust!(self.out, "return Ok(Some(r?));"); - rust!(self.out, "}}"); - rust!(self.out, "}}"); // end reduce loop - - // Now try to find the recovery state. - - rust!( - self.out, - "let {p}states_len = {p}states.len();", - p = self.prefix - ); - - // I'd rather generate `let top = loop {{...}}` but I do not - // to retain compatibility with Rust 1.16.0. - rust!(self.out, "let {p}top0;", p = self.prefix); - - rust!(self.out, "'{p}find_state: loop {{", p = self.prefix); - - // Go backwards through the states... - rust!( - self.out, - "for {p}top in (0..{p}states_len).rev() {{", - p = self.prefix - ); - rust!( - self.out, - "let {p}state = {p}states[{p}top] as usize;", - p = self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Probing recovery from state {{}} (top = {{}}).\", {p}state, {p}top);", - p = self.prefix, - ); - } - // ...fetch action for error token... - rust!( - self.out, - "let {p}action = {p}ACTION[{p}state * {} + {}];", - actions_per_state, - actions_per_state - 1, - p = self.prefix - ); - // ...if action is error or reduce, go to next state... - rust!( - self.out, - "if {p}action <= 0 {{ continue; }}", - p = self.prefix - ); - // ...otherwise, action *must* be shift. That would take us into `error_state`. - rust!( - self.out, - "let {p}error_state = {p}action - 1;", - p = self.prefix - ); - // If `error_state` can accept this lookahead, we are done. - rust!( - self.out, - "if {p}accepts(\ - {upr} \ - {p}error_state, \ - &{p}states[..{p}top + 1], \ - *{p}opt_integer, \ - {phantoms},\ - ) {{", - upr = self.grammar.user_parameter_refs(), - phantoms = phantom_data_expr, - p = self.prefix - ); - rust!(self.out, "{p}top0 = {p}top;", p = self.prefix); - rust!(self.out, "break '{p}find_state;", p = self.prefix); - rust!(self.out, "}}"); // end if - rust!(self.out, "}}"); // end for - - // Otherwise, if we did not find any enclosing state that can - // error and then accept this lookahead, we need to drop the current token. - - // Introduce an artificial loop here so we can break to - // it. This is a hack to re-use the `next_token` function. - rust!(self.out, "'{p}eof: loop {{", p = self.prefix); - rust!( - self.out, - "match {p}opt_lookahead.take() {{", - p = self.prefix - ); - - // If the lookahead is EOF, and there is no suitable state to - // recover to, we just have to abort EOF recovery. Find the - // first token that we dropped (if any) and use that as the - // point of error. - rust!(self.out, "None => {{"); - if DEBUG_PRINT { - rust!( - self.out, - r#"println!("Error recovery: cannot drop EOF; aborting");"# - ); - } - rust!(self.out, "return Err({}error)", prefix); - rust!(self.out, "}}"); // end None arm - - // Else, drop the current token and shift to the next. If there is a next - // token, we will `continue` to the start of the `'find_state` loop. - rust!(self.out, "Some(mut {p}lookahead) => {{", p = self.prefix); - if DEBUG_PRINT { - rust!( - self.out, - r#"println!("Error recovery: dropping token `{{:?}}`", {p}lookahead);"#, - p = self.prefix, - ); - } - rust!( - self.out, - "{p}dropped_tokens.push({p}lookahead);", - p = self.prefix - ); - self.next_token("lookahead", "tokens", "last_location", "eof")?; - rust!(self.out, "let {p}integer;", p = self.prefix); - try!(self.token_to_integer("integer", "lookahead")); - rust!( - self.out, - "*{p}opt_lookahead = Some({p}lookahead);", - p = self.prefix - ); - rust!( - self.out, - "*{p}opt_integer = Some({p}integer);", - p = self.prefix - ); - rust!(self.out, "continue '{p}find_state;", p = self.prefix); - rust!(self.out, "}}"); // end Some(_) arm - rust!(self.out, "}}"); // end match - rust!(self.out, "}}"); // end 'eof loop - - // The `next_token` function will break here (out of the - // `'eof` loop) when we encounter EOF (i.e., there is no - // `next_token`). Just set `opt_lookahead` to `None` in that - // case. - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Encountered EOF during error recovery\");" - ); - } - rust!(self.out, "*{p}opt_lookahead = None;", p = self.prefix); - rust!(self.out, "*{p}opt_integer = None;", p = self.prefix); - rust!(self.out, "}};"); // end 'find_state loop - - // If we get here, we are ready to push the error recovery state. - - // We have to compute the span for the error recovery - // token. We do this first, before we pop any symbols off the - // stack. There are several possibilities, in order of - // preference. - // - // For the **start** of the message, we prefer to use the start of any - // popped states. This represents parts of the input we had consumed but - // had to roll back and ignore. - // - // Example: - // - // a + (b + /) - // ^ start point is here, since this `+` will be popped off - // - // If there are no popped states, but there *are* dropped tokens, we can use - // the start of those. - // - // Example: - // - // a + (b + c e) - // ^ start point would be here - // - // Finally, if there are no popped states *nor* dropped tokens, we can use - // the end of the top-most state. - - rust!(self.out, "let {p}top = {p}top0;", p = self.prefix); - rust!( - self.out, - "let {p}start = if let Some({p}popped_sym) = {p}symbols.get({p}top) {{", - p = self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Span starts from popped symbol {{:?}}\", \ - (&{p}popped_sym.0 .. &{p}popped_sym.2));", - p = self.prefix, - ); - } - rust!(self.out, "{p}popped_sym.0.clone()", p = self.prefix); - rust!( - self.out, - "}} else if let Some({p}dropped_token) = {p}dropped_tokens.first() {{", - p = self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Span starts from dropped token {{:?}}\", \ - (&{p}dropped_token.0 .. &{p}dropped_token.2));", - p = self.prefix, - ); - } - rust!(self.out, "{p}dropped_token.0.clone()", p = self.prefix); - rust!(self.out, "}} else if {p}top > 0 {{", p = self.prefix); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Span starts from end of last retained symbol\");" - ); - } - rust!( - self.out, - "{p}symbols[{p}top - 1].2.clone()", - p = self.prefix - ); - rust!(self.out, "}} else {{"); - if DEBUG_PRINT { - rust!(self.out, "println!(\"Span starts from default\");"); - } - rust!(self.out, "Default::default()"); - rust!(self.out, "}};"); // end if - - // For the end span, here are the possibilities: - // - // We prefer to use the end of the last dropped token. - // - // Examples: - // - // a + (b + /) - // --- - // a + (b c) - // - - // - // But, if there are no dropped tokens, we will use the end of the popped states, - // if any: - // - // a + / - // - - // - // If there are neither dropped tokens *or* popped states, - // then the user is simulating insertion of an operator. In - // this case, we prefer the start of the lookahead, but - // fallback to the start if we are at EOF. - // - // Examples: - // - // a + (b c) - // - - rust!( - self.out, - "let {p}end = if let Some({p}dropped_token) = {p}dropped_tokens.last() {{", - p = self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Span ends at end of last dropped token {{:?}}\", \ - (&{p}dropped_token.0 .. &{p}dropped_token.2));", - p = self.prefix, - ); - } - rust!(self.out, "{p}dropped_token.2.clone()", p = self.prefix); - rust!( - self.out, - "}} else if {p}states_len - 1 > {p}top {{", - p = self.prefix - ); - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Span ends at end of last popped symbol {{:?}}\", \ - {p}symbols.last().unwrap().2);", - p = self.prefix, - ); - } - rust!( - self.out, - "{p}symbols.last().unwrap().2.clone()", - p = self.prefix - ); - rust!( - self.out, - "}} else if let Some({p}lookahead) = {p}opt_lookahead.as_ref() {{", - p = self.prefix - ); - if DEBUG_PRINT { - rust!(self.out, "println!(\"Span ends at start of lookahead\");"); - } - rust!(self.out, "{p}lookahead.0.clone()", p = self.prefix); - rust!(self.out, "}} else {{"); - if DEBUG_PRINT { - rust!(self.out, "println!(\"Span ends at start\");"); - } - rust!(self.out, "{p}start.clone()", p = self.prefix); - rust!(self.out, "}};"); // end if - - // First we have to pop off the states we are skipping. Note - // that the bottom-most state doesn't have a symbol, so the - // symbols vector is always 1 shorter, hence we truncate its - // length to `{p}top` not `{p}top + 1`. - rust!(self.out, "{p}states.truncate({p}top + 1);", p = self.prefix); - rust!(self.out, "{p}symbols.truncate({p}top);", p = self.prefix); - - // Now load the new top state. - rust!( - self.out, - "let {p}recover_state = {p}states[{p}top] as usize;", - p = self.prefix - ); - - // Load the error action, which must be a shift. - rust!( - self.out, - "let {p}error_action = {p}ACTION[{p}recover_state * {} + {}];", - actions_per_state, - actions_per_state - 1, - p = self.prefix - ); - rust!( - self.out, - "let {p}error_state = {p}error_action - 1;", - p = self.prefix - ); - - if DEBUG_PRINT { - rust!(self.out, "println!(\"Recovering from error:\");"); - rust!( - self.out, - "println!(\" - recovery base state: {{}}\", {p}top);", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - new top state {{}}\", {p}recover_state);", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - error state {{}}\", {p}error_state);", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - new stack length: {{}}\", {p}states.len());", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - new symbol length: {{}}\", {p}symbols.len());", - p = self.prefix - ); - rust!( - self.out, - "println!(\" - span {{:?}}..{{:?}}\", {p}start, {p}end);", - p = self.prefix - ); - } - - // Push the error state onto the stack. - rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); - rust!( - self.out, - "let {p}recovery = {}lalrpop_util::ErrorRecovery {{", - p = self.prefix - ); - rust!(self.out, "error: {p}error,", p = self.prefix); - rust!( - self.out, - "dropped_tokens: {p}dropped_tokens,", - p = self.prefix - ); - rust!(self.out, "}};"); - - let error_variant = self.variant_name_for_symbol(&Symbol::Terminal(TerminalString::Error)); - rust!( - self.out, - "{p}symbols.push(({p}start, {p}Symbol::{e}({p}recovery), {p}end));", - p = self.prefix, - e = error_variant - ); - - rust!(self.out, "Ok(None)"); - rust!(self.out, "}}"); // end fn - Ok(()) - } - - /// The `accepts` function - /// - /// ```ignore - /// fn __accepts() { - /// error_state: i32, - /// states: &Vec, - /// opt_integer: Option, - /// ) -> bool { - /// ... - /// } - /// ``` - /// - /// has the job of figuring out whether the given error state would - /// "accept" the given lookahead. We basically trace through the LR - /// automaton looking for one of two outcomes: - /// - /// - the lookahead is eventually shifted - /// - we reduce to the end state successfully (in the case of EOF). - /// - /// If we used the pure LR(1) algorithm, we wouldn't need this - /// function, because we would be guaranteed to error immediately - /// (and not after some number of reductions). But with an LALR - /// (or Lane Table) generated automaton, it is possible to reduce - /// some number of times before encountering an error. Failing to - /// take this into account can lead error recovery into an - /// infinite loop (see the `error_recovery_lalr_loop` test) or - /// produce crappy results (see `error_recovery_lock_in`). - fn write_accepts_fn(&mut self) -> io::Result<()> { - if !self.grammar.uses_error_recovery { - return Ok(()); - } - - let actions_per_state = self.grammar.terminals.all.len(); - let parameters = vec![ - format!( - "{p}error_state: {typ}", - p = self.prefix, - typ = self.custom.state_type - ), - format!( - "{p}states: & [{typ}]", - p = self.prefix, - typ = self.custom.state_type - ), - format!("{p}opt_integer: Option", p = self.prefix), - format!("_: {}", self.phantom_data_type()), - ]; - - try!(self.out.write_fn_header( - self.grammar, - &Visibility::Priv, - format!("{}accepts", self.prefix), - vec![], - None, - parameters, - format!("bool"), - vec![] - )); - rust!(self.out, "{{"); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"Testing whether state {{}} accepts token {{:?}}\", \ - {p}error_state, {p}opt_integer);", - p = self.prefix - ); - } - - // Create our own copy of the state stack to play with. - rust!( - self.out, - "let mut {p}states = {p}states.to_vec();", - p = self.prefix - ); - rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); - - rust!(self.out, "loop {{",); - - rust!( - self.out, - "let mut {}states_len = {}states.len();", - self.prefix, - self.prefix - ); - - rust!( - self.out, - "let {p}top = {p}states[{p}states_len - 1] as usize;", - p = self.prefix - ); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"accepts: top-state={{}} num-states={{}}\", {p}top, {p}states_len);", - p = self.prefix - ); - } - - rust!( - self.out, - "let {p}action = match {p}opt_integer {{", - p = self.prefix - ); - rust!( - self.out, - "None => {p}EOF_ACTION[{p}top as usize],", - p = self.prefix - ); - rust!( - self.out, - "Some({p}integer) => {p}ACTION[{p}top * {actions_per_state} + {p}integer],", - p = self.prefix, - actions_per_state = actions_per_state, - ); - rust!(self.out, "}};"); // end `match` - - // If we encounter an error action, we do **not** accept. - rust!( - self.out, - "if {p}action == 0 {{ return false; }}", - p = self.prefix - ); - - // If we encounter a shift action, we DO accept. - rust!( - self.out, - "if {p}action > 0 {{ return true; }}", - p = self.prefix - ); - - // If we encounter a reduce action, we need to simulate its - // effect on the state stack. - rust!( - self.out, - "let ({p}to_pop, {p}nt) = match -{p}action {{", - p = self.prefix - ); - for (production, index) in self - .grammar - .nonterminals - .values() - .flat_map(|nt| &nt.productions) - .zip(1..) - { - if Tls::session().emit_comments { - rust!(self.out, "// simulate {:?}", production); - } - - // if we just reduced the start symbol, that is also an accept criteria - if production.nonterminal == self.start_symbol { - rust!(self.out, "{} => return true,", index); - } else { - let num_symbols = production.symbols.len(); - let nt = self - .custom - .all_nonterminals - .iter() - .position(|x| *x == production.nonterminal) - .unwrap(); - rust!(self.out, "{} => {{", index); - if DEBUG_PRINT { - rust!( - self.out, - "println!(r##\"accepts: simulating {:?}\"##);", - production - ); - } - rust!( - self.out, - "({num_symbols}, {nt})", - num_symbols = num_symbols, - nt = nt - ); - rust!(self.out, "}}"); - } - } - rust!( - self.out, - "_ => panic!(\"invalid action code {{}}\", {}action)", - self.prefix - ); - rust!(self.out, "}};"); // end match - - rust!(self.out, "{p}states_len -= {p}to_pop;", p = self.prefix); - rust!( - self.out, - "{p}states.truncate({p}states_len);", - p = self.prefix - ); - rust!( - self.out, - "let {p}top = {p}states[{p}states_len - 1] as usize;", - p = self.prefix - ); - - if DEBUG_PRINT { - rust!( - self.out, - "println!(\"accepts: popped {{}} symbols, new top is {{}}, nt is {{}}\", \ - {p}to_pop, \ - {p}top, \ - {p}nt, \ - );", - p = self.prefix - ); - } - - rust!( - self.out, - "let {p}next_state = {p}GOTO[{p}top * {num_non_terminals} + {p}nt] - 1;", - p = self.prefix, - num_non_terminals = self.grammar.nonterminals.len(), - ); - - rust!(self.out, "{p}states.push({p}next_state);", p = self.prefix); - - rust!(self.out, "}}"); // end loop - rust!(self.out, "}}"); // end fn - - Ok(()) - } - - fn symbol_type(&self) -> String { - format!( - "{}Symbol<{}>", - self.prefix, - Sep(", ", &self.custom.symbol_type_params) - ) - } - - fn spanned_symbol_type(&self) -> String { - let loc_type = self.types.terminal_loc_type(); - format!("({},{},{})", loc_type, self.symbol_type(), loc_type) - } - - fn let_unrecognized_token_error(&mut self, error_var: &str, token: &str) -> io::Result<()> { - rust!( - self.out, - "let {}state = *{}states.last().unwrap() as usize;", - self.prefix, - self.prefix - ); - rust!( - self.out, - "let {}{} = {}lalrpop_util::ParseError::UnrecognizedToken {{", - self.prefix, - error_var, - self.prefix - ); - rust!(self.out, "token: {},", token); - rust!( - self.out, - "expected: {}expected_tokens({}state),", - self.prefix, - self.prefix - ); - rust!(self.out, "}};"); - Ok(()) - } - - fn emit_expected_tokens_fn(&mut self) -> io::Result<()> { - rust!( - self.out, - "fn {}expected_tokens({}state: usize) -> Vec<::std::string::String> {{", - self.prefix, - self.prefix - ); - - rust!( - self.out, - "const {}TERMINAL: &'static [&'static str] = &[", - self.prefix - ); - let all_terminals = if self.grammar.uses_error_recovery { - // Subtract one to exlude the error terminal - &self.grammar.terminals.all[..self.grammar.terminals.all.len() - 1] - } else { - &self.grammar.terminals.all - }; - for terminal in all_terminals { - // Three # should hopefully be enough to prevent any - // reasonable terminal from escaping the literal - rust!(self.out, "r###\"{}\"###,", terminal); - } - rust!(self.out, "];"); - - // Grab any terminals in the current state which would have resulted in a successful parse - rust!( - self.out, - "{}ACTION[({}state * {})..].iter().zip({}TERMINAL).filter_map(|(&state, terminal)| {{", - self.prefix, - self.prefix, - self.grammar.terminals.all.len(), - self.prefix - ); - rust!(self.out, "if state == 0 {{"); - rust!(self.out, "None"); - rust!(self.out, "}} else {{"); - rust!(self.out, "Some(terminal.to_string())"); - rust!(self.out, "}}"); - rust!(self.out, "}}).collect()"); - rust!(self.out, "}}"); - Ok(()) - } -} +//! A compiler from an LR(1) table to a traditional table driven parser. + +use collections::{Entry, Map, Set}; +use grammar::parse_tree::WhereClause; +use grammar::repr::*; +use string_cache::DefaultAtom as Atom; +use lr1::core::*; +use lr1::lookahead::Token; +use rust::RustWrite; +use std::fmt; +use std::io::{self, Write}; +use tls::Tls; +use util::Sep; + +use super::base::CodeGenerator; + +const DEBUG_PRINT: bool = false; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + action_module: &str, + out: &mut RustWrite, +) -> io::Result<()> { + let mut table_driven = CodeGenerator::new_table_driven( + grammar, + user_start_symbol, + start_symbol, + states, + action_module, + out, + ); + table_driven.write() +} + +// We create three parse tables: +// +// - `ACTION[state * num_states + terminal]: i32`: given a state and next token, +// yields an integer indicating whether to shift/reduce (see below) +// - `EOF_ACTION[state]: i32`: as above, but for the EOF token +// - `GOTO[state * num_states + nonterminal]: i32`: index + 1 of state to jump to when given +// nonterminal is pushed (no error is possible) +// +// For the `ACTION` and `EOF_ACTION` tables, the value is an `i32` and +// its interpretation varies depending on whether it is positive or +// negative: +// +// - if zero, parse error. +// - if a positive integer (not zero), it is the next state to shift to. +// - if a negative integer (not zero), it is the index of a reduction +// action to execute (actually index + 1). +// +// We maintain two stacks: one is a stack of state indexes (each an +// u32). The other is a stack of values and spans: `(L, T, L)`. `L` is +// the location type and represents the start/end span. `T` is the +// value of the symbol. The type `T` is an `enum` that we synthesize +// which contains a variant for all the possibilities: +// +// ``` +// enum Value<> { +// // One variant for each terminal: +// Term1(Ty1), +// ... +// TermN(TyN), +// +// // One variant for each nonterminal: +// Nt1(Ty1), +// ... +// NtN(TyN), +// } +// ``` +// +// The action parser function looks like this (pseudo-code): +// +// ``` +// fn parse_fn(tokens: TOKENS) -> Result +// where TOKENS: Iterator> +// { +// let mut states = vec![0]; // initial state is zero +// let mut symbols = vec![]; +// 'shift: loop { +// // Code to shift the next symbol and determine which terminal +// // it is; emitted by `shift_symbol()`. +// let lookahead = match tokens.next() { +// Some(Ok(l)) => l, +// None => break 'shift, +// Some(Err(e)) => return Err(e), +// }; +// let integer = match lookahead { +// (_, PatternForTerminal0(...), _) => 0, +// ... +// }; +// +// // Code to process next symbol. +// 'inner: loop { +// let symbol = match lookahead { +// (l, PatternForTerminal0(...), r) => { +// (l, Value::VariantForTerminal0(...), r), +// } +// ... +// }; +// let state = *states.last().unwrap() as usize; +// let action = ACTION[state * NUM_STATES + integer]; +// if action > 0 { // shift +// states.push(action - 1); +// symbols.push(symbol); +// continue 'shift; +// } else if action < 0 { // reduce +// if let Some(r) = reduce(action, Some(&lookahead.0), &mut states, &mut symbols) { +// // Give errors from within grammar a higher priority +// if r.is_err() { +// return r; +// } +// return Err(lalrpop_util::ParseError::ExtraToken { token: lookahead }); +// } +// } else { +// // Error recovery code: emitted by `try_error_recovery` +// let mut err_lookahead = Some(lookahead); +// let mut err_integer = Some(integer); +// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, +// &mut err_lookahead, &mut err_integer) { +// Err(e) => return e, +// Ok(Some(v)) => return Ok(v), +// Ok(None) => { } +// } +// match (err_lookahead, err_integer) { +// (Some(l), Some(i)) => { +// lookahead = l; +// integer = i; +// continue 'inner; +// } +// _ => break 'shift; +// } +// } +// } +// } +// +// // Process EOF +// while let Some(state) = self.states.pop() { +// let action = EOF_ACTION[state * NUM_STATES]; +// if action < 0 { // reduce +// try!(reduce(action, None, &mut states, &mut symbols)); +// } else { +// let mut err_lookahead = None; +// let mut err_integer = None; +// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, +// &mut err_lookahead, &mut err_integer) { +// Err(e) => return e, +// Ok(Some(v)) => return Ok(v), +// Ok(None) => { } +// } +// } +// } +// } +// +// // generated by `emit_reduce_actions()` +// fn reduce(action: i32, lookahead_start: Option<&L>, +// states: &mut Vec, symbols: &mut Vec<(L, Symbol, L)) +// -> Option> { +// let nonterminal = match -action { +// 0 => { +// // Execute reduce action 0 to produce nonterminal N, popping from stacks etc +// // (generated by `emit_reduce_action()`). If this is a fallible action, +// // it may return `Some(Err)`, and if this is a reduce of the start NT, +// // it may return `Some(Ok)`. +// states.pop(); // however many times +// symbols.pop(); // however many times +// let data = action_fn0(...); +// symbols.push((l, Value::VariantForNonterminalN(data), r)); +// N +// } +// ... +// }; +// let state = *states.last().unwrap(); +// let next_state = GOTO[state * NUM_STATES + nonterminal] - 1; +// state_stack.push(next_state); +// None +// } +// +// generated by `write_error_recovery_fn` +// fn error_recovery(...) { +// let mut dropped_tokens = vec![]; +// +// // First, reduce as long as we can with the `!` token as lookahead +// loop { +// let state = *states.last().unwrap() as usize; +// let action = ACTION[(state + 1) * ACTIONS_PER_STATE - 1]; +// if action >= 0 { +// break; +// } +// if let Some(r) = reduce(action, None, &mut states, &mut symbols) { +// return r; +// } +// } +// +// let top0; +// 'find_state: loop { +// // See if there is a state that can shift `!` token. If so, +// // break. +// for top in (0..states.len()).rev() { +// let state = states[top]; +// let action = ACTION[state * ACTIONS_PER_STATE + 1]; +// if action <= 0 { continue; } +// let error_state = action - 1; +// if accepts(error_state, &states[..top+1], *opt-integer) { +// top0 = top; +// break 'find_state; +// } +// } +// +// // Else, drop a token from the input and try again. +// 'eof: loop { +// match opt_lookahead.take() { +// None => { +// // No more tokens to drop +// return Err(...); +// } +// Some(mut lookahead) => { +// dropped_tokens.push(lookahead); +// next_token() +// opt_lookahead = Some(match tokens.next() { +// Some(Ok(l)) => l, +// None => break 'eof, +// Some(Err(e)) => return Err(e), +// }); +// opt_integer = Some(match lookahead { +// (_, PatternForTerminal0(...), _) => 0, +// ... +// }); +// continue 'find_state; +// } +// } +// } +// opt_lookahead = None; +// opt_integer = None; +// } +// +// let top = top0; +// let start = /* figure out "start" of error */; +// let end = /* figure out "end" of error */; +// states.truncate(top + 1); +// symbols.truncate(top); +// let recover_state = states[top]; +// let error_state = ACTION[recover_state * ACTIONS_PER_STATE + 1] - 1; +// states.push(error_state); +// let recovery = ErrorRecovery { dropped_tokens, ... }; +// symbols.push((start, Symbol::Termerror(recovery), end)); +// Ok(None) +// } +// ``` + +enum Comment<'a, T> { + Goto(T, usize), + Error(T), + Reduce(T, &'a Production), +} + +impl<'a, T: fmt::Display> fmt::Display for Comment<'a, T> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + Comment::Goto(ref token, new_state) => { + write!(f, " // on {}, goto {}", token, new_state) + } + Comment::Error(ref token) => write!(f, " // on {}, error", token), + Comment::Reduce(ref token, production) => { + write!(f, " // on {}, reduce `{:?}`", token, production) + } + } + } +} + +struct TableDriven<'grammar> { + /// type parameters for the `Nonterminal` type + symbol_type_params: Vec, + + symbol_where_clauses: Vec>, + + /// a list of each nonterminal in some specific order + all_nonterminals: Vec, + + reduce_indices: Map<&'grammar Production, usize>, + + state_type: &'static str, + + variant_names: Map, + variants: Map, + reduce_functions: Set, +} + +impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TableDriven<'grammar>> { + fn new_table_driven( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'ascent [LR1State<'grammar>], + action_module: &str, + out: &'ascent mut RustWrite, + ) -> Self { + // The nonterminal type needs to be parameterized by all the + // type parameters that actually appear in the types of + // nonterminals. We can't just use *all* type parameters + // because that would leave unused lifetime/type parameters in + // some cases. + let referenced_ty_params: Set = grammar + .types + .nonterminal_types() + .into_iter() + .chain(grammar.types.terminal_types()) + .flat_map(|t| t.referenced()) + .collect(); + + let symbol_type_params: Vec<_> = grammar + .type_parameters + .iter() + .filter(|t| referenced_ty_params.contains(t)) + .cloned() + .collect(); + + let mut referenced_where_clauses = Set::new(); + for wc in &grammar.where_clauses { + wc.map(|ty| { + if ty.referenced() + .iter() + .any(|p| symbol_type_params.contains(p)) + { + referenced_where_clauses.insert(wc.clone()); + } + }); + } + + let symbol_where_clauses: Vec<_> = grammar + .where_clauses + .iter() + .filter(|wc| referenced_where_clauses.contains(wc)) + .cloned() + .collect(); + + // Assign each production a unique index to use as the values for reduce + // actions in the ACTION and EOF_ACTION tables. + let reduce_indices: Map<&'grammar Production, usize> = grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(0..) + .collect(); + + let state_type = { + // `reduce_indices` are allowed to be +1 since the negative maximum of any integer type + // is one larger than the positive maximum + let max_value = ::std::cmp::max(states.len(), reduce_indices.len()); + if max_value <= ::std::i8::MAX as usize { + "i8" + } else if max_value <= ::std::i16::MAX as usize { + "i16" + } else { + "i32" + } + }; + + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + false, + action_module, + TableDriven { + symbol_type_params: symbol_type_params, + symbol_where_clauses: symbol_where_clauses, + all_nonterminals: grammar.nonterminals.keys().cloned().collect(), + reduce_indices: reduce_indices, + state_type: state_type, + variant_names: Map::new(), + variants: Map::new(), + reduce_functions: Set::new(), + }, + ) + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_value_type_defn()); + try!(this.write_parse_table()); + try!(this.write_parser_fn()); + try!(this.write_error_recovery_fn()); + try!(this.write_accepts_fn()); + try!(this.emit_reduce_actions()); + try!(this.emit_downcast_fns()); + try!(this.emit_reduce_action_functions()); + Ok(()) + }) + } + + fn write_value_type_defn(&mut self) -> io::Result<()> { + // sometimes some of the variants are not used, particularly + // if we are generating multiple parsers from the same file: + rust!(self.out, "#[allow(dead_code)]"); + rust!( + self.out, + "pub enum {}Symbol<{}>", + self.prefix, + Sep(", ", &self.custom.symbol_type_params) + ); + + if !self.custom.symbol_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.symbol_where_clauses) + ); + } + + rust!(self.out, " {{"); + + // make one variant per terminal + for term in &self.grammar.terminals.all { + let ty = self.types.terminal_type(term).clone(); + let len = self.custom.variants.len(); + let name = match self.custom.variants.entry(ty.clone()) { + Entry::Occupied(entry) => entry.into_mut(), + Entry::Vacant(entry) => { + let name = format!("Variant{}", len); + + rust!(self.out, "{}({}),", name, ty); + entry.insert(name) + } + }; + + self.custom + .variant_names + .insert(Symbol::Terminal(term.clone()), name.clone()); + } + + // make one variant per nonterminal + for nt in self.grammar.nonterminals.keys() { + let ty = self.types.nonterminal_type(nt).clone(); + let len = self.custom.variants.len(); + let name = match self.custom.variants.entry(ty.clone()) { + Entry::Occupied(entry) => entry.into_mut(), + Entry::Vacant(entry) => { + let name = format!("Variant{}", len); + + rust!(self.out, "{}({}),", name, ty); + entry.insert(name) + } + }; + + self.custom + .variant_names + .insert(Symbol::Nonterminal(nt.clone()), name.clone()); + } + rust!(self.out, "}}"); + Ok(()) + } + + fn write_parse_table(&mut self) -> io::Result<()> { + // The table is a two-dimensional matrix indexed first by state + // and then by the terminal index. The value is described above. + rust!( + self.out, + "const {}ACTION: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + + if Tls::session().emit_comments { + for item in state.items.vec.iter() { + rust!(self.out, "// {:?}", item); + } + } + + // Write an action for each terminal (either shift, reduce, or error). + let custom = &self.custom; + let iterator = self.grammar.terminals.all.iter().map(|terminal| { + if let Some(new_state) = state.shifts.get(&terminal) { + ( + new_state.0 as i32 + 1, + Comment::Goto(Token::Terminal(terminal.clone()), new_state.0), + ) + } else { + Self::write_reduction(custom, state, &Token::Terminal(terminal.clone())) + } + }); + try!(self.out.write_table_row(iterator)) + } + + rust!(self.out, "];"); + + // Actions on EOF. Indexed just by state. + rust!( + self.out, + "const {}EOF_ACTION: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + let reduction = Self::write_reduction(&self.custom, state, &Token::EOF); + try!(self.out.write_table_row(Some(reduction))); + } + rust!(self.out, "];"); + + // The goto table is indexed by state and *nonterminal*. + rust!( + self.out, + "const {}GOTO: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + let iterator = self.grammar.nonterminals.keys().map(|nonterminal| { + if let Some(&new_state) = state.gotos.get(&nonterminal) { + ( + new_state.0 as i32 + 1, + Comment::Goto(nonterminal, new_state.0), + ) + } else { + (0, Comment::Error(nonterminal)) + } + }); + try!(self.out.write_table_row(iterator)); + } + rust!(self.out, "];"); + + try!(self.emit_expected_tokens_fn()); + + Ok(()) + } + + fn write_reduction<'s>( + custom: &TableDriven<'grammar>, + state: &'s LR1State, + token: &Token, + ) -> (i32, Comment<'s, Token>) { + let reduction = state + .reductions + .iter() + .filter(|&&(ref t, _)| t.contains(token)) + .map(|&(_, p)| p) + .next(); + if let Some(production) = reduction { + let action = custom.reduce_indices[production]; + ( + -(action as i32 + 1), + Comment::Reduce(token.clone(), production), + ) + } else { + // Otherwise, this is an error. Store 0. + (0, Comment::Error(token.clone())) + } + } + + fn write_parser_fn(&mut self) -> io::Result<()> { + let phantom_data_expr = self.phantom_data_expr(); + + try!(self.start_parser_fn()); + + try!(self.define_tokens()); + + // State and data stack. + rust!( + self.out, + "let mut {}states = vec![0_{}];", + self.prefix, + self.custom.state_type + ); + rust!(self.out, "let mut {}symbols = vec![];", self.prefix); + + rust!(self.out, "let mut {}integer;", self.prefix); + rust!(self.out, "let mut {}lookahead;", self.prefix); + // The location of the last token is necessary for for error recovery at EOF (or they would not have + // a location) + rust!( + self.out, + "let {}last_location = &mut Default::default();", + self.prefix + ); + + // Outer loop: each time we continue around this loop, we + // shift a new token from the input. We break from the loop + // when the end of the input is reached (we return early if an + // error occurs). + rust!(self.out, "'{}shift: loop {{", self.prefix); + + // Read next token from input. + try!(self.next_token("lookahead", "tokens", "last_location", "shift")); + try!(self.token_to_integer("integer", "lookahead")); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"pulled next token from input: {{:?}}\", \ + {p}lookahead);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - integer: {{}}\", \ + {p}integer);", + p = self.prefix + ); + } + + // Loop. + rust!(self.out, "'{}inner: loop {{", self.prefix); + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + + // Load the next action to take. + rust!( + self.out, + "let {}action = {}ACTION[{}state * {} + {}integer];", + self.prefix, + self.prefix, + self.prefix, + self.grammar.terminals.all.len(), + self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"state: {{}} lookahead: {{:?}}/{{}} action: {{}} stack-depth: {{}}\", \ + {p}state, {p}lookahead, {p}integer, {p}action, {p}symbols.len());", + p = self.prefix + ); + } + + // Shift. + rust!(self.out, "if {}action > 0 {{", self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"--> shift `{{:?}}`\", {p}lookahead);", + p = self.prefix + ); + } + try!(self.token_to_symbol()); + rust!( + self.out, + "{}states.push({}action - 1);", + self.prefix, + self.prefix + ); + rust!( + self.out, + "{}symbols.push(({}lookahead.0, {}symbol, {}lookahead.2));", + self.prefix, + self.prefix, + self.prefix, + self.prefix + ); + rust!(self.out, "continue '{}shift;", self.prefix); + + // Reduce. + rust!(self.out, "}} else if {}action < 0 {{", self.prefix); + if DEBUG_PRINT { + rust!(self.out, "println!(\"--> reduce\");"); + } + rust!( + self.out, + "if let Some(r) = {p}reduce({}{p}action, Some(&{p}lookahead.0), &mut {p}states, &mut \ + {p}symbols, {}) {{", + self.grammar.user_parameter_refs(), + phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "if r.is_err() {{"); + rust!(self.out, "return r;"); + rust!(self.out, "}}"); + rust!( + self.out, + "return Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }});", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + + // Error. + rust!(self.out, "}} else {{"); + + self.try_error_recovery( + "tokens", + "states", + "symbols", + "last_location", + Some(("lookahead", "integer", "inner", "shift")), + )?; + + rust!(self.out, "}}"); // if-else-if-else + + rust!(self.out, "}}"); // reduce loop + + rust!(self.out, "}}"); // shift loop + + // EOF loop + rust!(self.out, "loop {{"); + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"EOF loop state: {{}}\", {}state);", + self.prefix + ); + } + rust!( + self.out, + "let {}action = {}EOF_ACTION[{}state];", + self.prefix, + self.prefix, + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"EOF in state {{}} takes action {{}}\", {}state, {}action);", + self.prefix, + self.prefix + ); + } + rust!(self.out, "if {}action < 0 {{", self.prefix); + rust!( + self.out, + "if let Some(r) = {}reduce({}{}action, None, &mut {}states, &mut {}symbols, {}) {{", + self.prefix, + self.grammar.user_parameter_refs(), + self.prefix, + self.prefix, + self.prefix, + phantom_data_expr + ); + rust!(self.out, "return r;"); + rust!(self.out, "}}"); + rust!(self.out, "}} else {{"); + + self.try_error_recovery("tokens", "states", "symbols", "last_location", None)?; + + rust!(self.out, "}}"); // else + + rust!(self.out, "}}"); // while let + + self.end_parser_fn() + } + + fn next_token( + &mut self, + lookahead: &str, + tokens: &str, + last_location: &str, + break_on_eof: &str, + ) -> io::Result<()> { + rust!( + self.out, + "{p}{lookahead} = match {p}{tokens}.next() {{", + lookahead = lookahead, + tokens = tokens, + p = self.prefix + ); + rust!(self.out, "Some(Ok(v)) => v,"); + rust!(self.out, "None => break '{}{},", self.prefix, break_on_eof); // EOF: break out + if self.grammar.intern_token.is_some() { + // when we generate the tokenizer, the generated errors are `ParseError` values + rust!(self.out, "Some(Err(e)) => return Err(e),"); + } else { + // otherwise, they are user errors + rust!( + self.out, + "Some(Err(e)) => return Err({p}lalrpop_util::ParseError::User {{ error: e }}),", + p = self.prefix + ); + } + rust!(self.out, "}};"); + rust!( + self.out, + "*{p}{last_location} = {p}{lookahead}.2.clone();", + last_location = last_location, + lookahead = lookahead, + p = self.prefix + ); + Ok(()) + } + + fn token_to_integer(&mut self, integer: &str, lookahead: &str) -> io::Result<()> { + rust!( + self.out, + "{p}{integer} = match {p}{lookahead}.1 {{", + integer = integer, + lookahead = lookahead, + p = self.prefix + ); + for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { + if *terminal == TerminalString::Error { + continue; + } + let pattern = self.grammar.pattern(terminal).map(&mut |_| "_"); + rust!( + self.out, + "{pattern} if true => {index},", + pattern = pattern, + index = index + ); + } + + rust!(self.out, "_ => {{"); + let prefix = self.prefix; + try!(self.let_unrecognized_token_error( + "error", + &format!("Some({p}{lookahead})", lookahead = lookahead, p = prefix) + )); + rust!(self.out, "return Err({p}error);", p = self.prefix); + rust!(self.out, "}}"); + + rust!(self.out, "}};"); + Ok(()) + } + + fn token_to_symbol(&mut self) -> io::Result<()> { + rust!( + self.out, + "let {}symbol = match {}integer {{", + self.prefix, + self.prefix + ); + for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { + if *terminal == TerminalString::Error { + continue; + } + rust!(self.out, "{} => match {}lookahead.1 {{", index, self.prefix); + + let mut pattern_names = vec![]; + let pattern = self.grammar.pattern(terminal).map(&mut |_| { + let index = pattern_names.len(); + pattern_names.push(format!("{}tok{}", self.prefix, index)); + pattern_names.last().cloned().unwrap() + }); + + let mut pattern = format!("{}", pattern); + if pattern_names.is_empty() { + pattern_names.push(format!("{}tok", self.prefix)); + pattern = format!("{}tok @ {}", self.prefix, pattern); + } + + let variant_name = self.variant_name_for_symbol(&Symbol::Terminal(terminal.clone())); + rust!( + self.out, + "{} => {}Symbol::{}(({})),", + pattern, + self.prefix, + variant_name, + pattern_names.join(", ") + ); + rust!(self.out, "_ => unreachable!(),"); + rust!(self.out, "}},"); + } + + rust!(self.out, "_ => unreachable!(),"); + + rust!(self.out, "}};"); + Ok(()) + } + + fn emit_reduce_actions(&mut self) -> io::Result<()> { + let success_type = self.types.nonterminal_type(&self.start_symbol); + let parse_error_type = self.types.parse_error_type(); + let loc_type = self.types.terminal_loc_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + + let parameters = vec![ + format!("{}action: {}", self.prefix, self.custom.state_type), + format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), + format!( + "{}states: &mut ::std::vec::Vec<{}>", + self.prefix, self.custom.state_type + ), + format!( + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, spanned_symbol_type + ), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), + format!("{}reduce", self.prefix), + vec![], + None, + parameters, + format!("Option>", success_type, parse_error_type), + vec![] + )); + rust!(self.out, "{{"); + + rust!( + self.out, + "let ({p}pop_states, {p}symbol, {p}nonterminal) = match -{}action {{", + p = self.prefix + ); + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + rust!(self.out, "{} => {{", index); + // In debug builds LLVM is not very good at reusing stack space which makes this + // reduce function take up O(number of states) space. By wrapping each reduce action in + // an immediately called function each reduction takes place in their own function + // context which ends up reducing the stack space used. + + // Fallible actions and the start symbol may do early returns so we avoid wrapping + // those + let is_fallible = self.grammar.action_is_fallible(production.action); + let reduce_stack_space = !is_fallible && production.nonterminal != self.start_symbol; + + if reduce_stack_space { + self.custom.reduce_functions.insert(index); + let phantom_data_expr = self.phantom_data_expr(); + rust!( + self.out, + "{p}reduce{}({}{p}action, {p}lookahead_start, {p}states, {p}symbols, {})", + index, + self.grammar.user_parameter_refs(), + phantom_data_expr, + p = self.prefix + ); + } else { + try!(self.emit_reduce_action(production)); + } + + rust!(self.out, "}}"); + } + rust!( + self.out, + "_ => panic!(\"invalid action code {{}}\", {}action)", + self.prefix + ); + rust!(self.out, "}};"); + + // pop the consumed states from the stack + rust!( + self.out, + "let {p}states_len = {p}states.len();", + p = self.prefix + ); + rust!( + self.out, + "{p}states.truncate({p}states_len - {p}pop_states);", + p = self.prefix + ); + + rust!(self.out, "{p}symbols.push({p}symbol);", p = self.prefix); + + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + rust!( + self.out, + "let {}next_state = {}GOTO[{}state * {} + {}nonterminal] - 1;", + self.prefix, + self.prefix, + self.prefix, + self.grammar.nonterminals.len(), + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"goto state {{}} from {{}} due to nonterminal {{}}\", {}next_state, \ + {}state, {}nonterminal);", + self.prefix, + self.prefix, + self.prefix + ); + } + rust!( + self.out, + "{}states.push({}next_state);", + self.prefix, + self.prefix + ); + rust!(self.out, "None"); + rust!(self.out, "}}"); + Ok(()) + } + + fn emit_reduce_action_functions(&mut self) -> io::Result<()> { + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + if self.custom.reduce_functions.contains(&index) { + self.emit_reduce_alternative_fn_header(index)?; + self.emit_reduce_action(production)?; + rust!(self.out, "}}"); + } + } + Ok(()) + } + + fn emit_reduce_alternative_fn_header(&mut self, index: usize) -> io::Result<()> { + let loc_type = self.types.terminal_loc_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + + let parameters = vec![ + format!("{}action: {}", self.prefix, self.custom.state_type), + format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), + format!( + "{}states: &mut ::std::vec::Vec<{}>", + self.prefix, self.custom.state_type + ), + format!( + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, spanned_symbol_type + ), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), + format!("{}reduce{}", self.prefix, index), + vec![], + None, + parameters, + format!("(usize, {}, usize)", spanned_symbol_type,), + vec![] + )); + rust!(self.out, "{{"); + Ok(()) + } + + fn emit_reduce_action(&mut self, production: &Production) -> io::Result<()> { + rust!(self.out, "// {:?}", production); + + // Pop each of the symbols and their associated states. + for (index, symbol) in production.symbols.iter().enumerate().rev() { + let name = self.variant_name_for_symbol(symbol); + rust!( + self.out, + "let {}sym{} = {}pop_{}({}symbols);", + self.prefix, + index, + self.prefix, + name, + self.prefix + ); + } + let transfer_syms: Vec<_> = (0..production.symbols.len()) + .map(|i| format!("{}sym{}", self.prefix, i)) + .collect(); + + // Execute the action fn + // identify the "start" location for this production; this + // is typically the start of the first symbol we are + // reducing; but in the case of an empty production, it + // will be the last symbol pushed, or at worst `default`. + if let Some(first_sym) = transfer_syms.first() { + rust!( + self.out, + "let {}start = {}.0.clone();", + self.prefix, + first_sym + ); + } else { + // we pop no symbols, so grab from the top of the stack + // (unless we are in the start state, in which case the + // stack will be empty) + rust!( + self.out, + "let {}start = {}symbols.last().map(|s| s.2.clone()).unwrap_or_default();", + self.prefix, + self.prefix + ); + } + + // identify the "end" location for this production; + // this is typically the end of the last symbol we are reducing, + // but in the case of an empty production it will come from the + // lookahead + if let Some(last_sym) = transfer_syms.last() { + rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); + } else { + rust!( + self.out, + "let {}end = {}lookahead_start.cloned().unwrap_or_else(|| \ + {}start.clone());", + self.prefix, + self.prefix, + self.prefix + ); + } + + let transfered_syms = transfer_syms.len(); + + let mut args = transfer_syms; + if transfered_syms == 0 { + args.push(format!("&{}start", self.prefix)); + args.push(format!("&{}end", self.prefix)); + } + + // invoke the action code + let is_fallible = self.grammar.action_is_fallible(production.action); + if is_fallible { + rust!( + self.out, + "let {}nt = match {}::{}action{}::<{}>({}{}) {{", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ); + rust!(self.out, "Ok(v) => v,"); + rust!(self.out, "Err(e) => return Some(Err(e)),"); + rust!(self.out, "}};"); + } else { + rust!( + self.out, + "let {}nt = {}::{}action{}::<{}>({}{});", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ); + } + + // if this is the final state, return it + if production.nonterminal == self.start_symbol { + rust!(self.out, "return Some(Ok({}nt));", self.prefix); + return Ok(()); + } + + // push the produced value on the stack + let name = + self.variant_name_for_symbol(&Symbol::Nonterminal(production.nonterminal.clone())); + rust!( + self.out, + "let {}symbol = ({}start, {}Symbol::{}({}nt), {}end);", + self.prefix, + self.prefix, + self.prefix, + name, + self.prefix, + self.prefix + ); + + // produce the index that we will use to extract the next state + // from GOTO array + let index = self.custom + .all_nonterminals + .iter() + .position(|x| *x == production.nonterminal) + .unwrap(); + rust!( + self.out, + "({len}, {p}symbol, {index})", + p = self.prefix, + index = index, + len = production.symbols.len() + ); + + Ok(()) + } + + fn variant_name_for_symbol(&mut self, s: &Symbol) -> String { + self.custom.variant_names[s].clone() + } + + fn emit_downcast_fns(&mut self) -> io::Result<()> { + for (ty, name) in self.custom.variants.clone() { + try!(self.emit_downcast_fn(&name, ty)); + } + + Ok(()) + } + + fn emit_downcast_fn(&mut self, variant_name: &str, variant_ty: TypeRepr) -> io::Result<()> { + let spanned_symbol_type = self.spanned_symbol_type(); + + rust!(self.out, "fn {}pop_{}<", self.prefix, variant_name); + for type_parameter in &self.custom.symbol_type_params { + rust!(self.out, " {},", type_parameter); + } + rust!(self.out, ">("); + rust!( + self.out, + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, + spanned_symbol_type + ); + rust!(self.out, ") -> {}", self.types.spanned_type(variant_ty)); + + if !self.custom.symbol_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.symbol_where_clauses) + ); + } + + rust!(self.out, " {{"); + + if DEBUG_PRINT { + rust!(self.out, "println!(\"pop_{}\");", variant_name); + } + rust!(self.out, "match {}symbols.pop().unwrap() {{", self.prefix); + rust!( + self.out, + "({}l, {}Symbol::{}({}v), {}r) => ({}l, {}v, {}r),", + self.prefix, + self.prefix, + variant_name, + self.prefix, + self.prefix, + self.prefix, + self.prefix, + self.prefix + ); + rust!(self.out, "_ => panic!(\"symbol type mismatch\")"); + rust!(self.out, "}}"); + + rust!(self.out, "}}"); + + Ok(()) + } + + /// Tries to invoke the error recovery function. Takes a bunch of + /// arguments from the surrounding state: + /// + /// - `tokens` -- name of a mut variable of type `I` where `I` is an iterator over tokens + /// - `symbols` -- name of symbols vector + /// - `last_location` -- name of `last_location` variable + /// - `opt_lookahead` -- see below + /// + /// The `opt_lookahead` tuple contains the lookahead -- if any -- + /// or None for EOF. It is a 4-tuple: (lookahead, integer, + /// tok_target, and eof_target). The idea is like this: on entry, + /// lookahead/integer have values. On exit, if the next token is + /// EOF, because we have dropped all remaining tokens, we will + /// `break` to `eof_target`. Otherwise, we will `continue` to + /// `tok_target` after storing next token into the variable + /// `lookahead` and its integer index into `integer`. + fn try_error_recovery( + &mut self, + tokens: &str, + states: &str, + symbols: &str, + last_location: &str, + opt_lookahead: Option<(&str, &str, &str, &str)>, + ) -> io::Result<()> { + if let Some((out_lookahead, out_integer, _, _)) = opt_lookahead { + rust!( + self.out, + "let mut {p}err_lookahead = Some({p}{});", + out_lookahead, + p = self.prefix, + ); + + rust!( + self.out, + "let mut {p}err_integer: Option = Some({p}{});", + out_integer, + p = self.prefix, + ); + } else { + rust!( + self.out, + "let mut {p}err_lookahead = None;", + p = self.prefix, + ); + + rust!( + self.out, + "let mut {p}err_integer: Option = None;", + p = self.prefix, + ); + } + + // Easy case: error recovery is disabled. Just error out. + if !self.grammar.uses_error_recovery { + let prefix = self.prefix; + self.let_unrecognized_token_error("error", &format!("{p}err_lookahead", p = prefix))?; + rust!(self.out, "return Err({p}error)", p = prefix); + return Ok(()); + } + + let phantom_data_expr = self.phantom_data_expr(); + + rust!( + self.out, + "match {p}error_recovery(\ + {upr} \ + &mut {p}{tokens}, \ + &mut {p}{states}, \ + &mut {p}{symbols}, \ + {p}{last_location}, \ + &mut {p}err_lookahead, \ + &mut {p}err_integer, \ + {phantom_data_expr}) {{", + upr = self.grammar.user_parameter_refs(), + tokens = tokens, + states = states, + symbols = symbols, + last_location = last_location, + phantom_data_expr = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "Err({p}e) => return Err({p}e),", p = self.prefix); + rust!( + self.out, + "Ok(Some({p}v)) => return Ok({p}v),", + p = self.prefix + ); + rust!(self.out, "Ok(None) => (),"); + rust!(self.out, "}}"); + + if let Some((out_lookahead, out_integer, tok_target, eof_target)) = opt_lookahead { + rust!( + self.out, + "match ({p}err_lookahead, {p}err_integer) {{", + p = self.prefix + ); + rust!(self.out, "(Some({p}l), Some({p}i)) => {{", p = self.prefix); + rust!(self.out, "{p}{} = {p}l;", out_lookahead, p = self.prefix); + rust!(self.out, "{p}{} = {p}i;", out_integer, p = self.prefix); + rust!(self.out, "continue '{p}{};", tok_target, p = self.prefix); + rust!(self.out, "}}"); // end arm + rust!(self.out, "_ => break '{p}{},", eof_target, p = self.prefix); + rust!(self.out, "}}"); // end match + } + + Ok(()) + } + + fn write_error_recovery_fn(&mut self) -> io::Result<()> { + // Easy case: error recovery is disabled. Just error out. + if !self.grammar.uses_error_recovery { + return Ok(()); + } + + let parse_error_type = self.types.parse_error_type(); + let error_type = self.types.error_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + let triple_type = self.types.triple_type(); + let loc_type = self.types.terminal_loc_type(); + let prefix = self.prefix; + let actions_per_state = self.grammar.terminals.all.len(); + let start_type = self.types.nonterminal_type(&self.start_symbol); + + // The tokenizr, when we supply it, returns parse + // errors. Otherwise, it returns custom user errors. + let tok_error_type = if self.grammar.intern_token.is_some() { + parse_error_type + } else { + &error_type + }; + + let parameters = vec![ + format!("{p}tokens: &mut {p}I", p = self.prefix), + format!( + "{p}states: &mut ::std::vec::Vec<{typ}>", + p = self.prefix, + typ = self.custom.state_type + ), + format!( + "{p}symbols: &mut ::std::vec::Vec<{spanned_symbol_type}>", + spanned_symbol_type = spanned_symbol_type, + p = self.prefix + ), + format!( + "{p}last_location: &mut {loc_type}", + loc_type = loc_type, + p = self.prefix + ), + format!( + "{p}opt_lookahead: &mut Option<{triple_type}>", + triple_type = triple_type, + p = self.prefix + ), + format!("{p}opt_integer: &mut Option", p = self.prefix), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{p}error_recovery", p = self.prefix), + vec![format!("{p}I", p = self.prefix)], + None, + parameters, + format!( + "Result, {parse_error_type}>", + start_type = start_type, + parse_error_type = parse_error_type + ), + vec![ + format!( + "{p}I: Iterator\ + >", + triple_type = triple_type, + tok_error_type = tok_error_type, + p = self.prefix + ), + ] + )); + + rust!(self.out, "{{"); + + self.let_unrecognized_token_error( + "error", + &format!("{p}opt_lookahead.clone()", p = prefix), + )?; + + rust!(self.out, "let mut {}dropped_tokens = vec![];", prefix); + + let phantom_data_expr = self.phantom_data_expr(); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Initiating error recovery in state: {{}}\", \ + {p}states.last().unwrap());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - state stack size: {{}}\", \ + {p}states.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - symbol stack size: {{}}\", \ + {p}symbols.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - opt lookahead: {{:?}}\", \ + {p}opt_lookahead);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - opt integer: {{:?}}\", \ + {p}opt_integer);", + p = self.prefix + ); + } + + // We are going to insert ERROR into the lookahead. So, first, + // perform all reductions from current state triggered by having + // ERROR in the lookahead. + rust!(self.out, "loop {{"); + rust!( + self.out, + "let {p}state = *{p}states.last().unwrap() as usize;", + p = self.prefix + ); + + // Access the action with `error` as the lookahead; it is always final + // column in the row for this state + rust!( + self.out, + "let {p}action = {p}ACTION[{p}state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + rust!(self.out, "if {p}action >= 0 {{", p = self.prefix); + rust!(self.out, "break;"); + rust!(self.out, "}}"); + + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery reduces on action: {{}}", {}action);"#, + self.prefix + ); + } + + rust!( + self.out, + "let {p}lookahead_start = {p}opt_lookahead.as_ref().map(|l| &l.0);", + p = self.prefix + ); + rust!( + self.out, + "if let Some(r) = {p}reduce( \ + {upr} \ + {p}action, \ + {p}lookahead_start, \ + {p}states, \ + {p}symbols, \ + {phantoms} \ + ) {{", + upr = self.grammar.user_parameter_refs(), + phantoms = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "return Ok(Some(r?));"); + rust!(self.out, "}}"); + rust!(self.out, "}}"); // end reduce loop + + // Now try to find the recovery state. + + rust!( + self.out, + "let {p}states_len = {p}states.len();", + p = self.prefix + ); + + // I'd rather generate `let top = loop {{...}}` but I do not + // to retain compatibility with Rust 1.16.0. + rust!(self.out, "let {p}top0;", p = self.prefix); + + rust!(self.out, "'{p}find_state: loop {{", p = self.prefix); + + // Go backwards through the states... + rust!( + self.out, + "for {p}top in (0..{p}states_len).rev() {{", + p = self.prefix + ); + rust!( + self.out, + "let {p}state = {p}states[{p}top] as usize;", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Probing recovery from state {{}} (top = {{}}).\", {p}state, {p}top);", + p = self.prefix, + ); + } + // ...fetch action for error token... + rust!( + self.out, + "let {p}action = {p}ACTION[{p}state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + // ...if action is error or reduce, go to next state... + rust!( + self.out, + "if {p}action <= 0 {{ continue; }}", + p = self.prefix + ); + // ...otherwise, action *must* be shift. That would take us into `error_state`. + rust!( + self.out, + "let {p}error_state = {p}action - 1;", + p = self.prefix + ); + // If `error_state` can accept this lookahead, we are done. + rust!( + self.out, + "if {p}accepts(\ + {upr} \ + {p}error_state, \ + &{p}states[..{p}top + 1], \ + *{p}opt_integer, \ + {phantoms},\ + ) {{", + upr = self.grammar.user_parameter_refs(), + phantoms = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "{p}top0 = {p}top;", p = self.prefix); + rust!(self.out, "break '{p}find_state;", p = self.prefix); + rust!(self.out, "}}"); // end if + rust!(self.out, "}}"); // end for + + // Otherwise, if we did not find any enclosing state that can + // error and then accept this lookahead, we need to drop the current token. + + // Introduce an artificial loop here so we can break to + // it. This is a hack to re-use the `next_token` function. + rust!(self.out, "'{p}eof: loop {{", p = self.prefix); + rust!( + self.out, + "match {p}opt_lookahead.take() {{", + p = self.prefix + ); + + // If the lookahead is EOF, and there is no suitable state to + // recover to, we just have to abort EOF recovery. Find the + // first token that we dropped (if any) and use that as the + // point of error. + rust!(self.out, "None => {{"); + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery: cannot drop EOF; aborting");"# + ); + } + rust!(self.out, "return Err({}error)", prefix); + rust!(self.out, "}}"); // end None arm + + // Else, drop the current token and shift to the next. If there is a next + // token, we will `continue` to the start of the `'find_state` loop. + rust!(self.out, "Some(mut {p}lookahead) => {{", p = self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery: dropping token `{{:?}}`", {p}lookahead);"#, + p = self.prefix, + ); + } + rust!( + self.out, + "{p}dropped_tokens.push({p}lookahead);", + p = self.prefix + ); + self.next_token("lookahead", "tokens", "last_location", "eof")?; + rust!(self.out, "let {p}integer;", p = self.prefix); + try!(self.token_to_integer("integer", "lookahead")); + rust!( + self.out, + "*{p}opt_lookahead = Some({p}lookahead);", + p = self.prefix + ); + rust!( + self.out, + "*{p}opt_integer = Some({p}integer);", + p = self.prefix + ); + rust!(self.out, "continue '{p}find_state;", p = self.prefix); + rust!(self.out, "}}"); // end Some(_) arm + rust!(self.out, "}}"); // end match + rust!(self.out, "}}"); // end 'eof loop + + // The `next_token` function will break here (out of the + // `'eof` loop) when we encounter EOF (i.e., there is no + // `next_token`). Just set `opt_lookahead` to `None` in that + // case. + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Encountered EOF during error recovery\");" + ); + } + rust!(self.out, "*{p}opt_lookahead = None;", p = self.prefix); + rust!(self.out, "*{p}opt_integer = None;", p = self.prefix); + rust!(self.out, "}};"); // end 'find_state loop + + // If we get here, we are ready to push the error recovery state. + + // We have to compute the span for the error recovery + // token. We do this first, before we pop any symbols off the + // stack. There are several possibilities, in order of + // preference. + // + // For the **start** of the message, we prefer to use the start of any + // popped states. This represents parts of the input we had consumed but + // had to roll back and ignore. + // + // Example: + // + // a + (b + /) + // ^ start point is here, since this `+` will be popped off + // + // If there are no popped states, but there *are* dropped tokens, we can use + // the start of those. + // + // Example: + // + // a + (b + c e) + // ^ start point would be here + // + // Finally, if there are no popped states *nor* dropped tokens, we can use + // the end of the top-most state. + + rust!(self.out, "let {p}top = {p}top0;", p = self.prefix); + rust!( + self.out, + "let {p}start = if let Some({p}popped_sym) = {p}symbols.get({p}top) {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from popped symbol {{:?}}\", \ + (&{p}popped_sym.0 .. &{p}popped_sym.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}popped_sym.0.clone()", p = self.prefix); + rust!( + self.out, + "}} else if let Some({p}dropped_token) = {p}dropped_tokens.first() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from dropped token {{:?}}\", \ + (&{p}dropped_token.0 .. &{p}dropped_token.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}dropped_token.0.clone()", p = self.prefix); + rust!(self.out, "}} else if {p}top > 0 {{", p = self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from end of last retained symbol\");" + ); + } + rust!( + self.out, + "{p}symbols[{p}top - 1].2.clone()", + p = self.prefix + ); + rust!(self.out, "}} else {{"); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span starts from default\");"); + } + rust!(self.out, "Default::default()"); + rust!(self.out, "}};"); // end if + + // For the end span, here are the possibilities: + // + // We prefer to use the end of the last dropped token. + // + // Examples: + // + // a + (b + /) + // --- + // a + (b c) + // - + // + // But, if there are no dropped tokens, we will use the end of the popped states, + // if any: + // + // a + / + // - + // + // If there are neither dropped tokens *or* popped states, + // then the user is simulating insertion of an operator. In + // this case, we prefer the start of the lookahead, but + // fallback to the start if we are at EOF. + // + // Examples: + // + // a + (b c) + // - + rust!( + self.out, + "let {p}end = if let Some({p}dropped_token) = {p}dropped_tokens.last() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span ends at end of last dropped token {{:?}}\", \ + (&{p}dropped_token.0 .. &{p}dropped_token.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}dropped_token.2.clone()", p = self.prefix); + rust!( + self.out, + "}} else if {p}states_len - 1 > {p}top {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span ends at end of last popped symbol {{:?}}\", \ + {p}symbols.last().unwrap().2);", + p = self.prefix, + ); + } + rust!( + self.out, + "{p}symbols.last().unwrap().2.clone()", + p = self.prefix + ); + rust!( + self.out, + "}} else if let Some({p}lookahead) = {p}opt_lookahead.as_ref() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span ends at start of lookahead\");"); + } + rust!(self.out, "{p}lookahead.0.clone()", p = self.prefix); + rust!(self.out, "}} else {{"); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span ends at start\");"); + } + rust!(self.out, "{p}start.clone()", p = self.prefix); + rust!(self.out, "}};"); // end if + + // First we have to pop off the states we are skipping. Note + // that the bottom-most state doesn't have a symbol, so the + // symbols vector is always 1 shorter, hence we truncate its + // length to `{p}top` not `{p}top + 1`. + rust!(self.out, "{p}states.truncate({p}top + 1);", p = self.prefix); + rust!(self.out, "{p}symbols.truncate({p}top);", p = self.prefix); + + // Now load the new top state. + rust!( + self.out, + "let {p}recover_state = {p}states[{p}top] as usize;", + p = self.prefix + ); + + // Load the error action, which must be a shift. + rust!( + self.out, + "let {p}error_action = {p}ACTION[{p}recover_state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + rust!( + self.out, + "let {p}error_state = {p}error_action - 1;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!(self.out, "println!(\"Recovering from error:\");"); + rust!( + self.out, + "println!(\" - recovery base state: {{}}\", {p}top);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new top state {{}}\", {p}recover_state);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - error state {{}}\", {p}error_state);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new stack length: {{}}\", {p}states.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new symbol length: {{}}\", {p}symbols.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - span {{:?}}..{{:?}}\", {p}start, {p}end);", + p = self.prefix + ); + } + + // Push the error state onto the stack. + rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); + rust!( + self.out, + "let {p}recovery = {}lalrpop_util::ErrorRecovery {{", + p = self.prefix + ); + rust!(self.out, "error: {p}error,", p = self.prefix); + rust!( + self.out, + "dropped_tokens: {p}dropped_tokens,", + p = self.prefix + ); + rust!(self.out, "}};"); + + let error_variant = self.variant_name_for_symbol(&Symbol::Terminal(TerminalString::Error)); + rust!( + self.out, + "{p}symbols.push(({p}start, {p}Symbol::{e}({p}recovery), {p}end));", + p = self.prefix, + e = error_variant + ); + + rust!(self.out, "Ok(None)"); + rust!(self.out, "}}"); // end fn + Ok(()) + } + + /// The `accepts` function + /// + /// ```ignore + /// fn __accepts() { + /// error_state: i32, + /// states: &Vec, + /// opt_integer: Option, + /// ) -> bool { + /// ... + /// } + /// ``` + /// + /// has the job of figuring out whether the given error state would + /// "accept" the given lookahead. We basically trace through the LR + /// automaton looking for one of two outcomes: + /// + /// - the lookahead is eventually shifted + /// - we reduce to the end state successfully (in the case of EOF). + /// + /// If we used the pure LR(1) algorithm, we wouldn't need this + /// function, because we would be guaranteed to error immediately + /// (and not after some number of reductions). But with an LALR + /// (or Lane Table) generated automaton, it is possible to reduce + /// some number of times before encountering an error. Failing to + /// take this into account can lead error recovery into an + /// infinite loop (see the `error_recovery_lalr_loop` test) or + /// produce crappy results (see `error_recovery_lock_in`). + fn write_accepts_fn(&mut self) -> io::Result<()> { + if !self.grammar.uses_error_recovery { + return Ok(()); + } + + let actions_per_state = self.grammar.terminals.all.len(); + let parameters = vec![ + format!( + "{p}error_state: {typ}", + p = self.prefix, + typ = self.custom.state_type + ), + format!( + "{p}states: & [{typ}]", + p = self.prefix, + typ = self.custom.state_type + ), + format!("{p}opt_integer: Option", p = self.prefix), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{}accepts", self.prefix), + vec![], + None, + parameters, + format!("bool"), + vec![] + )); + rust!(self.out, "{{"); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Testing whether state {{}} accepts token {{:?}}\", \ + {p}error_state, {p}opt_integer);", + p = self.prefix + ); + } + + // Create our own copy of the state stack to play with. + rust!( + self.out, + "let mut {p}states = {p}states.to_vec();", + p = self.prefix + ); + rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); + + rust!(self.out, "loop {{",); + + rust!( + self.out, + "let mut {}states_len = {}states.len();", + self.prefix, + self.prefix + ); + + rust!( + self.out, + "let {p}top = {p}states[{p}states_len - 1] as usize;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"accepts: top-state={{}} num-states={{}}\", {p}top, {p}states_len);", + p = self.prefix + ); + } + + rust!( + self.out, + "let {p}action = match {p}opt_integer {{", + p = self.prefix + ); + rust!( + self.out, + "None => {p}EOF_ACTION[{p}top as usize],", + p = self.prefix + ); + rust!( + self.out, + "Some({p}integer) => {p}ACTION[{p}top * {actions_per_state} + {p}integer],", + p = self.prefix, + actions_per_state = actions_per_state, + ); + rust!(self.out, "}};"); // end `match` + + // If we encounter an error action, we do **not** accept. + rust!( + self.out, + "if {p}action == 0 {{ return false; }}", + p = self.prefix + ); + + // If we encounter a shift action, we DO accept. + rust!( + self.out, + "if {p}action > 0 {{ return true; }}", + p = self.prefix + ); + + // If we encounter a reduce action, we need to simulate its + // effect on the state stack. + rust!( + self.out, + "let ({p}to_pop, {p}nt) = match -{p}action {{", + p = self.prefix + ); + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + if Tls::session().emit_comments { + rust!(self.out, "// simulate {:?}", production); + } + + // if we just reduced the start symbol, that is also an accept criteria + if production.nonterminal == self.start_symbol { + rust!(self.out, "{} => return true,", index); + } else { + let num_symbols = production.symbols.len(); + let nt = self.custom + .all_nonterminals + .iter() + .position(|x| *x == production.nonterminal) + .unwrap(); + rust!(self.out, "{} => {{", index); + if DEBUG_PRINT { + rust!( + self.out, + "println!(r##\"accepts: simulating {:?}\"##);", + production + ); + } + rust!( + self.out, + "({num_symbols}, {nt})", + num_symbols = num_symbols, + nt = nt + ); + rust!(self.out, "}}"); + } + } + rust!( + self.out, + "_ => panic!(\"invalid action code {{}}\", {}action)", + self.prefix + ); + rust!(self.out, "}};"); // end match + + rust!(self.out, "{p}states_len -= {p}to_pop;", p = self.prefix); + rust!( + self.out, + "{p}states.truncate({p}states_len);", + p = self.prefix + ); + rust!( + self.out, + "let {p}top = {p}states[{p}states_len - 1] as usize;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"accepts: popped {{}} symbols, new top is {{}}, nt is {{}}\", \ + {p}to_pop, \ + {p}top, \ + {p}nt, \ + );", + p = self.prefix + ); + } + + rust!( + self.out, + "let {p}next_state = {p}GOTO[{p}top * {num_non_terminals} + {p}nt] - 1;", + p = self.prefix, + num_non_terminals = self.grammar.nonterminals.len(), + ); + + rust!(self.out, "{p}states.push({p}next_state);", p = self.prefix); + + rust!(self.out, "}}"); // end loop + rust!(self.out, "}}"); // end fn + + Ok(()) + } + + fn symbol_type(&self) -> String { + format!( + "{}Symbol<{}>", + self.prefix, + Sep(", ", &self.custom.symbol_type_params) + ) + } + + fn spanned_symbol_type(&self) -> String { + let loc_type = self.types.terminal_loc_type(); + format!("({},{},{})", loc_type, self.symbol_type(), loc_type) + } + + fn let_unrecognized_token_error(&mut self, error_var: &str, token: &str) -> io::Result<()> { + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + rust!( + self.out, + "let {}{} = {}lalrpop_util::ParseError::UnrecognizedToken {{", + self.prefix, + error_var, + self.prefix + ); + rust!(self.out, "token: {},", token); + rust!( + self.out, + "expected: {}expected_tokens({}state),", + self.prefix, + self.prefix + ); + rust!(self.out, "}};"); + Ok(()) + } + + fn emit_expected_tokens_fn(&mut self) -> io::Result<()> { + rust!( + self.out, + "fn {}expected_tokens({}state: usize) -> Vec<::std::string::String> {{", + self.prefix, + self.prefix + ); + + rust!( + self.out, + "const {}TERMINAL: &'static [&'static str] = &[", + self.prefix + ); + let all_terminals = if self.grammar.uses_error_recovery { + // Subtract one to exlude the error terminal + &self.grammar.terminals.all[..self.grammar.terminals.all.len() - 1] + } else { + &self.grammar.terminals.all + }; + for terminal in all_terminals { + // Three # should hopefully be enough to prevent any + // reasonable terminal from escaping the literal + rust!(self.out, "r###\"{}\"###,", terminal); + } + rust!(self.out, "];"); + + // Grab any terminals in the current state which would have resulted in a successful parse + rust!( + self.out, + "{}ACTION[({}state * {})..].iter().zip({}TERMINAL).filter_map(|(&state, terminal)| {{", + self.prefix, + self.prefix, + self.grammar.terminals.all.len(), + self.prefix + ); + rust!(self.out, "if state == 0 {{"); + rust!(self.out, "None"); + rust!(self.out, "}} else {{"); + rust!(self.out, "Some(terminal.to_string())"); + rust!(self.out, "}}"); + rust!(self.out, "}}).collect()"); + rust!(self.out, "}}"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/codegen/test_all.rs b/third_party/rust/lalrpop/src/lr1/codegen/test_all.rs index a70140493b15..e7327098f8b7 100644 --- a/third_party/rust/lalrpop/src/lr1/codegen/test_all.rs +++ b/third_party/rust/lalrpop/src/lr1/codegen/test_all.rs @@ -1,148 +1,147 @@ -//! A compiler from an LR(1) table to a [recursive ascent] parser. -//! -//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser - -use grammar::repr::{Grammar, NonterminalString, TypeParameter}; -use lr1::core::*; -use rust::RustWrite; -use std::io::{self, Write}; -use util::Sep; - -use super::base::CodeGenerator; - -pub fn compile<'grammar, W: Write>( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &[LR1State<'grammar>], - out: &mut RustWrite, -) -> io::Result<()> { - let mut ascent = - CodeGenerator::new_test_all(grammar, user_start_symbol, start_symbol, states, out); - ascent.write() -} - -struct TestAll; - -impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TestAll> { - fn new_test_all( - grammar: &'grammar Grammar, - user_start_symbol: NonterminalString, - start_symbol: NonterminalString, - states: &'ascent [LR1State<'grammar>], - out: &'ascent mut RustWrite, - ) -> Self { - CodeGenerator::new( - grammar, - user_start_symbol, - start_symbol, - states, - out, - true, - "super", - TestAll, - ) - } - - fn write(&mut self) -> io::Result<()> { - self.write_parse_mod(|this| { - try!(this.write_parser_fn()); - - rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); - rust!(this.out, "mod {}ascent {{", this.prefix); - try!(super::ascent::compile( - this.grammar, - this.user_start_symbol.clone(), - this.start_symbol.clone(), - this.states, - "super::super::super", - this.out - )); - let pub_use = format!( - "{}use self::{}parse{}::{}Parser;", - this.grammar.nonterminals[&this.user_start_symbol].visibility, - this.prefix, - this.start_symbol, - this.user_start_symbol - ); - rust!(this.out, "{}", pub_use); - rust!(this.out, "}}"); - - rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); - rust!(this.out, "mod {}parse_table {{", this.prefix); - try!(super::parse_table::compile( - this.grammar, - this.user_start_symbol.clone(), - this.start_symbol.clone(), - this.states, - "super::super::super", - this.out - )); - rust!(this.out, "{}", pub_use); - rust!(this.out, "}}"); - - Ok(()) - }) - } - - fn write_parser_fn(&mut self) -> io::Result<()> { - try!(self.start_parser_fn()); - - if self.grammar.intern_token.is_some() { - rust!(self.out, "let _ = self.builder;"); - } - // parse input using both methods: - try!(self.call_delegate("ascent")); - try!(self.call_delegate("parse_table")); - - // check that result is the same either way: - rust!( - self.out, - "assert_eq!({}ascent, {}parse_table);", - self.prefix, - self.prefix - ); - - rust!(self.out, "return {}ascent;", self.prefix); - - try!(self.end_parser_fn()); - - Ok(()) - } - - fn call_delegate(&mut self, delegate: &str) -> io::Result<()> { - let non_lifetimes: Vec<_> = self - .grammar - .type_parameters - .iter() - .filter(|&tp| match *tp { - TypeParameter::Lifetime(_) => false, - TypeParameter::Id(_) => true, - }) - .cloned() - .collect(); - let parameters = if non_lifetimes.is_empty() { - String::new() - } else { - format!("::<{}>", Sep(", ", &non_lifetimes)) - }; - rust!( - self.out, - "let {}{} = {}{}::{}Parser::new().parse{}(", - self.prefix, - delegate, - self.prefix, - delegate, - self.user_start_symbol, - parameters - ); - for parameter in &self.grammar.parameters { - rust!(self.out, "{},", parameter.name); - } - if self.grammar.intern_token.is_none() { - rust!(self.out, "{}tokens0.clone(),", self.prefix); - } - rust!(self.out, ");"); - Ok(()) - } -} +//! A compiler from an LR(1) table to a [recursive ascent] parser. +//! +//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser + +use grammar::repr::{Grammar, NonterminalString, TypeParameter}; +use lr1::core::*; +use rust::RustWrite; +use std::io::{self, Write}; +use util::Sep; + +use super::base::CodeGenerator; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + out: &mut RustWrite, +) -> io::Result<()> { + let mut ascent = + CodeGenerator::new_test_all(grammar, user_start_symbol, start_symbol, states, out); + ascent.write() +} + +struct TestAll; + +impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TestAll> { + fn new_test_all( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'ascent [LR1State<'grammar>], + out: &'ascent mut RustWrite, + ) -> Self { + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + true, + "super", + TestAll, + ) + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_parser_fn()); + + rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(this.out, "mod {}ascent {{", this.prefix); + try!(super::ascent::compile( + this.grammar, + this.user_start_symbol.clone(), + this.start_symbol.clone(), + this.states, + "super::super::super", + this.out + )); + let pub_use = format!( + "{}use self::{}parse{}::{}Parser;", + this.grammar.nonterminals[&this.user_start_symbol].visibility, + this.prefix, + this.start_symbol, + this.user_start_symbol + ); + rust!(this.out, "{}", pub_use); + rust!(this.out, "}}"); + + rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(this.out, "mod {}parse_table {{", this.prefix); + try!(super::parse_table::compile( + this.grammar, + this.user_start_symbol.clone(), + this.start_symbol.clone(), + this.states, + "super::super::super", + this.out + )); + rust!(this.out, "{}", pub_use); + rust!(this.out, "}}"); + + Ok(()) + }) + } + + fn write_parser_fn(&mut self) -> io::Result<()> { + try!(self.start_parser_fn()); + + if self.grammar.intern_token.is_some() { + rust!(self.out, "let _ = self.builder;"); + } + // parse input using both methods: + try!(self.call_delegate("ascent")); + try!(self.call_delegate("parse_table")); + + // check that result is the same either way: + rust!( + self.out, + "assert_eq!({}ascent, {}parse_table);", + self.prefix, + self.prefix + ); + + rust!(self.out, "return {}ascent;", self.prefix); + + try!(self.end_parser_fn()); + + Ok(()) + } + + fn call_delegate(&mut self, delegate: &str) -> io::Result<()> { + let non_lifetimes: Vec<_> = self.grammar + .type_parameters + .iter() + .filter(|&tp| match *tp { + TypeParameter::Lifetime(_) => false, + TypeParameter::Id(_) => true, + }) + .cloned() + .collect(); + let parameters = if non_lifetimes.is_empty() { + String::new() + } else { + format!("::<{}>", Sep(", ", &non_lifetimes)) + }; + rust!( + self.out, + "let {}{} = {}{}::{}Parser::new().parse{}(", + self.prefix, + delegate, + self.prefix, + delegate, + self.user_start_symbol, + parameters + ); + for parameter in &self.grammar.parameters { + rust!(self.out, "{},", parameter.name); + } + if self.grammar.intern_token.is_none() { + rust!(self.out, "{}tokens0.clone(),", self.prefix); + } + rust!(self.out, ");"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/core/mod.rs b/third_party/rust/lalrpop/src/lr1/core/mod.rs index a3adf713f270..e746ae427169 100644 --- a/third_party/rust/lalrpop/src/lr1/core/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/core/mod.rs @@ -1,336 +1,333 @@ -//! Core LR(1) types. - -use collections::Map; -use grammar::repr::*; -use itertools::Itertools; -use std::fmt::{Debug, Display, Error, Formatter}; -use std::rc::Rc; -use util::Prefix; - -use super::lookahead::*; - -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Item<'grammar, L: Lookahead> { - pub production: &'grammar Production, - /// the dot comes before `index`, so `index` would be 1 for X = A (*) B C - pub index: usize, - pub lookahead: L, -} - -pub type LR0Item<'grammar> = Item<'grammar, Nil>; - -pub type LR1Item<'grammar> = Item<'grammar, TokenSet>; - -impl<'grammar> Item<'grammar, Nil> { - pub fn lr0(production: &'grammar Production, index: usize) -> Self { - Item { - production: production, - index: index, - lookahead: Nil, - } - } -} - -impl<'grammar, L: Lookahead> Item<'grammar, L> { - pub fn with_lookahead(&self, l: L1) -> Item<'grammar, L1> { - Item { - production: self.production, - index: self.index, - lookahead: l, - } - } - - pub fn prefix(&self) -> &'grammar [Symbol] { - &self.production.symbols[..self.index] - } - - pub fn symbol_sets(&self) -> SymbolSets<'grammar> { - let symbols = &self.production.symbols; - if self.can_shift() { - SymbolSets { - prefix: &symbols[..self.index], - cursor: Some(&symbols[self.index]), - suffix: &symbols[self.index + 1..], - } - } else { - SymbolSets { - prefix: &symbols[..self.index], - cursor: None, - suffix: &[], - } - } - } - - pub fn to_lr0(&self) -> LR0Item<'grammar> { - Item { - production: self.production, - index: self.index, - lookahead: Nil, - } - } - - pub fn can_shift(&self) -> bool { - self.index < self.production.symbols.len() - } - - pub fn can_shift_nonterminal(&self, nt: &NonterminalString) -> bool { - match self.shift_symbol() { - Some((Symbol::Nonterminal(shifted), _)) => shifted == *nt, - _ => false, - } - } - - pub fn can_shift_terminal(&self, term: &TerminalString) -> bool { - match self.shift_symbol() { - Some((Symbol::Terminal(shifted), _)) => shifted == *term, - _ => false, - } - } - - pub fn can_reduce(&self) -> bool { - self.index == self.production.symbols.len() - } - - pub fn shifted_item(&self) -> Option<(Symbol, Item<'grammar, L>)> { - if self.can_shift() { - Some(( - self.production.symbols[self.index].clone(), - Item { - production: self.production, - index: self.index + 1, - lookahead: self.lookahead.clone(), - }, - )) - } else { - None - } - } - - pub fn shift_symbol(&self) -> Option<(Symbol, &[Symbol])> { - if self.can_shift() { - Some(( - self.production.symbols[self.index].clone(), - &self.production.symbols[self.index + 1..], - )) - } else { - None - } - } -} - -#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct StateIndex(pub usize); - -#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Items<'grammar, L: Lookahead> { - pub vec: Rc>>, -} - -#[allow(dead_code)] -pub type LR0Items<'grammar> = Items<'grammar, Nil>; -#[allow(dead_code)] -pub type LR1Items<'grammar> = Items<'grammar, TokenSet>; - -#[derive(Clone, Debug)] -pub struct State<'grammar, L: Lookahead> { - pub index: StateIndex, - pub items: Items<'grammar, L>, - pub shifts: Map, - pub reductions: Vec<(L, &'grammar Production)>, - pub gotos: Map, -} - -pub type LR0State<'grammar> = State<'grammar, Nil>; -pub type LR1State<'grammar> = State<'grammar, TokenSet>; - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum Action<'grammar> { - Shift(TerminalString, StateIndex), - Reduce(&'grammar Production), -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Conflict<'grammar, L> { - // when in this state... - pub state: StateIndex, - - // with the following lookahead... - pub lookahead: L, - - // we can reduce... - pub production: &'grammar Production, - - // but we can also... - pub action: Action<'grammar>, -} - -#[allow(dead_code)] -pub type LR0Conflict<'grammar> = Conflict<'grammar, Nil>; -pub type LR1Conflict<'grammar> = Conflict<'grammar, TokenSet>; - -#[derive(Debug)] -pub struct TableConstructionError<'grammar, L: Lookahead> { - // LR(1) state set, possibly incomplete if construction is - // configured to terminate early. - pub states: Vec>, - - // Conflicts (non-empty) found in those states. - pub conflicts: Vec>, -} - -pub type LR0TableConstructionError<'grammar> = TableConstructionError<'grammar, Nil>; -pub type LR1TableConstructionError<'grammar> = TableConstructionError<'grammar, TokenSet>; -pub type LRResult<'grammar, L> = - Result>, TableConstructionError<'grammar, L>>; -pub type LR1Result<'grammar> = LRResult<'grammar, TokenSet>; - -impl<'grammar, L: Lookahead> Debug for Item<'grammar, L> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - try!(write!( - fmt, - "{} ={} (*){}", - self.production.nonterminal, - Prefix(" ", &self.production.symbols[..self.index]), - Prefix(" ", &self.production.symbols[self.index..]) - )); - - self.lookahead.fmt_as_item_suffix(fmt) - } -} - -impl Display for Token { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - Token::EOF => write!(fmt, "EOF"), - Token::Error => write!(fmt, "Error"), - Token::Terminal(ref s) => write!(fmt, "{}", s), - } - } -} - -impl Debug for Token { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self) - } -} - -impl Debug for StateIndex { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "S{}", self.0) - } -} - -impl Display for StateIndex { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self.0) - } -} - -impl<'grammar, L: Lookahead> State<'grammar, L> { - /// Returns the set of symbols which must appear on the stack to - /// be in this state. This is the *maximum* prefix of any item, - /// basically. - pub fn max_prefix(&self) -> &'grammar [Symbol] { - // Each state fn takes as argument the longest prefix of any - // item. Note that all items must have compatible prefixes. - let prefix = self - .items - .vec - .iter() - .map(|item| item.prefix()) - .max_by_key(|symbols| symbols.len()) - .unwrap(); - - debug_assert!( - self.items - .vec - .iter() - .all(|item| prefix.ends_with(&item.production.symbols[..item.index])) - ); - - prefix - } - - /// Returns the set of symbols from the stack that must be popped - /// for this state to return. If we have a state like: - /// - /// ``` - /// X = A B C (*) C - /// Y = B C (*) C - /// C = (*) ... - /// ``` - /// - /// This would return `[B, C]`. For every state other than the - /// start state, this will return a list of length at least 1. - /// For the start state, returns `[]`. - pub fn will_pop(&self) -> &'grammar [Symbol] { - let prefix = self - .items - .vec - .iter() - .filter(|item| item.index > 0) - .map(|item| item.prefix()) - .min_by_key(|symbols| symbols.len()) - .unwrap_or(&[]); - - debug_assert!( - self.items - .vec - .iter() - .filter(|item| item.index > 0) - .all(|item| item.prefix().ends_with(prefix)) - ); - - prefix - } - - pub fn will_push(&self) -> &[Symbol] { - self.items - .vec - .iter() - .filter(|item| item.index > 0) - .map(|item| &item.production.symbols[item.index..]) - .min_by_key(|symbols| symbols.len()) - .unwrap_or(&[]) - } - - /// Returns the type of nonterminal that this state will produce; - /// if `None` is returned, then this state may produce more than - /// one kind of nonterminal. - /// - /// FIXME -- currently, the start state returns `None` instead of - /// the goal symbol. - pub fn will_produce(&self) -> Option { - let mut returnable_nonterminals: Vec<_> = self - .items - .vec - .iter() - .filter(|item| item.index > 0) - .map(|item| item.production.nonterminal.clone()) - .dedup() - .collect(); - if returnable_nonterminals.len() == 1 { - returnable_nonterminals.pop() - } else { - None - } - } -} - -/// `A = B C (*) D E F` or `A = B C (*)` -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub struct SymbolSets<'grammar> { - pub prefix: &'grammar [Symbol], // both cases, [B, C] - pub cursor: Option<&'grammar Symbol>, // first [D], second [] - pub suffix: &'grammar [Symbol], // first [E, F], second [] -} - -impl<'grammar> SymbolSets<'grammar> { - pub fn new() -> Self { - SymbolSets { - prefix: &[], - cursor: None, - suffix: &[], - } - } -} +//! Core LR(1) types. + +use collections::Map; +use grammar::repr::*; +use itertools::Itertools; +use std::fmt::{Debug, Display, Error, Formatter}; +use std::rc::Rc; +use util::Prefix; + +use super::lookahead::*; + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Item<'grammar, L: Lookahead> { + pub production: &'grammar Production, + /// the dot comes before `index`, so `index` would be 1 for X = A (*) B C + pub index: usize, + pub lookahead: L, +} + +pub type LR0Item<'grammar> = Item<'grammar, Nil>; + +pub type LR1Item<'grammar> = Item<'grammar, TokenSet>; + +impl<'grammar> Item<'grammar, Nil> { + pub fn lr0(production: &'grammar Production, index: usize) -> Self { + Item { + production: production, + index: index, + lookahead: Nil, + } + } +} + +impl<'grammar, L: Lookahead> Item<'grammar, L> { + pub fn with_lookahead(&self, l: L1) -> Item<'grammar, L1> { + Item { + production: self.production, + index: self.index, + lookahead: l, + } + } + + pub fn prefix(&self) -> &'grammar [Symbol] { + &self.production.symbols[..self.index] + } + + pub fn symbol_sets(&self) -> SymbolSets<'grammar> { + let symbols = &self.production.symbols; + if self.can_shift() { + SymbolSets { + prefix: &symbols[..self.index], + cursor: Some(&symbols[self.index]), + suffix: &symbols[self.index + 1..], + } + } else { + SymbolSets { + prefix: &symbols[..self.index], + cursor: None, + suffix: &[], + } + } + } + + pub fn to_lr0(&self) -> LR0Item<'grammar> { + Item { + production: self.production, + index: self.index, + lookahead: Nil, + } + } + + pub fn can_shift(&self) -> bool { + self.index < self.production.symbols.len() + } + + pub fn can_shift_nonterminal(&self, nt: &NonterminalString) -> bool { + match self.shift_symbol() { + Some((Symbol::Nonterminal(shifted), _)) => shifted == *nt, + _ => false, + } + } + + pub fn can_shift_terminal(&self, term: &TerminalString) -> bool { + match self.shift_symbol() { + Some((Symbol::Terminal(shifted), _)) => shifted == *term, + _ => false, + } + } + + pub fn can_reduce(&self) -> bool { + self.index == self.production.symbols.len() + } + + pub fn shifted_item(&self) -> Option<(Symbol, Item<'grammar, L>)> { + if self.can_shift() { + Some(( + self.production.symbols[self.index].clone(), + Item { + production: self.production, + index: self.index + 1, + lookahead: self.lookahead.clone(), + }, + )) + } else { + None + } + } + + pub fn shift_symbol(&self) -> Option<(Symbol, &[Symbol])> { + if self.can_shift() { + Some(( + self.production.symbols[self.index].clone(), + &self.production.symbols[self.index + 1..], + )) + } else { + None + } + } +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct StateIndex(pub usize); + +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Items<'grammar, L: Lookahead> { + pub vec: Rc>>, +} + +#[allow(dead_code)] +pub type LR0Items<'grammar> = Items<'grammar, Nil>; +#[allow(dead_code)] +pub type LR1Items<'grammar> = Items<'grammar, TokenSet>; + +#[derive(Clone, Debug)] +pub struct State<'grammar, L: Lookahead> { + pub index: StateIndex, + pub items: Items<'grammar, L>, + pub shifts: Map, + pub reductions: Vec<(L, &'grammar Production)>, + pub gotos: Map, +} + +pub type LR0State<'grammar> = State<'grammar, Nil>; +pub type LR1State<'grammar> = State<'grammar, TokenSet>; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum Action<'grammar> { + Shift(TerminalString, StateIndex), + Reduce(&'grammar Production), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Conflict<'grammar, L> { + // when in this state... + pub state: StateIndex, + + // with the following lookahead... + pub lookahead: L, + + // we can reduce... + pub production: &'grammar Production, + + // but we can also... + pub action: Action<'grammar>, +} + +#[allow(dead_code)] +pub type LR0Conflict<'grammar> = Conflict<'grammar, Nil>; +pub type LR1Conflict<'grammar> = Conflict<'grammar, TokenSet>; + +#[derive(Debug)] +pub struct TableConstructionError<'grammar, L: Lookahead> { + // LR(1) state set, possibly incomplete if construction is + // configured to terminate early. + pub states: Vec>, + + // Conflicts (non-empty) found in those states. + pub conflicts: Vec>, +} + +pub type LR0TableConstructionError<'grammar> = TableConstructionError<'grammar, Nil>; +pub type LR1TableConstructionError<'grammar> = TableConstructionError<'grammar, TokenSet>; +pub type LRResult<'grammar, L> = + Result>, TableConstructionError<'grammar, L>>; +pub type LR1Result<'grammar> = LRResult<'grammar, TokenSet>; + +impl<'grammar, L: Lookahead> Debug for Item<'grammar, L> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + try!(write!( + fmt, + "{} ={} (*){}", + self.production.nonterminal, + Prefix(" ", &self.production.symbols[..self.index]), + Prefix(" ", &self.production.symbols[self.index..]) + )); + + self.lookahead.fmt_as_item_suffix(fmt) + } +} + +impl Display for Token { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Token::EOF => write!(fmt, "EOF"), + Token::Error => write!(fmt, "Error"), + Token::Terminal(ref s) => write!(fmt, "{}", s), + } + } +} + +impl Debug for Token { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self) + } +} + +impl Debug for StateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "S{}", self.0) + } +} + +impl Display for StateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +impl<'grammar, L: Lookahead> State<'grammar, L> { + /// Returns the set of symbols which must appear on the stack to + /// be in this state. This is the *maximum* prefix of any item, + /// basically. + pub fn max_prefix(&self) -> &'grammar [Symbol] { + // Each state fn takes as argument the longest prefix of any + // item. Note that all items must have compatible prefixes. + let prefix = self.items + .vec + .iter() + .map(|item| item.prefix()) + .max_by_key(|symbols| symbols.len()) + .unwrap(); + + debug_assert!( + self.items + .vec + .iter() + .all(|item| prefix.ends_with(&item.production.symbols[..item.index])) + ); + + prefix + } + + /// Returns the set of symbols from the stack that must be popped + /// for this state to return. If we have a state like: + /// + /// ``` + /// X = A B C (*) C + /// Y = B C (*) C + /// C = (*) ... + /// ``` + /// + /// This would return `[B, C]`. For every state other than the + /// start state, this will return a list of length at least 1. + /// For the start state, returns `[]`. + pub fn will_pop(&self) -> &'grammar [Symbol] { + let prefix = self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| item.prefix()) + .min_by_key(|symbols| symbols.len()) + .unwrap_or(&[]); + + debug_assert!( + self.items + .vec + .iter() + .filter(|item| item.index > 0) + .all(|item| item.prefix().ends_with(prefix)) + ); + + prefix + } + + pub fn will_push(&self) -> &[Symbol] { + self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| &item.production.symbols[item.index..]) + .min_by_key(|symbols| symbols.len()) + .unwrap_or(&[]) + } + + /// Returns the type of nonterminal that this state will produce; + /// if `None` is returned, then this state may produce more than + /// one kind of nonterminal. + /// + /// FIXME -- currently, the start state returns `None` instead of + /// the goal symbol. + pub fn will_produce(&self) -> Option { + let mut returnable_nonterminals: Vec<_> = self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| item.production.nonterminal.clone()) + .dedup() + .collect(); + if returnable_nonterminals.len() == 1 { + returnable_nonterminals.pop() + } else { + None + } + } +} + +/// `A = B C (*) D E F` or `A = B C (*)` +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct SymbolSets<'grammar> { + pub prefix: &'grammar [Symbol], // both cases, [B, C] + pub cursor: Option<&'grammar Symbol>, // first [D], second [] + pub suffix: &'grammar [Symbol], // first [E, F], second [] +} + +impl<'grammar> SymbolSets<'grammar> { + pub fn new() -> Self { + SymbolSets { + prefix: &[], + cursor: None, + suffix: &[], + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/error/mod.rs b/third_party/rust/lalrpop/src/lr1/error/mod.rs index fcfcc68b19e3..b397ed139f59 100644 --- a/third_party/rust/lalrpop/src/lr1/error/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/error/mod.rs @@ -1,841 +1,839 @@ -//! Error reporting. For now very stupid and simplistic. - -use collections::{set, Set}; -use grammar::repr::*; -use itertools::Itertools; -use lr1::core::*; -use lr1::example::{Example, ExampleStyles, ExampleSymbol}; -use lr1::first::FirstSets; -use lr1::lookahead::{Token, TokenSet}; -use lr1::trace::Tracer; -use message::builder::{BodyCharacter, Builder, Character, MessageBuilder}; -use message::Message; -use tls::Tls; - -#[cfg(test)] -mod test; - -pub fn report_error(grammar: &Grammar, error: &LR1TableConstructionError) -> Vec { - let mut cx = ErrorReportingCx::new(grammar, &error.states, &error.conflicts); - cx.report_errors() -} - -struct ErrorReportingCx<'cx, 'grammar: 'cx> { - grammar: &'grammar Grammar, - first_sets: FirstSets, - states: &'cx [LR1State<'grammar>], - conflicts: &'cx [LR1Conflict<'grammar>], -} - -#[derive(Debug)] -enum ConflictClassification { - /// The grammar is ambiguous. This means we have two examples of - /// precisely the same set of symbols which can be reduced in two - /// distinct ways. - Ambiguity { action: Example, reduce: Example }, - - /// The grammar is ambiguous, and moreover it looks like a - /// precedence error. This means that the reduction is to a - /// nonterminal `T` and the shift is some symbol sandwiched - /// between two instances of `T`. - Precedence { - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - }, - - /// Suggest inlining `nonterminal`. Makes sense if there are two - /// levels in the reduction tree in both examples, and the suffix - /// after the inner reduction is the same in all cases. - SuggestInline { - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - }, - - /// Like the previous, but suggest replacing `nonterminal` with - /// `symbol?`. Makes sense if the thing to be inlined consists of - /// two alternatives, `X = symbol | ()`. - SuggestQuestion { - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - symbol: Symbol, - }, - - /// Can't say much beyond that a conflict occurred. - InsufficientLookahead { action: Example, reduce: Example }, - - /// Really can't say *ANYTHING*. - Naive, -} - -type TokenConflict<'grammar> = Conflict<'grammar, Token>; - -impl<'cx, 'grammar> ErrorReportingCx<'cx, 'grammar> { - fn new( - grammar: &'grammar Grammar, - states: &'cx [LR1State<'grammar>], - conflicts: &'cx [LR1Conflict<'grammar>], - ) -> Self { - ErrorReportingCx { - grammar: grammar, - first_sets: FirstSets::new(grammar), - states: states, - conflicts: conflicts, - } - } - - fn report_errors(&mut self) -> Vec { - token_conflicts(self.conflicts) - .iter() - .map(|conflict| self.report_error(conflict)) - .collect() - } - - fn report_error(&mut self, conflict: &TokenConflict<'grammar>) -> Message { - match self.classify(conflict) { - ConflictClassification::Ambiguity { action, reduce } => { - self.report_error_ambiguity(conflict, action, reduce) - } - ConflictClassification::Precedence { - shift, - reduce, - nonterminal, - } => self.report_error_precedence(conflict, shift, reduce, nonterminal), - ConflictClassification::SuggestInline { - shift, - reduce, - nonterminal, - } => self.report_error_suggest_inline(conflict, shift, reduce, nonterminal), - ConflictClassification::SuggestQuestion { - shift, - reduce, - nonterminal, - symbol, - } => self.report_error_suggest_question(conflict, shift, reduce, nonterminal, symbol), - ConflictClassification::InsufficientLookahead { action, reduce } => { - self.report_error_insufficient_lookahead(conflict, action, reduce) - } - ConflictClassification::Naive => self.report_error_naive(conflict), - } - } - - fn report_error_ambiguity_core( - &self, - conflict: &TokenConflict<'grammar>, - shift: Example, - reduce: Example, - ) -> Builder { - let styles = ExampleStyles::ambig(); - MessageBuilder::new(conflict.production.span) - .heading() - .text("Ambiguous grammar detected") - .end() - .body() - .begin_lines() - .wrap_text("The following symbols can be reduced in two ways:") - .push(reduce.to_symbol_list(reduce.symbols.len(), styles)) - .end() - .begin_lines() - .wrap_text("They could be reduced like so:") - .push(reduce.into_picture(styles)) - .end() - .begin_lines() - .wrap_text("Alternatively, they could be reduced like so:") - .push(shift.into_picture(styles)) - .end() - } - - fn report_error_ambiguity( - &self, - conflict: &TokenConflict<'grammar>, - shift: Example, - reduce: Example, - ) -> Message { - self.report_error_ambiguity_core(conflict, shift, reduce) - .wrap_text( - "LALRPOP does not yet support ambiguous grammars. \ - See the LALRPOP manual for advice on \ - making your grammar unambiguous.", - ) - .end() - .end() - } - - fn report_error_precedence( - &self, - conflict: &TokenConflict<'grammar>, - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - ) -> Message { - self.report_error_ambiguity_core(conflict, shift, reduce) - .begin_wrap() - .text("Hint:") - .styled(Tls::session().hint_text) - .text("This looks like a precedence error related to") - .push(nonterminal) - .verbatimed() - .punctuated(".") - .text("See the LALRPOP manual for advice on encoding precedence.") - .end() - .end() - .end() - } - - fn report_error_not_lr1_core( - &self, - conflict: &TokenConflict<'grammar>, - action: Example, - reduce: Example, - ) -> Builder { - let styles = ExampleStyles::new(); - let builder = MessageBuilder::new(conflict.production.span) - .heading() - .text("Local ambiguity detected") - .end() - .body(); - - let builder = builder - .begin_lines() - .begin_wrap() - .text("The problem arises after having observed the following symbols") - .text("in the input:") - .end() - .push(if action.cursor >= reduce.cursor { - action.to_symbol_list(action.cursor, styles) - } else { - reduce.to_symbol_list(reduce.cursor, styles) - }) - .begin_wrap(); - - let builder = match conflict.lookahead { - Token::Terminal(ref term) => builder - .text("At that point, if the next token is a") - .push(term.clone()) - .verbatimed() - .styled(Tls::session().cursor_symbol) - .punctuated(","), - Token::Error => builder.text("If an error has been found,"), - Token::EOF => builder.text("If the end of the input is reached,"), - }; - - let builder = builder - .text("then the parser can proceed in two different ways.") - .end() - .end(); - - let builder = self.describe_reduce(builder, styles, conflict.production, reduce, "First"); - - match conflict.action { - Action::Shift(ref lookahead, _) => { - self.describe_shift(builder, styles, lookahead.clone(), action, "Alternatively") - } - Action::Reduce(production) => { - self.describe_reduce(builder, styles, production, action, "Alternatively") - } - } - } - - fn describe_shift( - &self, - builder: Builder, - styles: ExampleStyles, - lookahead: TerminalString, - example: Example, - intro_word: &str, - ) -> Builder { - // A shift example looks like: - // - // ...p1 ...p2 (*) L ...s2 ...s1 - // | | | | - // | +-NT1-----------+ | - // | | - // | ... | - // | | - // +-NT2-----------------------+ - - let nt1 = example.reductions[0].nonterminal.clone(); - - builder - .begin_lines() - .begin_wrap() - .text(intro_word) - .punctuated(",") - .text("the parser could shift the") - .push(lookahead) - .verbatimed() - .text("token and later use it to construct a") - .push(nt1) - .verbatimed() - .punctuated(".") - .text("This might then yield a parse tree like") - .end() - .push(example.into_picture(styles)) - .end() - } - - fn describe_reduce( - &self, - builder: Builder, - styles: ExampleStyles, - production: &Production, - example: Example, - intro_word: &str, - ) -> Builder { - builder - .begin_lines() - .begin_wrap() - .text(intro_word) - .punctuated(",") - .text("the parser could execute the production at") - .push(production.span) - .punctuated(",") - .text("which would consume the top") - .text(production.symbols.len()) - .text("token(s) from the stack") - .text("and produce a") - .push(production.nonterminal.clone()) - .verbatimed() - .punctuated(".") - .text("This might then yield a parse tree like") - .end() - .push(example.into_picture(styles)) - .end() - } - - fn report_error_suggest_inline( - &self, - conflict: &TokenConflict<'grammar>, - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - ) -> Message { - let builder = self.report_error_not_lr1_core(conflict, shift, reduce); - - builder - .begin_wrap() - .text("Hint:") - .styled(Tls::session().hint_text) - .text("It appears you could resolve this problem by adding") - .text("the annotation `#[inline]` to the definition of") - .push(nonterminal) - .verbatimed() - .punctuated(".") - .text("For more information, see the section on inlining") - .text("in the LALRPOP manual.") - .end() - .end() - .end() - } - - fn report_error_suggest_question( - &self, - conflict: &TokenConflict<'grammar>, - shift: Example, - reduce: Example, - nonterminal: NonterminalString, - symbol: Symbol, - ) -> Message { - let builder = self.report_error_not_lr1_core(conflict, shift, reduce); - - builder - .begin_wrap() - .text("Hint:") - .styled(Tls::session().hint_text) - .text("It appears you could resolve this problem by replacing") - .text("uses of") - .push(nonterminal.clone()) - .verbatimed() - .text("with") - .text(symbol) // intentionally disable coloring here, looks better - .adjacent_text("`", "?`") - .text( - "(or, alternatively, by adding the annotation `#[inline]` \ - to the definition of", - ) - .push(nonterminal) - .punctuated(").") - .text("For more information, see the section on inlining") - .text("in the LALROP manual.") - .end() - .end() - .end() - } - - fn report_error_insufficient_lookahead( - &self, - conflict: &TokenConflict<'grammar>, - action: Example, - reduce: Example, - ) -> Message { - // The reduce example will look something like: - // - // - // ...p1 ...p2 (*) L ...s2 ...s1 - // | | | | - // | +-NT1-----------+ | - // | | | | - // | +-...-----------+ | - // | | | | - // | +-NTn-----------+ | - // | | - // +-NTn+1---------------------+ - // - // To solve the conflict, essentially, the user needs to - // modify the grammar so that `NTn` does not appear with `L` - // in its follow-set. How to guide them in this? - - let builder = self.report_error_not_lr1_core(conflict, action, reduce); - - builder - .wrap_text( - "See the LALRPOP manual for advice on \ - making your grammar LR(1).", - ) - .end() - .end() - } - - /// Naive error reporting. This is a fallback path which (I think) - /// never actually executes. - fn report_error_naive(&self, conflict: &TokenConflict<'grammar>) -> Message { - let mut builder = MessageBuilder::new(conflict.production.span) - .heading() - .text("Conflict detected") - .end() - .body() - .begin_lines() - .wrap_text("when in this state:") - .indented(); - for item in self.states[conflict.state.0].items.vec.iter() { - builder = builder.text(format!("{:?}", item)); - } - let mut builder = builder - .end() - .begin_wrap() - .text(format!("and looking at a token `{:?}`", conflict.lookahead)) - .text("we can reduce to a") - .push(conflict.production.nonterminal.clone()) - .verbatimed(); - builder = match conflict.action { - Action::Shift(..) => builder.text("but we can also shift"), - Action::Reduce(prod) => builder - .text("but we can also reduce to a") - .text(prod.nonterminal.clone()) - .verbatimed(), - }; - builder.end().end().end() - } - - fn classify(&mut self, conflict: &TokenConflict<'grammar>) -> ConflictClassification { - // Find examples from the conflicting action (either a shift - // or a reduce). - let mut action_examples = match conflict.action { - Action::Shift(..) => self.shift_examples(conflict), - Action::Reduce(production) => { - self.reduce_examples(conflict.state, production, conflict.lookahead.clone()) - } - }; - - // Find examples from the conflicting reduce. - let mut reduce_examples = self.reduce_examples( - conflict.state, - conflict.production, - conflict.lookahead.clone(), - ); - - // Prefer shorter examples to longer ones. - action_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); - reduce_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); - - // This really shouldn't happen, but if we've failed to come - // up with examples, then report a "naive" error. - if action_examples.is_empty() || reduce_examples.is_empty() { - return ConflictClassification::Naive; - } - - if let Some(classification) = - self.try_classify_ambiguity(conflict, &action_examples, &reduce_examples) - { - return classification; - } - - if let Some(classification) = - self.try_classify_question(conflict, &action_examples, &reduce_examples) - { - return classification; - } - - if let Some(classification) = - self.try_classify_inline(conflict, &action_examples, &reduce_examples) - { - return classification; - } - - // Give up. Just grab an example from each and pair them up. - // If there aren't even two examples, something's pretty - // bogus, but we'll just call it naive. - action_examples - .into_iter() - .zip(reduce_examples) - .next() - .map( - |(action, reduce)| ConflictClassification::InsufficientLookahead { - action: action, - reduce: reduce, - }, - ) - .unwrap_or(ConflictClassification::Naive) - } - - fn try_classify_ambiguity( - &self, - conflict: &TokenConflict<'grammar>, - action_examples: &[Example], - reduce_examples: &[Example], - ) -> Option { - action_examples - .iter() - .cartesian_product(reduce_examples) - .filter(|&(action, reduce)| action.symbols == reduce.symbols) - .filter(|&(action, reduce)| action.cursor == reduce.cursor) - .map(|(action, reduce)| { - // Consider whether to call this a precedence - // error. We do this if we are stuck between reducing - // `T = T S T` and shifting `S`. - if let Action::Shift(ref term, _) = conflict.action { - let nt = &conflict.production.nonterminal; - if conflict.production.symbols.len() == 3 - && conflict.production.symbols[0] == Symbol::Nonterminal(nt.clone()) - && conflict.production.symbols[1] == Symbol::Terminal(term.clone()) - && conflict.production.symbols[2] == Symbol::Nonterminal(nt.clone()) - { - return ConflictClassification::Precedence { - shift: action.clone(), - reduce: reduce.clone(), - nonterminal: nt.clone(), - }; - } - } - ConflictClassification::Ambiguity { - action: action.clone(), - reduce: reduce.clone(), - } - }) - .next() - } - - fn try_classify_question( - &self, - conflict: &TokenConflict<'grammar>, - action_examples: &[Example], - reduce_examples: &[Example], - ) -> Option { - // If we get a shift/reduce conflict and the reduce - // is of a nonterminal like: - // - // T = { () | U } - // - // then suggest replacing T with U?. I'm being a bit lenient - // here since I do not KNOW that it will help, but it often - // does, and it's better style anyhow. - - if let Action::Reduce(_) = conflict.action { - return None; - } - - debug!( - "try_classify_question: action_examples={:?}", - action_examples - ); - debug!( - "try_classify_question: reduce_examples={:?}", - reduce_examples - ); - - let nt = &conflict.production.nonterminal; - let nt_productions = self.grammar.productions_for(nt); - if nt_productions.len() == 2 { - for &(i, j) in &[(0, 1), (1, 0)] { - if nt_productions[i].symbols.is_empty() && nt_productions[j].symbols.len() == 1 { - return Some(ConflictClassification::SuggestQuestion { - shift: action_examples[0].clone(), - reduce: reduce_examples[0].clone(), - nonterminal: nt.clone(), - symbol: nt_productions[j].symbols[0].clone(), - }); - } - } - } - - None - } - - fn try_classify_inline( - &self, - conflict: &TokenConflict<'grammar>, - action_examples: &[Example], - reduce_examples: &[Example], - ) -> Option { - // Inlining can help resolve a shift/reduce conflict because - // it defers the need to reduce. In particular, if we inlined - // all the reductions up until the last one, then we would be - // able to *shift* the lookahead instead of having to reduce. - // This can be helpful if we can see that shifting would let - // us delay reducing until the lookahead diverges. - - // Only applicable to shift/reduce: - if let Action::Reduce(_) = conflict.action { - return None; - } - - // FIXME: The logic here finds the first example where inline - // would help; but maybe we want to restrict it to cases - // where inlining would help *all* the examples...? - - action_examples - .iter() - .cartesian_product(reduce_examples) - .filter_map(|(shift, reduce)| { - if self.try_classify_inline_example(shift, reduce) { - let nt = &reduce.reductions[0].nonterminal; - Some(ConflictClassification::SuggestInline { - shift: shift.clone(), - reduce: reduce.clone(), - nonterminal: nt.clone(), - }) - } else { - None - } - }) - .next() - } - - fn try_classify_inline_example<'ex>(&self, shift: &Example, reduce: &Example) -> bool { - debug!("try_classify_inline_example({:?}, {:?})", shift, reduce); - - // In the case of shift, the example will look like - // - // ``` - // ... ... (*) L ...s1 ... - // | | | | - // | +-R0----------+ | - // | ... | - // +-Rn------------------+ - // ``` - // - // We want to extract the symbols ...s1: these are the - // things we are able to shift before being forced to - // make our next hard decision (to reduce R0 or not). - let shift_upcoming = &shift.symbols[shift.cursor + 1..shift.reductions[0].end]; - debug!( - "try_classify_inline_example: shift_upcoming={:?}", - shift_upcoming - ); - - // For the reduce, the example might look like - // - // ``` - // ... ... (*) ...s ... - // | | | | | - // | | +-R0-+ | - // | | ... | | - // | +--Ri--+ | - // | ... | - // +-R(i+1)----------+ - // ``` - // - // where Ri is the last reduction that requires - // shifting no additional symbols. In this case, if we - // inlined R0...Ri, then we know we can shift L. - let r0_end = reduce.reductions[0].end; - let i = reduce.reductions.iter().position(|r| r.end != r0_end); - let i = match i { - Some(v) => v, - None => return false, - }; - let ri = &reduce.reductions[i]; - let reduce_upcoming = &reduce.symbols[r0_end..ri.end]; - debug!( - "try_classify_inline_example: reduce_upcoming={:?} i={:?}", - reduce_upcoming, i - ); - - // For now, we only suggest inlining a single nonterminal, - // mostly because I am too lazy to weak the suggestion struct - // and error messages (but the rest of the code below doesn't - // make this assumption for the most part). - if i != 1 { - return false; - } - - // Make sure that all the things we are suggesting inlining - // are distinct so that we are not introducing a cycle. - let mut duplicates = set(); - if reduce.reductions[0..i + 1] - .iter() - .any(|r| !duplicates.insert(r.nonterminal.clone())) - { - return false; - } - - // Compare the two suffixes to see whether they - // diverge at some point. - shift_upcoming - .iter() - .zip(reduce_upcoming) - .filter_map(|(shift_sym, reduce_sym)| match (shift_sym, reduce_sym) { - (&ExampleSymbol::Symbol(ref shift_sym), &ExampleSymbol::Symbol(ref reduce_sym)) => { - if shift_sym == reduce_sym { - // same symbol on both; we'll be able to shift them - None - } else { - // different symbols: for this to work, must - // have disjoint first sets. Note that we - // consider a suffix matching epsilon to be - // potentially overlapping, though we could - // supply the actual lookahead for more precision. - let shift_first = self.first_sets.first0(&[shift_sym.clone()]); - let reduce_first = self.first_sets.first0(&[reduce_sym.clone()]); - if shift_first.is_disjoint(&reduce_first) { - Some(true) - } else { - Some(false) - } - } - } - _ => { - // we don't expect to encounter any - // epsilons, I don't think, because those - // only occur with an empty reduce at the - // top level - Some(false) - } - }) - .next() - .unwrap_or(false) - } - - fn shift_examples(&self, conflict: &TokenConflict<'grammar>) -> Vec { - log!(Tls::session(), Verbose, "Gathering shift examples"); - let state = &self.states[conflict.state.0]; - let conflicting_items = self.conflicting_shift_items(state, conflict); - conflicting_items - .into_iter() - .flat_map(|item| { - let tracer = Tracer::new(&self.first_sets, self.states); - let shift_trace = tracer.backtrace_shift(conflict.state, item); - let local_examples: Vec = shift_trace.lr0_examples(item).collect(); - local_examples - }) - .collect() - } - - fn reduce_examples( - &self, - state: StateIndex, - production: &'grammar Production, - lookahead: Token, - ) -> Vec { - log!(Tls::session(), Verbose, "Gathering reduce examples"); - let item = Item { - production: production, - index: production.symbols.len(), - lookahead: TokenSet::from(lookahead), - }; - let tracer = Tracer::new(&self.first_sets, self.states); - let reduce_trace = tracer.backtrace_reduce(state, item.to_lr0()); - reduce_trace.lr1_examples(&self.first_sets, &item).collect() - } - - fn conflicting_shift_items( - &self, - state: &LR1State<'grammar>, - conflict: &TokenConflict<'grammar>, - ) -> Set> { - // Lookahead must be a terminal, not EOF. - // Find an item J like `Bar = ... (*) L ...`. - let lookahead = Symbol::Terminal(conflict.lookahead.unwrap_terminal().clone()); - state - .items - .vec - .iter() - .filter(|i| i.can_shift()) - .filter(|i| i.production.symbols[i.index] == lookahead) - .map(|i| i.to_lr0()) - .collect() - } -} - -fn token_conflicts<'grammar>( - conflicts: &[Conflict<'grammar, TokenSet>], -) -> Vec> { - conflicts - .iter() - .flat_map(|conflict| { - conflict.lookahead.iter().map(move |token| Conflict { - state: conflict.state, - lookahead: token, - production: conflict.production, - action: conflict.action.clone(), - }) - }) - .collect() -} - -//fn choose_example<'grammar>(states: &[State<'grammar>], -// lookahead: Token, -// conflict: &TokenConflict<'grammar>) -//{ -// // Whenever we have a conflict in state S, there is always: -// // - a given lookahead L that permits some reduction, due to -// // an item I like `Foo = ... (*) [L]` -// // - another action that conflicts with R1. -// // -// // The backtrace code can give context to this item `I`, but the -// // problem is that it often results in many different contexts, -// // and we need to try and narrow those down to the one that will -// // help the user understand the problem. -// // -// // For that, we turn to the conflicting action, which can either be -// // a shift or reduce. Let's consider those two cases. -// // -// // ### Shift -// // -// // If the conflicting action is a shift, then there is at least -// // one item J in the state S like `Bar = ... (*) L ...`. We can -// // produce a backtrace from J and enumerate examples. We want to -// // find a pair of examples from I and J that share a common -// // prefix. -// // -// // ### Reduce -// // -// // If the conflicting action is a reduce, then there is at least -// // one item J in S like `Bar = ... (*) [L]`. We can produce a -// // backtrace for J and then search for an example that shares a -// // common prefix. -// -//} -// -//fn conflicting_item<'grammar>(state: &State<'grammar>, -// lookahead: Token, -// conflict: &TokenConflict<'grammar>) -// -> Item<'grammar> -//{ -// match conflict.action { -// Action::Shift(_) => { -// } -// Action::Reduce(production) => { -// // Must be at least some other item J in S like `Bar = ... (*) [L]`. -// state.items.vec.iter() -// .filter(|i| i.can_reduce()) -// .filter(|i| i.lookahead == lookahead) -// .filter(|i| i.production == production) -// .cloned() -// .next() -// .unwrap() -// } -// } -//} +//! Error reporting. For now very stupid and simplistic. + +use collections::{set, Set}; +use lr1::trace::Tracer; +use lr1::core::*; +use lr1::example::{Example, ExampleStyles, ExampleSymbol}; +use lr1::first::FirstSets; +use lr1::lookahead::{Token, TokenSet}; +use itertools::Itertools; +use grammar::repr::*; +use message::Message; +use message::builder::{BodyCharacter, Builder, Character, MessageBuilder}; +use tls::Tls; + +#[cfg(test)] +mod test; + +pub fn report_error(grammar: &Grammar, error: &LR1TableConstructionError) -> Vec { + let mut cx = ErrorReportingCx::new(grammar, &error.states, &error.conflicts); + cx.report_errors() +} + +struct ErrorReportingCx<'cx, 'grammar: 'cx> { + grammar: &'grammar Grammar, + first_sets: FirstSets, + states: &'cx [LR1State<'grammar>], + conflicts: &'cx [LR1Conflict<'grammar>], +} + +#[derive(Debug)] +enum ConflictClassification { + /// The grammar is ambiguous. This means we have two examples of + /// precisely the same set of symbols which can be reduced in two + /// distinct ways. + Ambiguity { action: Example, reduce: Example }, + + /// The grammar is ambiguous, and moreover it looks like a + /// precedence error. This means that the reduction is to a + /// nonterminal `T` and the shift is some symbol sandwiched + /// between two instances of `T`. + Precedence { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + }, + + /// Suggest inlining `nonterminal`. Makes sense if there are two + /// levels in the reduction tree in both examples, and the suffix + /// after the inner reduction is the same in all cases. + SuggestInline { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + }, + + /// Like the previous, but suggest replacing `nonterminal` with + /// `symbol?`. Makes sense if the thing to be inlined consists of + /// two alternatives, `X = symbol | ()`. + SuggestQuestion { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + symbol: Symbol, + }, + + /// Can't say much beyond that a conflict occurred. + InsufficientLookahead { action: Example, reduce: Example }, + + /// Really can't say *ANYTHING*. + Naive, +} + +type TokenConflict<'grammar> = Conflict<'grammar, Token>; + +impl<'cx, 'grammar> ErrorReportingCx<'cx, 'grammar> { + fn new( + grammar: &'grammar Grammar, + states: &'cx [LR1State<'grammar>], + conflicts: &'cx [LR1Conflict<'grammar>], + ) -> Self { + ErrorReportingCx { + grammar: grammar, + first_sets: FirstSets::new(grammar), + states: states, + conflicts: conflicts, + } + } + + fn report_errors(&mut self) -> Vec { + token_conflicts(self.conflicts) + .iter() + .map(|conflict| self.report_error(conflict)) + .collect() + } + + fn report_error(&mut self, conflict: &TokenConflict<'grammar>) -> Message { + match self.classify(conflict) { + ConflictClassification::Ambiguity { action, reduce } => { + self.report_error_ambiguity(conflict, action, reduce) + } + ConflictClassification::Precedence { + shift, + reduce, + nonterminal, + } => self.report_error_precedence(conflict, shift, reduce, nonterminal), + ConflictClassification::SuggestInline { + shift, + reduce, + nonterminal, + } => self.report_error_suggest_inline(conflict, shift, reduce, nonterminal), + ConflictClassification::SuggestQuestion { + shift, + reduce, + nonterminal, + symbol, + } => self.report_error_suggest_question(conflict, shift, reduce, nonterminal, symbol), + ConflictClassification::InsufficientLookahead { action, reduce } => { + self.report_error_insufficient_lookahead(conflict, action, reduce) + } + ConflictClassification::Naive => self.report_error_naive(conflict), + } + } + + fn report_error_ambiguity_core( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + ) -> Builder { + let styles = ExampleStyles::ambig(); + MessageBuilder::new(conflict.production.span) + .heading() + .text("Ambiguous grammar detected") + .end() + .body() + .begin_lines() + .wrap_text("The following symbols can be reduced in two ways:") + .push(reduce.to_symbol_list(reduce.symbols.len(), styles)) + .end() + .begin_lines() + .wrap_text("They could be reduced like so:") + .push(reduce.into_picture(styles)) + .end() + .begin_lines() + .wrap_text("Alternatively, they could be reduced like so:") + .push(shift.into_picture(styles)) + .end() + } + + fn report_error_ambiguity( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + ) -> Message { + self.report_error_ambiguity_core(conflict, shift, reduce) + .wrap_text( + "LALRPOP does not yet support ambiguous grammars. \ + See the LALRPOP manual for advice on \ + making your grammar unambiguous.", + ) + .end() + .end() + } + + fn report_error_precedence( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + ) -> Message { + self.report_error_ambiguity_core(conflict, shift, reduce) + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("This looks like a precedence error related to") + .push(nonterminal) + .verbatimed() + .punctuated(".") + .text("See the LALRPOP manual for advice on encoding precedence.") + .end() + .end() + .end() + } + + fn report_error_not_lr1_core( + &self, + conflict: &TokenConflict<'grammar>, + action: Example, + reduce: Example, + ) -> Builder { + let styles = ExampleStyles::new(); + let builder = MessageBuilder::new(conflict.production.span) + .heading() + .text("Local ambiguity detected") + .end() + .body(); + + let builder = builder + .begin_lines() + .begin_wrap() + .text("The problem arises after having observed the following symbols") + .text("in the input:") + .end() + .push(if action.cursor >= reduce.cursor { + action.to_symbol_list(action.cursor, styles) + } else { + reduce.to_symbol_list(reduce.cursor, styles) + }) + .begin_wrap(); + + let builder = match conflict.lookahead { + Token::Terminal(ref term) => builder + .text("At that point, if the next token is a") + .push(term.clone()) + .verbatimed() + .styled(Tls::session().cursor_symbol) + .punctuated(","), + Token::Error => builder.text("If an error has been found,"), + Token::EOF => builder.text("If the end of the input is reached,"), + }; + + let builder = builder + .text("then the parser can proceed in two different ways.") + .end() + .end(); + + let builder = self.describe_reduce(builder, styles, conflict.production, reduce, "First"); + + match conflict.action { + Action::Shift(ref lookahead, _) => { + self.describe_shift(builder, styles, lookahead.clone(), action, "Alternatively") + } + Action::Reduce(production) => { + self.describe_reduce(builder, styles, production, action, "Alternatively") + } + } + } + + fn describe_shift( + &self, + builder: Builder, + styles: ExampleStyles, + lookahead: TerminalString, + example: Example, + intro_word: &str, + ) -> Builder { + // A shift example looks like: + // + // ...p1 ...p2 (*) L ...s2 ...s1 + // | | | | + // | +-NT1-----------+ | + // | | + // | ... | + // | | + // +-NT2-----------------------+ + + let nt1 = example.reductions[0].nonterminal.clone(); + + builder + .begin_lines() + .begin_wrap() + .text(intro_word) + .punctuated(",") + .text("the parser could shift the") + .push(lookahead) + .verbatimed() + .text("token and later use it to construct a") + .push(nt1) + .verbatimed() + .punctuated(".") + .text("This might then yield a parse tree like") + .end() + .push(example.into_picture(styles)) + .end() + } + + fn describe_reduce( + &self, + builder: Builder, + styles: ExampleStyles, + production: &Production, + example: Example, + intro_word: &str, + ) -> Builder { + builder + .begin_lines() + .begin_wrap() + .text(intro_word) + .punctuated(",") + .text("the parser could execute the production at") + .push(production.span) + .punctuated(",") + .text("which would consume the top") + .text(production.symbols.len()) + .text("token(s) from the stack") + .text("and produce a") + .push(production.nonterminal.clone()) + .verbatimed() + .punctuated(".") + .text("This might then yield a parse tree like") + .end() + .push(example.into_picture(styles)) + .end() + } + + fn report_error_suggest_inline( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + ) -> Message { + let builder = self.report_error_not_lr1_core(conflict, shift, reduce); + + builder + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("It appears you could resolve this problem by adding") + .text("the annotation `#[inline]` to the definition of") + .push(nonterminal) + .verbatimed() + .punctuated(".") + .text("For more information, see the section on inlining") + .text("in the LALRPOP manual.") + .end() + .end() + .end() + } + + fn report_error_suggest_question( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + symbol: Symbol, + ) -> Message { + let builder = self.report_error_not_lr1_core(conflict, shift, reduce); + + builder + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("It appears you could resolve this problem by replacing") + .text("uses of") + .push(nonterminal.clone()) + .verbatimed() + .text("with") + .text(symbol) // intentionally disable coloring here, looks better + .adjacent_text("`", "?`") + .text("(or, alternatively, by adding the annotation `#[inline]` \ + to the definition of") + .push(nonterminal) + .punctuated(").") + .text("For more information, see the section on inlining") + .text("in the LALROP manual.") + .end() + .end() + .end() + } + + fn report_error_insufficient_lookahead( + &self, + conflict: &TokenConflict<'grammar>, + action: Example, + reduce: Example, + ) -> Message { + // The reduce example will look something like: + // + // + // ...p1 ...p2 (*) L ...s2 ...s1 + // | | | | + // | +-NT1-----------+ | + // | | | | + // | +-...-----------+ | + // | | | | + // | +-NTn-----------+ | + // | | + // +-NTn+1---------------------+ + // + // To solve the conflict, essentially, the user needs to + // modify the grammar so that `NTn` does not appear with `L` + // in its follow-set. How to guide them in this? + + let builder = self.report_error_not_lr1_core(conflict, action, reduce); + + builder + .wrap_text( + "See the LALRPOP manual for advice on \ + making your grammar LR(1).", + ) + .end() + .end() + } + + /// Naive error reporting. This is a fallback path which (I think) + /// never actually executes. + fn report_error_naive(&self, conflict: &TokenConflict<'grammar>) -> Message { + let mut builder = MessageBuilder::new(conflict.production.span) + .heading() + .text("Conflict detected") + .end() + .body() + .begin_lines() + .wrap_text("when in this state:") + .indented(); + for item in self.states[conflict.state.0].items.vec.iter() { + builder = builder.text(format!("{:?}", item)); + } + let mut builder = builder + .end() + .begin_wrap() + .text(format!("and looking at a token `{:?}`", conflict.lookahead)) + .text("we can reduce to a") + .push(conflict.production.nonterminal.clone()) + .verbatimed(); + builder = match conflict.action { + Action::Shift(..) => builder.text("but we can also shift"), + Action::Reduce(prod) => builder + .text("but we can also reduce to a") + .text(prod.nonterminal.clone()) + .verbatimed(), + }; + builder.end().end().end() + } + + fn classify(&mut self, conflict: &TokenConflict<'grammar>) -> ConflictClassification { + // Find examples from the conflicting action (either a shift + // or a reduce). + let mut action_examples = match conflict.action { + Action::Shift(..) => self.shift_examples(conflict), + Action::Reduce(production) => { + self.reduce_examples(conflict.state, production, conflict.lookahead.clone()) + } + }; + + // Find examples from the conflicting reduce. + let mut reduce_examples = self.reduce_examples( + conflict.state, + conflict.production, + conflict.lookahead.clone(), + ); + + // Prefer shorter examples to longer ones. + action_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); + reduce_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); + + // This really shouldn't happen, but if we've failed to come + // up with examples, then report a "naive" error. + if action_examples.is_empty() || reduce_examples.is_empty() { + return ConflictClassification::Naive; + } + + if let Some(classification) = + self.try_classify_ambiguity(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + if let Some(classification) = + self.try_classify_question(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + if let Some(classification) = + self.try_classify_inline(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + // Give up. Just grab an example from each and pair them up. + // If there aren't even two examples, something's pretty + // bogus, but we'll just call it naive. + action_examples + .into_iter() + .zip(reduce_examples) + .next() + .map( + |(action, reduce)| ConflictClassification::InsufficientLookahead { + action: action, + reduce: reduce, + }, + ) + .unwrap_or(ConflictClassification::Naive) + } + + fn try_classify_ambiguity( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + action_examples + .iter() + .cartesian_product(reduce_examples) + .filter(|&(action, reduce)| action.symbols == reduce.symbols) + .filter(|&(action, reduce)| action.cursor == reduce.cursor) + .map(|(action, reduce)| { + // Consider whether to call this a precedence + // error. We do this if we are stuck between reducing + // `T = T S T` and shifting `S`. + if let Action::Shift(ref term, _) = conflict.action { + let nt = &conflict.production.nonterminal; + if conflict.production.symbols.len() == 3 + && conflict.production.symbols[0] == Symbol::Nonterminal(nt.clone()) + && conflict.production.symbols[1] == Symbol::Terminal(term.clone()) + && conflict.production.symbols[2] == Symbol::Nonterminal(nt.clone()) + { + return ConflictClassification::Precedence { + shift: action.clone(), + reduce: reduce.clone(), + nonterminal: nt.clone(), + }; + } + } + ConflictClassification::Ambiguity { + action: action.clone(), + reduce: reduce.clone(), + } + }) + .next() + } + + fn try_classify_question( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + // If we get a shift/reduce conflict and the reduce + // is of a nonterminal like: + // + // T = { () | U } + // + // then suggest replacing T with U?. I'm being a bit lenient + // here since I do not KNOW that it will help, but it often + // does, and it's better style anyhow. + + if let Action::Reduce(_) = conflict.action { + return None; + } + + debug!( + "try_classify_question: action_examples={:?}", + action_examples + ); + debug!( + "try_classify_question: reduce_examples={:?}", + reduce_examples + ); + + let nt = &conflict.production.nonterminal; + let nt_productions = self.grammar.productions_for(nt); + if nt_productions.len() == 2 { + for &(i, j) in &[(0, 1), (1, 0)] { + if nt_productions[i].symbols.is_empty() && nt_productions[j].symbols.len() == 1 { + return Some(ConflictClassification::SuggestQuestion { + shift: action_examples[0].clone(), + reduce: reduce_examples[0].clone(), + nonterminal: nt.clone(), + symbol: nt_productions[j].symbols[0].clone(), + }); + } + } + } + + None + } + + fn try_classify_inline( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + // Inlining can help resolve a shift/reduce conflict because + // it defers the need to reduce. In particular, if we inlined + // all the reductions up until the last one, then we would be + // able to *shift* the lookahead instead of having to reduce. + // This can be helpful if we can see that shifting would let + // us delay reducing until the lookahead diverges. + + // Only applicable to shift/reduce: + if let Action::Reduce(_) = conflict.action { + return None; + } + + // FIXME: The logic here finds the first example where inline + // would help; but maybe we want to restrict it to cases + // where inlining would help *all* the examples...? + + action_examples + .iter() + .cartesian_product(reduce_examples) + .filter_map(|(shift, reduce)| { + if self.try_classify_inline_example(shift, reduce) { + let nt = &reduce.reductions[0].nonterminal; + Some(ConflictClassification::SuggestInline { + shift: shift.clone(), + reduce: reduce.clone(), + nonterminal: nt.clone(), + }) + } else { + None + } + }) + .next() + } + + fn try_classify_inline_example<'ex>(&self, shift: &Example, reduce: &Example) -> bool { + debug!("try_classify_inline_example({:?}, {:?})", shift, reduce); + + // In the case of shift, the example will look like + // + // ``` + // ... ... (*) L ...s1 ... + // | | | | + // | +-R0----------+ | + // | ... | + // +-Rn------------------+ + // ``` + // + // We want to extract the symbols ...s1: these are the + // things we are able to shift before being forced to + // make our next hard decision (to reduce R0 or not). + let shift_upcoming = &shift.symbols[shift.cursor + 1..shift.reductions[0].end]; + debug!( + "try_classify_inline_example: shift_upcoming={:?}", + shift_upcoming + ); + + // For the reduce, the example might look like + // + // ``` + // ... ... (*) ...s ... + // | | | | | + // | | +-R0-+ | + // | | ... | | + // | +--Ri--+ | + // | ... | + // +-R(i+1)----------+ + // ``` + // + // where Ri is the last reduction that requires + // shifting no additional symbols. In this case, if we + // inlined R0...Ri, then we know we can shift L. + let r0_end = reduce.reductions[0].end; + let i = reduce.reductions.iter().position(|r| r.end != r0_end); + let i = match i { + Some(v) => v, + None => return false, + }; + let ri = &reduce.reductions[i]; + let reduce_upcoming = &reduce.symbols[r0_end..ri.end]; + debug!( + "try_classify_inline_example: reduce_upcoming={:?} i={:?}", + reduce_upcoming, i + ); + + // For now, we only suggest inlining a single nonterminal, + // mostly because I am too lazy to weak the suggestion struct + // and error messages (but the rest of the code below doesn't + // make this assumption for the most part). + if i != 1 { + return false; + } + + // Make sure that all the things we are suggesting inlining + // are distinct so that we are not introducing a cycle. + let mut duplicates = set(); + if reduce.reductions[0..i + 1] + .iter() + .any(|r| !duplicates.insert(r.nonterminal.clone())) + { + return false; + } + + // Compare the two suffixes to see whether they + // diverge at some point. + shift_upcoming + .iter() + .zip(reduce_upcoming) + .filter_map(|(shift_sym, reduce_sym)| match (shift_sym, reduce_sym) { + (&ExampleSymbol::Symbol(ref shift_sym), &ExampleSymbol::Symbol(ref reduce_sym)) => { + if shift_sym == reduce_sym { + // same symbol on both; we'll be able to shift them + None + } else { + // different symbols: for this to work, must + // have disjoint first sets. Note that we + // consider a suffix matching epsilon to be + // potentially overlapping, though we could + // supply the actual lookahead for more precision. + let shift_first = self.first_sets.first0(&[shift_sym.clone()]); + let reduce_first = self.first_sets.first0(&[reduce_sym.clone()]); + if shift_first.is_disjoint(&reduce_first) { + Some(true) + } else { + Some(false) + } + } + } + _ => { + // we don't expect to encounter any + // epsilons, I don't think, because those + // only occur with an empty reduce at the + // top level + Some(false) + } + }) + .next() + .unwrap_or(false) + } + + fn shift_examples(&self, conflict: &TokenConflict<'grammar>) -> Vec { + log!(Tls::session(), Verbose, "Gathering shift examples"); + let state = &self.states[conflict.state.0]; + let conflicting_items = self.conflicting_shift_items(state, conflict); + conflicting_items + .into_iter() + .flat_map(|item| { + let tracer = Tracer::new(&self.first_sets, self.states); + let shift_trace = tracer.backtrace_shift(conflict.state, item); + let local_examples: Vec = shift_trace.lr0_examples(item).collect(); + local_examples + }) + .collect() + } + + fn reduce_examples( + &self, + state: StateIndex, + production: &'grammar Production, + lookahead: Token, + ) -> Vec { + log!(Tls::session(), Verbose, "Gathering reduce examples"); + let item = Item { + production: production, + index: production.symbols.len(), + lookahead: TokenSet::from(lookahead), + }; + let tracer = Tracer::new(&self.first_sets, self.states); + let reduce_trace = tracer.backtrace_reduce(state, item.to_lr0()); + reduce_trace.lr1_examples(&self.first_sets, &item).collect() + } + + fn conflicting_shift_items( + &self, + state: &LR1State<'grammar>, + conflict: &TokenConflict<'grammar>, + ) -> Set> { + // Lookahead must be a terminal, not EOF. + // Find an item J like `Bar = ... (*) L ...`. + let lookahead = Symbol::Terminal(conflict.lookahead.unwrap_terminal().clone()); + state + .items + .vec + .iter() + .filter(|i| i.can_shift()) + .filter(|i| i.production.symbols[i.index] == lookahead) + .map(|i| i.to_lr0()) + .collect() + } +} + +fn token_conflicts<'grammar>( + conflicts: &[Conflict<'grammar, TokenSet>], +) -> Vec> { + conflicts + .iter() + .flat_map(|conflict| { + conflict.lookahead.iter().map(move |token| Conflict { + state: conflict.state, + lookahead: token, + production: conflict.production, + action: conflict.action.clone(), + }) + }) + .collect() +} + +//fn choose_example<'grammar>(states: &[State<'grammar>], +// lookahead: Token, +// conflict: &TokenConflict<'grammar>) +//{ +// // Whenever we have a conflict in state S, there is always: +// // - a given lookahead L that permits some reduction, due to +// // an item I like `Foo = ... (*) [L]` +// // - another action that conflicts with R1. +// // +// // The backtrace code can give context to this item `I`, but the +// // problem is that it often results in many different contexts, +// // and we need to try and narrow those down to the one that will +// // help the user understand the problem. +// // +// // For that, we turn to the conflicting action, which can either be +// // a shift or reduce. Let's consider those two cases. +// // +// // ### Shift +// // +// // If the conflicting action is a shift, then there is at least +// // one item J in the state S like `Bar = ... (*) L ...`. We can +// // produce a backtrace from J and enumerate examples. We want to +// // find a pair of examples from I and J that share a common +// // prefix. +// // +// // ### Reduce +// // +// // If the conflicting action is a reduce, then there is at least +// // one item J in S like `Bar = ... (*) [L]`. We can produce a +// // backtrace for J and then search for an example that shares a +// // common prefix. +// +//} +// +//fn conflicting_item<'grammar>(state: &State<'grammar>, +// lookahead: Token, +// conflict: &TokenConflict<'grammar>) +// -> Item<'grammar> +//{ +// match conflict.action { +// Action::Shift(_) => { +// } +// Action::Reduce(production) => { +// // Must be at least some other item J in S like `Bar = ... (*) [L]`. +// state.items.vec.iter() +// .filter(|i| i.can_reduce()) +// .filter(|i| i.lookahead == lookahead) +// .filter(|i| i.production == production) +// .cloned() +// .next() +// .unwrap() +// } +// } +//} diff --git a/third_party/rust/lalrpop/src/lr1/error/test.rs b/third_party/rust/lalrpop/src/lr1/error/test.rs index 31c78d13f158..0d64bfdeb3d7 100644 --- a/third_party/rust/lalrpop/src/lr1/error/test.rs +++ b/third_party/rust/lalrpop/src/lr1/error/test.rs @@ -1,187 +1,187 @@ -use grammar::repr::*; -use lr1::build_states; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::normalized_grammar; -use tls::Tls; - -use super::{ConflictClassification, ErrorReportingCx}; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -#[test] -fn priority_conflict() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" -grammar; -pub Ty: () = { - "int" => (), - "bool" => (), - "->" => (), -}; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let err = build_states(&grammar, nt("Ty")).unwrap_err(); - let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); - let conflicts = super::token_conflicts(&err.conflicts); - let conflict = &conflicts[0]; - - println!("conflict={:?}", conflict); - - match cx.classify(conflict) { - ConflictClassification::Precedence { - shift, - reduce, - nonterminal, - } => { - println!( - "shift={:#?}, reduce={:#?}, nonterminal={:?}", - shift, reduce, nonterminal - ); - assert_eq!(shift.symbols.len(), 5); // Ty -> Ty -> Ty - assert_eq!(shift.cursor, 3); // Ty -> Ty -> Ty - assert_eq!(shift.symbols, reduce.symbols); - assert_eq!(shift.cursor, reduce.cursor); - assert_eq!(nonterminal, nt("Ty")); - } - r => panic!("wrong classification {:#?}", r), - } -} - -#[test] -fn expr_braced_conflict() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" -grammar; -pub Expr: () = { - "Id" => (), - "Id" "{" "}" => (), - "Expr" "+" "Id" => (), - "if" Expr "{" "}" => (), -}; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let err = build_states(&grammar, nt("Expr")).unwrap_err(); - let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); - let conflicts = super::token_conflicts(&err.conflicts); - let conflict = &conflicts[0]; - - println!("conflict={:?}", conflict); - - match cx.classify(conflict) { - ConflictClassification::InsufficientLookahead { .. } => {} - r => panic!("wrong classification {:#?}", r), - } -} - -#[test] -fn suggest_question_conflict() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" - grammar; - - pub E: () = { - "L", - "&" OPT_L E - }; - - OPT_L: () = { - (), - "L" - }; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let err = build_states(&grammar, nt("E")).unwrap_err(); - let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); - let conflicts = super::token_conflicts(&err.conflicts); - let conflict = &conflicts[0]; - - println!("conflict={:?}", conflict); - - match cx.classify(conflict) { - ConflictClassification::SuggestQuestion { - shift: _, - reduce: _, - nonterminal, - symbol, - } => { - assert_eq!(nonterminal, nt("OPT_L")); - assert_eq!( - symbol, - Symbol::Terminal(TerminalString::quoted(Atom::from("L"))) - ); - } - r => panic!("wrong classification {:#?}", r), - } -} - -#[test] -fn suggest_inline_conflict() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r##" -grammar; - -pub ImportDecl: () = { - "import" ";" => (), - "import" "." "*" ";" => (), -}; - -Path: () = { - )*> => () -}; - -Ident = r#"[a-zA-Z][a-zA-Z0-9]*"#; -"##, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let err = build_states(&grammar, nt("ImportDecl")).unwrap_err(); - let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); - let conflicts = super::token_conflicts(&err.conflicts); - let conflict = &conflicts[0]; - - println!("conflict={:?}", conflict); - - match cx.classify(conflict) { - ConflictClassification::SuggestInline { - shift: _, - reduce: _, - nonterminal, - } => { - assert_eq!(nonterminal, nt("Path")); - } - r => panic!("wrong classification {:#?}", r), - } -} - -/// This example used to cause an out-of-bounds error. -#[test] -fn issue_249() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r##" -grammar; - -pub Func = StructDecl* VarDecl*; -StructDecl = "<" StructParameter* ">"; -StructParameter = "may_dangle"?; -VarDecl = "let"; -"##, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let err = build_states(&grammar, nt("Func")).unwrap_err(); - let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); - let conflicts = super::token_conflicts(&err.conflicts); - for conflict in &conflicts { - println!("conflict={:?}", conflict); - cx.classify(conflict); - } -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use tls::Tls; + +use super::{ConflictClassification, ErrorReportingCx}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +#[test] +fn priority_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::Precedence { + shift, + reduce, + nonterminal, + } => { + println!( + "shift={:#?}, reduce={:#?}, nonterminal={:?}", + shift, reduce, nonterminal + ); + assert_eq!(shift.symbols.len(), 5); // Ty -> Ty -> Ty + assert_eq!(shift.cursor, 3); // Ty -> Ty -> Ty + assert_eq!(shift.symbols, reduce.symbols); + assert_eq!(shift.cursor, reduce.cursor); + assert_eq!(nonterminal, nt("Ty")); + } + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn expr_braced_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Expr: () = { + "Id" => (), + "Id" "{" "}" => (), + "Expr" "+" "Id" => (), + "if" Expr "{" "}" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Expr")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::InsufficientLookahead { .. } => {} + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn suggest_question_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" + grammar; + + pub E: () = { + "L", + "&" OPT_L E + }; + + OPT_L: () = { + (), + "L" + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("E")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::SuggestQuestion { + shift: _, + reduce: _, + nonterminal, + symbol, + } => { + assert_eq!(nonterminal, nt("OPT_L")); + assert_eq!( + symbol, + Symbol::Terminal(TerminalString::quoted(Atom::from("L"))) + ); + } + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn suggest_inline_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r##" +grammar; + +pub ImportDecl: () = { + "import" ";" => (), + "import" "." "*" ";" => (), +}; + +Path: () = { + )*> => () +}; + +Ident = r#"[a-zA-Z][a-zA-Z0-9]*"#; +"##, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("ImportDecl")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::SuggestInline { + shift: _, + reduce: _, + nonterminal, + } => { + assert_eq!(nonterminal, nt("Path")); + } + r => panic!("wrong classification {:#?}", r), + } +} + +/// This example used to cause an out-of-bounds error. +#[test] +fn issue_249() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r##" +grammar; + +pub Func = StructDecl* VarDecl*; +StructDecl = "<" StructParameter* ">"; +StructParameter = "may_dangle"?; +VarDecl = "let"; +"##, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Func")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + for conflict in &conflicts { + println!("conflict={:?}", conflict); + cx.classify(conflict); + } +} diff --git a/third_party/rust/lalrpop/src/lr1/example/mod.rs b/third_party/rust/lalrpop/src/lr1/example/mod.rs index 7aee19672413..768c9170cfd9 100644 --- a/third_party/rust/lalrpop/src/lr1/example/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/example/mod.rs @@ -1,409 +1,409 @@ -//! Code to compute example inputs given a backtrace. - -use ascii_canvas::AsciiView; -use grammar::repr::*; -use message::builder::InlineBuilder; -use message::Content; -use std::fmt::{Debug, Error, Formatter}; -use style::Style; -use tls::Tls; - -#[cfg(test)] -mod test; - -/// An "example" input and the way it was derived. This can be -/// serialized into useful text. For example, it might represent -/// something like this: -/// -/// ``` -/// Looking at -/// | -/// v -/// Ty "->" Ty "->" Ty -/// | | | -/// +-Ty-----+ | -/// | | -/// +-Ty-------------+ -/// ``` -/// -/// The top-line is the `symbols` vector. The groupings below are -/// stored in the `reductions` vector, in order from smallest to -/// largest (they are always properly nested). The `cursor` field -/// indicates the current lookahead token. -/// -/// The `symbols` vector is actually `Option` to account -/// for empty reductions: -/// -/// ``` -/// A B -/// | | | | -/// | +-Y-+ | -/// +-Z-----+ -/// ``` -/// -/// The "empty space" between A and B would be represented as `None`. -#[derive(Clone, Debug)] -pub struct Example { - pub symbols: Vec, - pub cursor: usize, - pub reductions: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum ExampleSymbol { - Symbol(Symbol), - Epsilon, -} - -#[derive(Copy, Clone, Default)] -pub struct ExampleStyles { - pub before_cursor: Style, - pub on_cursor: Style, - pub after_cursor: Style, -} - -#[derive(Clone, Debug)] -pub struct Reduction { - pub start: usize, - pub end: usize, - pub nonterminal: NonterminalString, -} - -impl Example { - /// Length of each symbol. Each will need *at least* that amount - /// of space. :) Measure in characters, under the assumption of a - /// mono-spaced font. Also add a final `0` marker which will serve - /// as the end position. - fn lengths(&self) -> Vec { - self.symbols - .iter() - .map(|s| match *s { - ExampleSymbol::Symbol(ref s) => format!("{}", s).chars().count(), - ExampleSymbol::Epsilon => 1, // display as " " - }) - .chain(Some(0)) - .collect() - } - - /// Extract a prefix of the list of symbols from this `Example` - /// and make a styled list of them, like: - /// - /// Ty "->" Ty -> "Ty" - pub fn to_symbol_list(&self, length: usize, styles: ExampleStyles) -> Box { - let mut builder = InlineBuilder::new().begin_spaced(); - - for (index, symbol) in self.symbols[..length].iter().enumerate() { - let style = if index < self.cursor { - styles.before_cursor - } else if index > self.cursor { - styles.after_cursor - } else { - match *symbol { - ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, - ExampleSymbol::Symbol(Symbol::Nonterminal(_)) => styles.after_cursor, - ExampleSymbol::Epsilon => styles.after_cursor, - } - }; - - if let &ExampleSymbol::Symbol(ref s) = symbol { - builder = builder.push(s.clone()).styled(style); - } - } - - builder.end().indented().end() - } - - /// Render the example into a styled diagram suitable for - /// embedding in an error message. - pub fn into_picture(self, styles: ExampleStyles) -> Box { - let lengths = self.lengths(); - let positions = self.positions(&lengths); - InlineBuilder::new() - .push(Box::new(ExamplePicture { - example: self, - positions: positions, - styles: styles, - })) - .indented() - .end() - } - - fn starting_positions(&self, lengths: &[usize]) -> Vec { - lengths - .iter() - .scan(0, |counter, &len| { - let start = *counter; - - // Leave space for "NT " (if "NT" is the name - // of the nonterminal). - *counter = start + len + 1; - - Some(start) - }) - .collect() - } - - /// Start index where each symbol in the example should appear, - /// measured in characters. These are spaced to leave enough room - /// for the reductions below. - fn positions(&self, lengths: &[usize]) -> Vec { - // Initially, position each symbol with one space in between, - // like: - // - // X Y Z - let mut positions = self.starting_positions(lengths); - - // Adjust spacing to account for the nonterminal labels - // we will have to add. It will display - // like this: - // - // A1 B2 C3 D4 E5 F6 - // | | - // +-Label---+ - // - // But if the label is long we may have to adjust the spacing - // of the covered items (here, we changed them to two spaces, - // except the first gap, which got 3 spaces): - // - // A1 B2 C3 D4 E5 F6 - // | | - // +-LongLabel22-+ - for &Reduction { - start, - end, - ref nonterminal, - } in &self.reductions - { - let nt_len = format!("{}", nonterminal).chars().count(); - - // Number of symbols we are reducing. This should always - // be non-zero because even in the case of a \epsilon - // rule, we ought to be have a `None` entry in the symbol array. - let num_syms = end - start; - assert!(num_syms > 0); - - // Let's use the expansion from above as our running example. - // We start out with positions like this: - // - // A1 B2 C3 D4 E5 F6 - // | | - // +-LongLabel22-+ - // - // But we want LongLabel to end at D4. No good. - - // Start of first symbol to be reduced. Here, 0. - // - // A1 B2 C3 D4 - // ^ here - let start_position = positions[start]; - - // End of last symbol to be reduced. Here, 11. - // - // A1 B2 C3 D4 E5 - // ^ positions[end] - // ^ here -- positions[end] - 1 - let end_position = positions[end] - 1; - - // We need space to draw `+-Label-+` between - // start_position and end_position. - let required_len = nt_len + 4; // here, 15 - let actual_len = end_position - start_position; // here, 10 - if required_len < actual_len { - continue; // Got enough space, all set. - } - - // Have to add `difference` characters altogether. - let difference = required_len - actual_len; // here, 4 - - // Increment over everything that is not part of this nonterminal. - // In the example above, that is E5 and F6. - shift(&mut positions[end..], difference); - - if num_syms > 1 { - // If there is just one symbol being reduced here, - // then we have shifted over the things that follow - // it, and we are done. This would be a case like: - // - // X Y Z - // | | - // +-Label-+ - // - // (which maybe ought to be rendered slightly - // differently). - // - // But if there are multiple symbols, we're not quite - // done, because there would be an unsightly gap: - // - // (gaps) - // | | | - // v v v - // A1 B2 C3 D4 E5 F6 - // | | - // +-LongLabel22-+ - // - // we'd like to make things line up, so we have to - // distribute that extra space internally by - // increasing the "gaps" (marked above) as evenly as - // possible (basically, full justification). - // - // We do this by dividing up the spaces evenly and - // then taking the remainder `N` and distributing 1 - // extra to the first N. - let num_gaps = num_syms - 1; // number of gaps we can adjust. Here, 3. - let amount = difference / num_gaps; // what to add to each gap. Here, 1. - let extra = difference % num_gaps; // the remainder. Here, 1. - - // For the first `extra` symbols, give them amount + 1 - // extra space. After that, just amount. (O(n^2). Sue me.) - for i in 0..extra { - shift(&mut positions[start + 1 + i..end], amount + 1); - } - for i in extra..num_gaps { - shift(&mut positions[start + 1 + i..end], amount); - } - } - } - - positions - } - - #[cfg(test)] - pub fn paint_unstyled(&self) -> Vec<::ascii_canvas::Row> { - use std::default::Default; - let this = self.clone(); - let content = this.into_picture(ExampleStyles::default()); - let min_width = content.min_width(); - let canvas = content.emit_to_canvas(min_width); - canvas.to_strings() - } - - fn paint_on(&self, styles: &ExampleStyles, positions: &[usize], view: &mut AsciiView) { - // Draw the brackets for each reduction: - for (index, reduction) in self.reductions.iter().enumerate() { - let start_column = positions[reduction.start]; - let end_column = positions[reduction.end] - 1; - let row = 1 + index; - view.draw_vertical_line(0..row + 1, start_column); - view.draw_vertical_line(0..row + 1, end_column - 1); - view.draw_horizontal_line(row, start_column..end_column); - } - - // Write the labels for each reduction. Do this after the - // brackets so that ascii canvas can convert `|` to `+` - // without interfering with the text (in case of weird overlap). - let session = Tls::session(); - for (index, reduction) in self.reductions.iter().enumerate() { - let column = positions[reduction.start] + 2; - let row = 1 + index; - view.write_chars( - row, - column, - reduction.nonterminal.to_string().chars(), - session.nonterminal_symbol, - ); - } - - // Write the labels on top: - // A1 B2 C3 D4 E5 F6 - self.paint_symbols_on(&self.symbols, &positions, styles, view); - } - - fn paint_symbols_on( - &self, - symbols: &[ExampleSymbol], - positions: &[usize], - styles: &ExampleStyles, - view: &mut AsciiView, - ) { - let session = Tls::session(); - for (index, ex_symbol) in symbols.iter().enumerate() { - let style = if index < self.cursor { - styles.before_cursor - } else if index == self.cursor { - // Only display actual terminals in the "on-cursor" - // font, because it might be misleading to show a - // nonterminal that way. Really it'd be nice to expand - // so that the cursor is always a terminal. - match *ex_symbol { - ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, - _ => styles.after_cursor, - } - } else { - styles.after_cursor - }; - - let column = positions[index]; - match *ex_symbol { - ExampleSymbol::Symbol(Symbol::Terminal(ref term)) => { - view.write_chars( - 0, - column, - term.to_string().chars(), - style.with(session.terminal_symbol), - ); - } - ExampleSymbol::Symbol(Symbol::Nonterminal(ref nt)) => { - view.write_chars( - 0, - column, - nt.to_string().chars(), - style.with(session.nonterminal_symbol), - ); - } - ExampleSymbol::Epsilon => {} - } - } - } -} - -struct ExamplePicture { - example: Example, - positions: Vec, - styles: ExampleStyles, -} - -impl Content for ExamplePicture { - fn min_width(&self) -> usize { - *self.positions.last().unwrap() - } - - fn emit(&self, view: &mut AsciiView) { - self.example.paint_on(&self.styles, &self.positions, view); - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.push(self); - } -} - -impl Debug for ExamplePicture { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Debug::fmt(&self.example, fmt) - } -} - -fn shift(positions: &mut [usize], amount: usize) { - for position in positions { - *position += amount; - } -} - -impl ExampleStyles { - pub fn ambig() -> Self { - let session = Tls::session(); - ExampleStyles { - before_cursor: session.ambig_symbols, - on_cursor: session.ambig_symbols, - after_cursor: session.ambig_symbols, - } - } - - pub fn new() -> Self { - let session = Tls::session(); - ExampleStyles { - before_cursor: session.observed_symbols, - on_cursor: session.cursor_symbol, - after_cursor: session.unobserved_symbols, - } - } -} +//! Code to compute example inputs given a backtrace. + +use ascii_canvas::AsciiView; +use message::Content; +use message::builder::InlineBuilder; +use grammar::repr::*; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use tls::Tls; + +#[cfg(test)] +mod test; + +/// An "example" input and the way it was derived. This can be +/// serialized into useful text. For example, it might represent +/// something like this: +/// +/// ``` +/// Looking at +/// | +/// v +/// Ty "->" Ty "->" Ty +/// | | | +/// +-Ty-----+ | +/// | | +/// +-Ty-------------+ +/// ``` +/// +/// The top-line is the `symbols` vector. The groupings below are +/// stored in the `reductions` vector, in order from smallest to +/// largest (they are always properly nested). The `cursor` field +/// indicates the current lookahead token. +/// +/// The `symbols` vector is actually `Option` to account +/// for empty reductions: +/// +/// ``` +/// A B +/// | | | | +/// | +-Y-+ | +/// +-Z-----+ +/// ``` +/// +/// The "empty space" between A and B would be represented as `None`. +#[derive(Clone, Debug)] +pub struct Example { + pub symbols: Vec, + pub cursor: usize, + pub reductions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ExampleSymbol { + Symbol(Symbol), + Epsilon, +} + +#[derive(Copy, Clone, Default)] +pub struct ExampleStyles { + pub before_cursor: Style, + pub on_cursor: Style, + pub after_cursor: Style, +} + +#[derive(Clone, Debug)] +pub struct Reduction { + pub start: usize, + pub end: usize, + pub nonterminal: NonterminalString, +} + +impl Example { + /// Length of each symbol. Each will need *at least* that amount + /// of space. :) Measure in characters, under the assumption of a + /// mono-spaced font. Also add a final `0` marker which will serve + /// as the end position. + fn lengths(&self) -> Vec { + self.symbols + .iter() + .map(|s| match *s { + ExampleSymbol::Symbol(ref s) => format!("{}", s).chars().count(), + ExampleSymbol::Epsilon => 1, // display as " " + }) + .chain(Some(0)) + .collect() + } + + /// Extract a prefix of the list of symbols from this `Example` + /// and make a styled list of them, like: + /// + /// Ty "->" Ty -> "Ty" + pub fn to_symbol_list(&self, length: usize, styles: ExampleStyles) -> Box { + let mut builder = InlineBuilder::new().begin_spaced(); + + for (index, symbol) in self.symbols[..length].iter().enumerate() { + let style = if index < self.cursor { + styles.before_cursor + } else if index > self.cursor { + styles.after_cursor + } else { + match *symbol { + ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, + ExampleSymbol::Symbol(Symbol::Nonterminal(_)) => styles.after_cursor, + ExampleSymbol::Epsilon => styles.after_cursor, + } + }; + + if let &ExampleSymbol::Symbol(ref s) = symbol { + builder = builder.push(s.clone()).styled(style); + } + } + + builder.end().indented().end() + } + + /// Render the example into a styled diagram suitable for + /// embedding in an error message. + pub fn into_picture(self, styles: ExampleStyles) -> Box { + let lengths = self.lengths(); + let positions = self.positions(&lengths); + InlineBuilder::new() + .push(Box::new(ExamplePicture { + example: self, + positions: positions, + styles: styles, + })) + .indented() + .end() + } + + fn starting_positions(&self, lengths: &[usize]) -> Vec { + lengths + .iter() + .scan(0, |counter, &len| { + let start = *counter; + + // Leave space for "NT " (if "NT" is the name + // of the nonterminal). + *counter = start + len + 1; + + Some(start) + }) + .collect() + } + + /// Start index where each symbol in the example should appear, + /// measured in characters. These are spaced to leave enough room + /// for the reductions below. + fn positions(&self, lengths: &[usize]) -> Vec { + // Initially, position each symbol with one space in between, + // like: + // + // X Y Z + let mut positions = self.starting_positions(lengths); + + // Adjust spacing to account for the nonterminal labels + // we will have to add. It will display + // like this: + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-Label---+ + // + // But if the label is long we may have to adjust the spacing + // of the covered items (here, we changed them to two spaces, + // except the first gap, which got 3 spaces): + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + for &Reduction { + start, + end, + ref nonterminal, + } in &self.reductions + { + let nt_len = format!("{}", nonterminal).chars().count(); + + // Number of symbols we are reducing. This should always + // be non-zero because even in the case of a \epsilon + // rule, we ought to be have a `None` entry in the symbol array. + let num_syms = end - start; + assert!(num_syms > 0); + + // Let's use the expansion from above as our running example. + // We start out with positions like this: + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + // + // But we want LongLabel to end at D4. No good. + + // Start of first symbol to be reduced. Here, 0. + // + // A1 B2 C3 D4 + // ^ here + let start_position = positions[start]; + + // End of last symbol to be reduced. Here, 11. + // + // A1 B2 C3 D4 E5 + // ^ positions[end] + // ^ here -- positions[end] - 1 + let end_position = positions[end] - 1; + + // We need space to draw `+-Label-+` between + // start_position and end_position. + let required_len = nt_len + 4; // here, 15 + let actual_len = end_position - start_position; // here, 10 + if required_len < actual_len { + continue; // Got enough space, all set. + } + + // Have to add `difference` characters altogether. + let difference = required_len - actual_len; // here, 4 + + // Increment over everything that is not part of this nonterminal. + // In the example above, that is E5 and F6. + shift(&mut positions[end..], difference); + + if num_syms > 1 { + // If there is just one symbol being reduced here, + // then we have shifted over the things that follow + // it, and we are done. This would be a case like: + // + // X Y Z + // | | + // +-Label-+ + // + // (which maybe ought to be rendered slightly + // differently). + // + // But if there are multiple symbols, we're not quite + // done, because there would be an unsightly gap: + // + // (gaps) + // | | | + // v v v + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + // + // we'd like to make things line up, so we have to + // distribute that extra space internally by + // increasing the "gaps" (marked above) as evenly as + // possible (basically, full justification). + // + // We do this by dividing up the spaces evenly and + // then taking the remainder `N` and distributing 1 + // extra to the first N. + let num_gaps = num_syms - 1; // number of gaps we can adjust. Here, 3. + let amount = difference / num_gaps; // what to add to each gap. Here, 1. + let extra = difference % num_gaps; // the remainder. Here, 1. + + // For the first `extra` symbols, give them amount + 1 + // extra space. After that, just amount. (O(n^2). Sue me.) + for i in 0..extra { + shift(&mut positions[start + 1 + i..end], amount + 1); + } + for i in extra..num_gaps { + shift(&mut positions[start + 1 + i..end], amount); + } + } + } + + positions + } + + #[cfg(test)] + pub fn paint_unstyled(&self) -> Vec<::ascii_canvas::Row> { + use std::default::Default; + let this = self.clone(); + let content = this.into_picture(ExampleStyles::default()); + let min_width = content.min_width(); + let canvas = content.emit_to_canvas(min_width); + canvas.to_strings() + } + + fn paint_on(&self, styles: &ExampleStyles, positions: &[usize], view: &mut AsciiView) { + // Draw the brackets for each reduction: + for (index, reduction) in self.reductions.iter().enumerate() { + let start_column = positions[reduction.start]; + let end_column = positions[reduction.end] - 1; + let row = 1 + index; + view.draw_vertical_line(0..row + 1, start_column); + view.draw_vertical_line(0..row + 1, end_column - 1); + view.draw_horizontal_line(row, start_column..end_column); + } + + // Write the labels for each reduction. Do this after the + // brackets so that ascii canvas can convert `|` to `+` + // without interfering with the text (in case of weird overlap). + let session = Tls::session(); + for (index, reduction) in self.reductions.iter().enumerate() { + let column = positions[reduction.start] + 2; + let row = 1 + index; + view.write_chars( + row, + column, + reduction.nonterminal.to_string().chars(), + session.nonterminal_symbol, + ); + } + + // Write the labels on top: + // A1 B2 C3 D4 E5 F6 + self.paint_symbols_on(&self.symbols, &positions, styles, view); + } + + fn paint_symbols_on( + &self, + symbols: &[ExampleSymbol], + positions: &[usize], + styles: &ExampleStyles, + view: &mut AsciiView, + ) { + let session = Tls::session(); + for (index, ex_symbol) in symbols.iter().enumerate() { + let style = if index < self.cursor { + styles.before_cursor + } else if index == self.cursor { + // Only display actual terminals in the "on-cursor" + // font, because it might be misleading to show a + // nonterminal that way. Really it'd be nice to expand + // so that the cursor is always a terminal. + match *ex_symbol { + ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, + _ => styles.after_cursor, + } + } else { + styles.after_cursor + }; + + let column = positions[index]; + match *ex_symbol { + ExampleSymbol::Symbol(Symbol::Terminal(ref term)) => { + view.write_chars( + 0, + column, + term.to_string().chars(), + style.with(session.terminal_symbol), + ); + } + ExampleSymbol::Symbol(Symbol::Nonterminal(ref nt)) => { + view.write_chars( + 0, + column, + nt.to_string().chars(), + style.with(session.nonterminal_symbol), + ); + } + ExampleSymbol::Epsilon => {} + } + } + } +} + +struct ExamplePicture { + example: Example, + positions: Vec, + styles: ExampleStyles, +} + +impl Content for ExamplePicture { + fn min_width(&self) -> usize { + *self.positions.last().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + self.example.paint_on(&self.styles, &self.positions, view); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +impl Debug for ExamplePicture { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Debug::fmt(&self.example, fmt) + } +} + +fn shift(positions: &mut [usize], amount: usize) { + for position in positions { + *position += amount; + } +} + +impl ExampleStyles { + pub fn ambig() -> Self { + let session = Tls::session(); + ExampleStyles { + before_cursor: session.ambig_symbols, + on_cursor: session.ambig_symbols, + after_cursor: session.ambig_symbols, + } + } + + pub fn new() -> Self { + let session = Tls::session(); + ExampleStyles { + before_cursor: session.observed_symbols, + on_cursor: session.cursor_symbol, + after_cursor: session.unobserved_symbols, + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/example/test.rs b/third_party/rust/lalrpop/src/lr1/example/test.rs index 202a2fb3abbc..82893472a588 100644 --- a/third_party/rust/lalrpop/src/lr1/example/test.rs +++ b/third_party/rust/lalrpop/src/lr1/example/test.rs @@ -1,202 +1,195 @@ -use grammar::repr::*; -use string_cache::DefaultAtom as Atom; -use test_util::expect_debug; -use tls::Tls; - -use super::{Example, ExampleSymbol, Reduction}; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -fn term(t: &str) -> TerminalString { - TerminalString::quoted(Atom::from(t)) -} - -macro_rules! sym { - (ε) => { - ExampleSymbol::Epsilon - }; - ($t:ident) => { - ExampleSymbol::Symbol(Symbol::Nonterminal(nt(stringify!($t)))) - }; -} - -macro_rules! syms { - ($($t:tt),*) => { - vec![$(sym!($t)),*] - } -} - -// 01234567890123456789012 -// A1 B2 C3 D4 E5 F6 -// | | | -// +-LongLabel22-+ | -// | | -// +-Label-------------+ -fn long_label_1_example() -> Example { - Example { - symbols: syms!(A1, B2, C3, D4, E5, F6), - cursor: 5, - reductions: vec![ - Reduction { - start: 0, - end: 4, - nonterminal: nt("LongLabel22"), - }, - Reduction { - start: 0, - end: 6, - nonterminal: nt("Label"), - }, - ], - } -} - -#[test] -fn long_label_1_positions() { - let _tls = Tls::test(); - let example = long_label_1_example(); - let lengths = example.lengths(); - let positions = example.positions(&lengths); - assert_eq!(positions, vec![0, 5, 9, 13, 16, 19, 22]); -} - -#[test] -fn long_label_1_strings() { - let _tls = Tls::test(); - let strings = long_label_1_example().paint_unstyled(); - expect_debug( - strings, - r#" -[ - " A1 B2 C3 D4 E5 F6", - " ├─LongLabel22─┘ │", - " └─Label─────────────┘" -] -"# - .trim(), - ); -} - -// Example with some empty sequences and -// other edge cases. -// -// 012345678901234567890123456789012345 -// A1 B2 C3 D4 E5 F6 -// | | | | | | | -// +-X-+ | | | | | -// | | | | | | -// +-MegaLongLabel-+ | | | | -// | | | | -// +-Y-+ | | -// | | -// +-Z-+ -fn empty_labels_example() -> Example { - Example { - // 0 1 2 3 4 5 6 7 - symbols: syms!(ε, A1, B2, C3, D4, E5, ε, F6), - cursor: 5, - reductions: vec![ - Reduction { - start: 0, - end: 1, - nonterminal: nt("X"), - }, - Reduction { - start: 0, - end: 4, - nonterminal: nt("MegaLongLabel"), - }, - Reduction { - start: 6, - end: 7, - nonterminal: nt("Y"), - }, - Reduction { - start: 7, - end: 8, - nonterminal: nt("Z"), - }, - ], - } -} - -#[test] -fn empty_labels_positions() { - let _tls = Tls::test(); - let example = empty_labels_example(); - let lengths = example.lengths(); - let positions = example.positions(&lengths); - // A1 B2 C3 D4 E5 F6 - assert_eq!(positions, vec![0, 7, 11, 15, 18, 21, 24, 30, 36]); -} - -#[test] -fn empty_labels_strings() { - let _tls = Tls::test(); - let strings = empty_labels_example().paint_unstyled(); - expect_debug( - strings, - r#" -[ - " ╷ ╷ A1 B2 C3 D4 E5 ╷ ╷ F6 ╷", - " ├─X──┘ │ │ │ │ │", - " └─MegaLongLabel─┘ │ │ │ │", - " └─Y─┘ │ │", - " └─Z─┘" -] -"# - .trim(), - ); -} - -// _return_ _A_ Expression _B_ -// | | | -// +-ExprAtom---+ | -// | | | -// +-ExprSuffix-+ | -// | | -// +-ExprSuffix--------------------+ -fn single_token_example() -> Example { - Example { - // 0 1 2 3 4 5 6 7 - symbols: syms!(_return_, _A_, Expression, _B_), - cursor: 5, - reductions: vec![ - Reduction { - start: 0, - end: 1, - nonterminal: nt("ExprAtom"), - }, - Reduction { - start: 0, - end: 1, - nonterminal: nt("ExprSuffix"), - }, - Reduction { - start: 0, - end: 4, - nonterminal: nt("ExprSuffix"), - }, - ], - } -} - -#[test] -fn single_token_strings() { - let _tls = Tls::test(); - let strings = single_token_example().paint_unstyled(); - expect_debug( - strings, - r#" -[ - " _return_ ╷ _A_ Expression _B_", - " ├─ExprAtom───┤ │", - " ├─ExprSuffix─┘ │", - " └─ExprSuffix────────────────────┘" -] -"# - .trim(), - ); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use test_util::expect_debug; +use tls::Tls; + +use super::{Example, ExampleSymbol, Reduction}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +macro_rules! sym { + (ε) => { ExampleSymbol::Epsilon }; + ($t:ident) => { ExampleSymbol::Symbol(Symbol::Nonterminal(nt(stringify!($t)))) } +} + +macro_rules! syms { + ($($t:tt),*) => { + vec![$(sym!($t)),*] + } +} + +// 01234567890123456789012 +// A1 B2 C3 D4 E5 F6 +// | | | +// +-LongLabel22-+ | +// | | +// +-Label-------------+ +fn long_label_1_example() -> Example { + Example { + symbols: syms!(A1, B2, C3, D4, E5, F6), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 4, + nonterminal: nt("LongLabel22"), + }, + Reduction { + start: 0, + end: 6, + nonterminal: nt("Label"), + }, + ], + } +} + +#[test] +fn long_label_1_positions() { + let _tls = Tls::test(); + let example = long_label_1_example(); + let lengths = example.lengths(); + let positions = example.positions(&lengths); + assert_eq!(positions, vec![0, 5, 9, 13, 16, 19, 22]); +} + +#[test] +fn long_label_1_strings() { + let _tls = Tls::test(); + let strings = long_label_1_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " A1 B2 C3 D4 E5 F6", + " ├─LongLabel22─┘ │", + " └─Label─────────────┘" +] +"#.trim(), + ); +} + +// Example with some empty sequences and +// other edge cases. +// +// 012345678901234567890123456789012345 +// A1 B2 C3 D4 E5 F6 +// | | | | | | | +// +-X-+ | | | | | +// | | | | | | +// +-MegaLongLabel-+ | | | | +// | | | | +// +-Y-+ | | +// | | +// +-Z-+ +fn empty_labels_example() -> Example { + Example { + // 0 1 2 3 4 5 6 7 + symbols: syms!(ε, A1, B2, C3, D4, E5, ε, F6), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 1, + nonterminal: nt("X"), + }, + Reduction { + start: 0, + end: 4, + nonterminal: nt("MegaLongLabel"), + }, + Reduction { + start: 6, + end: 7, + nonterminal: nt("Y"), + }, + Reduction { + start: 7, + end: 8, + nonterminal: nt("Z"), + }, + ], + } +} + +#[test] +fn empty_labels_positions() { + let _tls = Tls::test(); + let example = empty_labels_example(); + let lengths = example.lengths(); + let positions = example.positions(&lengths); + // A1 B2 C3 D4 E5 F6 + assert_eq!(positions, vec![0, 7, 11, 15, 18, 21, 24, 30, 36]); +} + +#[test] +fn empty_labels_strings() { + let _tls = Tls::test(); + let strings = empty_labels_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " ╷ ╷ A1 B2 C3 D4 E5 ╷ ╷ F6 ╷", + " ├─X──┘ │ │ │ │ │", + " └─MegaLongLabel─┘ │ │ │ │", + " └─Y─┘ │ │", + " └─Z─┘" +] +"#.trim(), + ); +} + +// _return_ _A_ Expression _B_ +// | | | +// +-ExprAtom---+ | +// | | | +// +-ExprSuffix-+ | +// | | +// +-ExprSuffix--------------------+ +fn single_token_example() -> Example { + Example { + // 0 1 2 3 4 5 6 7 + symbols: syms!(_return_, _A_, Expression, _B_), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 1, + nonterminal: nt("ExprAtom"), + }, + Reduction { + start: 0, + end: 1, + nonterminal: nt("ExprSuffix"), + }, + Reduction { + start: 0, + end: 4, + nonterminal: nt("ExprSuffix"), + }, + ], + } +} + +#[test] +fn single_token_strings() { + let _tls = Tls::test(); + let strings = single_token_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " _return_ ╷ _A_ Expression _B_", + " ├─ExprAtom───┤ │", + " ├─ExprSuffix─┘ │", + " └─ExprSuffix────────────────────┘" +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop/src/lr1/first/mod.rs b/third_party/rust/lalrpop/src/lr1/first/mod.rs index f5d42d279844..431570dedfe2 100644 --- a/third_party/rust/lalrpop/src/lr1/first/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/first/mod.rs @@ -1,100 +1,97 @@ -//! First set construction and computation. - -use collections::{map, Map}; -use grammar::repr::*; -use lr1::lookahead::{Token, TokenSet}; - -#[cfg(test)] -mod test; - -#[derive(Clone)] -pub struct FirstSets { - map: Map, -} - -impl FirstSets { - pub fn new(grammar: &Grammar) -> FirstSets { - let mut this = FirstSets { map: map() }; - let mut changed = true; - while changed { - changed = false; - for production in grammar.nonterminals.values().flat_map(|p| &p.productions) { - let nt = &production.nonterminal; - let lookahead = this.first0(&production.symbols); - let first_set = this - .map - .entry(nt.clone()) - .or_insert_with(|| TokenSet::new()); - changed |= first_set.union_with(&lookahead); - } - } - this - } - - /// Returns `FIRST(...symbols)`. If `...symbols` may derive - /// epsilon, then this returned set will include EOF. (This is - /// kind of repurposing EOF to serve as a binary flag of sorts.) - pub fn first0<'s, I>(&self, symbols: I) -> TokenSet - where - I: IntoIterator, - { - let mut result = TokenSet::new(); - - for symbol in symbols { - match *symbol { - Symbol::Terminal(ref t) => { - result.insert(Token::Terminal(t.clone())); - return result; - } - - Symbol::Nonterminal(ref nt) => { - let mut empty_prod = false; - match self.map.get(nt) { - None => { - // This should only happen during set - // construction; it corresponds to an - // entry that has not yet been - // built. Otherwise, it would mean a - // terminal with no productions. Either - // way, the resulting first set should be - // empty. - } - Some(set) => { - for lookahead in set.iter() { - match lookahead { - Token::EOF => { - empty_prod = true; - } - Token::Error | Token::Terminal(_) => { - result.insert(lookahead); - } - } - } - } - } - if !empty_prod { - return result; - } - } - } - } - - // control only reaches here if either symbols is empty, or it - // consists of nonterminals all of which may derive epsilon - result.insert(Token::EOF); - result - } - - pub fn first1(&self, symbols: &[Symbol], lookahead: &TokenSet) -> TokenSet { - let mut set = self.first0(symbols); - - // we use EOF as the signal that `symbols` derives epsilon: - let epsilon = set.take_eof(); - - if epsilon { - set.union_with(&lookahead); - } - - set - } -} +//! First set construction and computation. + +use collections::{map, Map}; +use grammar::repr::*; +use lr1::lookahead::{Token, TokenSet}; + +#[cfg(test)] +mod test; + +#[derive(Clone)] +pub struct FirstSets { + map: Map, +} + +impl FirstSets { + pub fn new(grammar: &Grammar) -> FirstSets { + let mut this = FirstSets { map: map() }; + let mut changed = true; + while changed { + changed = false; + for production in grammar.nonterminals.values().flat_map(|p| &p.productions) { + let nt = &production.nonterminal; + let lookahead = this.first0(&production.symbols); + let first_set = this.map + .entry(nt.clone()) + .or_insert_with(|| TokenSet::new()); + changed |= first_set.union_with(&lookahead); + } + } + this + } + + /// Returns `FIRST(...symbols)`. If `...symbols` may derive + /// epsilon, then this returned set will include EOF. (This is + /// kind of repurposing EOF to serve as a binary flag of sorts.) + pub fn first0<'s, I>(&self, symbols: I) -> TokenSet + where + I: IntoIterator, + { + let mut result = TokenSet::new(); + + for symbol in symbols { + match *symbol { + Symbol::Terminal(ref t) => { + result.insert(Token::Terminal(t.clone())); + return result; + } + + Symbol::Nonterminal(ref nt) => { + let mut empty_prod = false; + match self.map.get(nt) { + None => { + // This should only happen during set + // construction; it corresponds to an + // entry that has not yet been + // built. Otherwise, it would mean a + // terminal with no productions. Either + // way, the resulting first set should be + // empty. + } + Some(set) => for lookahead in set.iter() { + match lookahead { + Token::EOF => { + empty_prod = true; + } + Token::Error | Token::Terminal(_) => { + result.insert(lookahead); + } + } + }, + } + if !empty_prod { + return result; + } + } + } + } + + // control only reaches here if either symbols is empty, or it + // consists of nonterminals all of which may derive epsilon + result.insert(Token::EOF); + result + } + + pub fn first1(&self, symbols: &[Symbol], lookahead: &TokenSet) -> TokenSet { + let mut set = self.first0(symbols); + + // we use EOF as the signal that `symbols` derives epsilon: + let epsilon = set.take_eof(); + + if epsilon { + set.union_with(&lookahead); + } + + set + } +} diff --git a/third_party/rust/lalrpop/src/lr1/first/test.rs b/third_party/rust/lalrpop/src/lr1/first/test.rs index 63c7c555b354..e020f13d6893 100644 --- a/third_party/rust/lalrpop/src/lr1/first/test.rs +++ b/third_party/rust/lalrpop/src/lr1/first/test.rs @@ -1,93 +1,93 @@ -use super::FirstSets; -use grammar::repr::*; -use lr1::lookahead::Token::EOF; -use lr1::lookahead::{Token, TokenSet}; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::normalized_grammar; - -pub fn nt(t: &str) -> Symbol { - Symbol::Nonterminal(NonterminalString(Atom::from(t))) -} - -pub fn term(t: &str) -> Symbol { - Symbol::Terminal(TerminalString::quoted(Atom::from(t))) -} - -fn la(t: &str) -> Token { - Token::Terminal(TerminalString::quoted(Atom::from(t))) -} - -fn first0(first: &FirstSets, symbols: &[Symbol]) -> Vec { - let v = first.first0(symbols); - v.iter().collect() -} - -fn first1(first: &FirstSets, symbols: &[Symbol], lookahead: Token) -> Vec { - let v = first.first1(symbols, &TokenSet::from(lookahead)); - v.iter().collect() -} - -#[test] -fn basic_first1() { - let grammar = normalized_grammar( - r#" - grammar; - A = B "C"; - B: Option = { - "D" => Some(1), - => None - }; - X = "E"; // intentionally unreachable -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - - assert_eq!(first1(&first_sets, &[nt("A")], EOF), vec![la("C"), la("D")]); - - assert_eq!(first1(&first_sets, &[nt("B")], EOF), vec![la("D"), EOF]); - - assert_eq!( - first1(&first_sets, &[nt("B"), term("E")], EOF), - vec![la("D"), la("E")] - ); - - assert_eq!( - first1(&first_sets, &[nt("B"), nt("X")], EOF), - vec![la("D"), la("E")] - ); -} - -#[test] -fn basic_first0() { - let grammar = normalized_grammar( - r#" - grammar; - A = B "C"; - B: Option = { - "D" => Some(1), - => None - }; - X = "E"; // intentionally unreachable -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - - assert_eq!(first0(&first_sets, &[nt("A")]), vec![la("C"), la("D")]); - - assert_eq!(first0(&first_sets, &[nt("B")]), vec![la("D"), EOF]); - - assert_eq!( - first0(&first_sets, &[nt("B"), term("E")]), - vec![la("D"), la("E")] - ); - - assert_eq!( - first0(&first_sets, &[nt("B"), nt("X")]), - vec![la("D"), la("E")] - ); - - assert_eq!(first0(&first_sets, &[nt("X")]), vec![la("E")]); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::lookahead::{Token, TokenSet}; +use lr1::lookahead::Token::EOF; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use super::FirstSets; + +pub fn nt(t: &str) -> Symbol { + Symbol::Nonterminal(NonterminalString(Atom::from(t))) +} + +pub fn term(t: &str) -> Symbol { + Symbol::Terminal(TerminalString::quoted(Atom::from(t))) +} + +fn la(t: &str) -> Token { + Token::Terminal(TerminalString::quoted(Atom::from(t))) +} + +fn first0(first: &FirstSets, symbols: &[Symbol]) -> Vec { + let v = first.first0(symbols); + v.iter().collect() +} + +fn first1(first: &FirstSets, symbols: &[Symbol], lookahead: Token) -> Vec { + let v = first.first1(symbols, &TokenSet::from(lookahead)); + v.iter().collect() +} + +#[test] +fn basic_first1() { + let grammar = normalized_grammar( + r#" + grammar; + A = B "C"; + B: Option = { + "D" => Some(1), + => None + }; + X = "E"; // intentionally unreachable +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + + assert_eq!(first1(&first_sets, &[nt("A")], EOF), vec![la("C"), la("D")]); + + assert_eq!(first1(&first_sets, &[nt("B")], EOF), vec![la("D"), EOF]); + + assert_eq!( + first1(&first_sets, &[nt("B"), term("E")], EOF), + vec![la("D"), la("E")] + ); + + assert_eq!( + first1(&first_sets, &[nt("B"), nt("X")], EOF), + vec![la("D"), la("E")] + ); +} + +#[test] +fn basic_first0() { + let grammar = normalized_grammar( + r#" + grammar; + A = B "C"; + B: Option = { + "D" => Some(1), + => None + }; + X = "E"; // intentionally unreachable +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + + assert_eq!(first0(&first_sets, &[nt("A")]), vec![la("C"), la("D")]); + + assert_eq!(first0(&first_sets, &[nt("B")]), vec![la("D"), EOF]); + + assert_eq!( + first0(&first_sets, &[nt("B"), term("E")]), + vec![la("D"), la("E")] + ); + + assert_eq!( + first0(&first_sets, &[nt("B"), nt("X")]), + vec![la("D"), la("E")] + ); + + assert_eq!(first0(&first_sets, &[nt("X")]), vec![la("E")]); +} diff --git a/third_party/rust/lalrpop/src/lr1/interpret.rs b/third_party/rust/lalrpop/src/lr1/interpret.rs index dba660aebc91..89dddb137794 100644 --- a/third_party/rust/lalrpop/src/lr1/interpret.rs +++ b/third_party/rust/lalrpop/src/lr1/interpret.rs @@ -1,206 +1,206 @@ -//! LR(1) interpeter. Just builds up parse trees. Intended for testing. - -use generate::ParseTree; -use grammar::repr::*; -use lr1::core::*; -use lr1::lookahead::*; -use std::fmt::{Debug, Display, Error, Formatter}; -use std::iter::IntoIterator; -use util::Sep; - -pub type InterpretError<'grammar, L> = (&'grammar State<'grammar, L>, Token); - -/// Feed in the given tokens and then EOF, returning the final parse tree that is reduced. -pub fn interpret<'grammar, L>( - states: &'grammar [State<'grammar, L>], - tokens: Vec, -) -> Result> -where - L: LookaheadInterpret, -{ - println!("interpret(tokens={:?})", tokens); - let mut m = Machine::new(states); - m.execute(tokens.into_iter()) -} - -/// Feed in the given tokens and returns the states on the stack. -pub fn interpret_partial<'grammar, TOKENS, L>( - states: &'grammar [State<'grammar, L>], - tokens: TOKENS, -) -> Result, InterpretError<'grammar, L>> -where - TOKENS: IntoIterator, - L: LookaheadInterpret, -{ - let mut m = Machine::new(states); - try!(m.execute_partial(tokens.into_iter())); - Ok(m.state_stack) -} - -struct Machine<'grammar, L: LookaheadInterpret + 'grammar> { - states: &'grammar [State<'grammar, L>], - state_stack: Vec, - data_stack: Vec, -} - -impl<'grammar, L> Machine<'grammar, L> -where - L: LookaheadInterpret, -{ - fn new(states: &'grammar [State<'grammar, L>]) -> Machine<'grammar, L> { - Machine { - states: states, - state_stack: vec![], - data_stack: vec![], - } - } - - fn top_state(&self) -> &'grammar State<'grammar, L> { - let index = self.state_stack.last().unwrap(); - &self.states[index.0] - } - - fn execute_partial( - &mut self, - mut tokens: TOKENS, - ) -> Result<(), InterpretError<'grammar, L>> - where - TOKENS: Iterator, - { - assert!(self.state_stack.is_empty()); - assert!(self.data_stack.is_empty()); - - self.state_stack.push(StateIndex(0)); - - let mut token = tokens.next(); - while let Some(terminal) = token.clone() { - let state = self.top_state(); - - println!("state={:?}", state); - println!("terminal={:?}", terminal); - - // check whether we can shift this token - if let Some(&next_index) = state.shifts.get(&terminal) { - self.data_stack.push(ParseTree::Terminal(terminal.clone())); - self.state_stack.push(next_index); - token = tokens.next(); - } else if let Some(production) = L::reduction(state, &Token::Terminal(terminal.clone())) - { - let more = self.reduce(production); - assert!(more); - } else { - return Err((state, Token::Terminal(terminal.clone()))); - } - } - - Ok(()) - } - - fn execute(&mut self, tokens: TOKENS) -> Result> - where - TOKENS: Iterator, - { - try!(self.execute_partial(tokens)); - - // drain now for EOF - loop { - let state = self.top_state(); - match L::reduction(state, &Token::EOF) { - None => { - return Err((state, Token::EOF)); - } - Some(production) => { - if !self.reduce(production) { - assert_eq!(self.data_stack.len(), 1); - return Ok(self.data_stack.pop().unwrap()); - } - } - } - } - } - - fn reduce(&mut self, production: &Production) -> bool { - println!("reduce={:?}", production); - - let args = production.symbols.len(); - - // remove the top N items from the data stack - let mut popped = vec![]; - for _ in 0..args { - popped.push(self.data_stack.pop().unwrap()); - } - popped.reverse(); - - // remove the top N states - for _ in 0..args { - self.state_stack.pop().unwrap(); - } - - // construct the new, reduced tree and push it on the stack - let tree = ParseTree::Nonterminal(production.nonterminal.clone(), popped); - self.data_stack.push(tree); - - // recover the state and extract the "Goto" action - let receiving_state = self.top_state(); - match receiving_state.gotos.get(&production.nonterminal) { - Some(&goto_state) => { - self.state_stack.push(goto_state); - true // keep going - } - None => { - false // all done - } - } - } -} - -impl Debug for ParseTree { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - Display::fmt(self, fmt) - } -} - -impl Display for ParseTree { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - match *self { - ParseTree::Nonterminal(ref id, ref trees) => { - write!(fmt, "[{}: {}]", id, Sep(", ", trees)) - } - ParseTree::Terminal(ref id) => write!(fmt, "{}", id), - } - } -} - -pub trait LookaheadInterpret: Lookahead { - fn reduction<'grammar>( - state: &State<'grammar, Self>, - token: &Token, - ) -> Option<&'grammar Production>; -} - -impl LookaheadInterpret for Nil { - fn reduction<'grammar>( - state: &State<'grammar, Self>, - _token: &Token, - ) -> Option<&'grammar Production> { - state - .reductions - .iter() - .map(|&(_, production)| production) - .next() - } -} - -impl LookaheadInterpret for TokenSet { - fn reduction<'grammar>( - state: &State<'grammar, Self>, - token: &Token, - ) -> Option<&'grammar Production> { - state - .reductions - .iter() - .filter(|&&(ref tokens, _)| tokens.contains(token)) - .map(|&(_, production)| production) - .next() - } -} +//! LR(1) interpeter. Just builds up parse trees. Intended for testing. + +use lr1::core::*; +use lr1::lookahead::*; +use generate::ParseTree; +use grammar::repr::*; +use std::iter::IntoIterator; +use std::fmt::{Debug, Display, Error, Formatter}; +use util::Sep; + +pub type InterpretError<'grammar, L> = (&'grammar State<'grammar, L>, Token); + +/// Feed in the given tokens and then EOF, returning the final parse tree that is reduced. +pub fn interpret<'grammar, L>( + states: &'grammar [State<'grammar, L>], + tokens: Vec, +) -> Result> +where + L: LookaheadInterpret, +{ + println!("interpret(tokens={:?})", tokens); + let mut m = Machine::new(states); + m.execute(tokens.into_iter()) +} + +/// Feed in the given tokens and returns the states on the stack. +pub fn interpret_partial<'grammar, TOKENS, L>( + states: &'grammar [State<'grammar, L>], + tokens: TOKENS, +) -> Result, InterpretError<'grammar, L>> +where + TOKENS: IntoIterator, + L: LookaheadInterpret, +{ + let mut m = Machine::new(states); + try!(m.execute_partial(tokens.into_iter())); + Ok(m.state_stack) +} + +struct Machine<'grammar, L: LookaheadInterpret + 'grammar> { + states: &'grammar [State<'grammar, L>], + state_stack: Vec, + data_stack: Vec, +} + +impl<'grammar, L> Machine<'grammar, L> +where + L: LookaheadInterpret, +{ + fn new(states: &'grammar [State<'grammar, L>]) -> Machine<'grammar, L> { + Machine { + states: states, + state_stack: vec![], + data_stack: vec![], + } + } + + fn top_state(&self) -> &'grammar State<'grammar, L> { + let index = self.state_stack.last().unwrap(); + &self.states[index.0] + } + + fn execute_partial( + &mut self, + mut tokens: TOKENS, + ) -> Result<(), InterpretError<'grammar, L>> + where + TOKENS: Iterator, + { + assert!(self.state_stack.is_empty()); + assert!(self.data_stack.is_empty()); + + self.state_stack.push(StateIndex(0)); + + let mut token = tokens.next(); + while let Some(terminal) = token.clone() { + let state = self.top_state(); + + println!("state={:?}", state); + println!("terminal={:?}", terminal); + + // check whether we can shift this token + if let Some(&next_index) = state.shifts.get(&terminal) { + self.data_stack.push(ParseTree::Terminal(terminal.clone())); + self.state_stack.push(next_index); + token = tokens.next(); + } else if let Some(production) = L::reduction(state, &Token::Terminal(terminal.clone())) + { + let more = self.reduce(production); + assert!(more); + } else { + return Err((state, Token::Terminal(terminal.clone()))); + } + } + + Ok(()) + } + + fn execute(&mut self, tokens: TOKENS) -> Result> + where + TOKENS: Iterator, + { + try!(self.execute_partial(tokens)); + + // drain now for EOF + loop { + let state = self.top_state(); + match L::reduction(state, &Token::EOF) { + None => { + return Err((state, Token::EOF)); + } + Some(production) => { + if !self.reduce(production) { + assert_eq!(self.data_stack.len(), 1); + return Ok(self.data_stack.pop().unwrap()); + } + } + } + } + } + + fn reduce(&mut self, production: &Production) -> bool { + println!("reduce={:?}", production); + + let args = production.symbols.len(); + + // remove the top N items from the data stack + let mut popped = vec![]; + for _ in 0..args { + popped.push(self.data_stack.pop().unwrap()); + } + popped.reverse(); + + // remove the top N states + for _ in 0..args { + self.state_stack.pop().unwrap(); + } + + // construct the new, reduced tree and push it on the stack + let tree = ParseTree::Nonterminal(production.nonterminal.clone(), popped); + self.data_stack.push(tree); + + // recover the state and extract the "Goto" action + let receiving_state = self.top_state(); + match receiving_state.gotos.get(&production.nonterminal) { + Some(&goto_state) => { + self.state_stack.push(goto_state); + true // keep going + } + None => { + false // all done + } + } + } +} + +impl Debug for ParseTree { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for ParseTree { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + ParseTree::Nonterminal(ref id, ref trees) => { + write!(fmt, "[{}: {}]", id, Sep(", ", trees)) + } + ParseTree::Terminal(ref id) => write!(fmt, "{}", id), + } + } +} + +pub trait LookaheadInterpret: Lookahead { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + token: &Token, + ) -> Option<&'grammar Production>; +} + +impl LookaheadInterpret for Nil { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + _token: &Token, + ) -> Option<&'grammar Production> { + state + .reductions + .iter() + .map(|&(_, production)| production) + .next() + } +} + +impl LookaheadInterpret for TokenSet { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + token: &Token, + ) -> Option<&'grammar Production> { + state + .reductions + .iter() + .filter(|&&(ref tokens, _)| tokens.contains(token)) + .map(|&(_, production)| production) + .next() + } +} diff --git a/third_party/rust/lalrpop/src/lr1/item.rs b/third_party/rust/lalrpop/src/lr1/item.rs index d3f5a12faa99..8b137891791f 100644 --- a/third_party/rust/lalrpop/src/lr1/item.rs +++ b/third_party/rust/lalrpop/src/lr1/item.rs @@ -1 +1 @@ - + diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/README.md b/third_party/rust/lalrpop/src/lr1/lane_table/README.md index 36b3094f3dc4..ab4593ba11b2 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/README.md +++ b/third_party/rust/lalrpop/src/lr1/lane_table/README.md @@ -1,417 +1,417 @@ -This module contains code for LR(1) construction based on a paper by -Pager and Chen, "The Lane Table Method Of Constructing LR(1) Parsers", -published in APPLC '12. Unfortunately, that paper is quite compact -- -only 8 pages! -- which doesn't leave much room for examples and -explanation. This README is my attempt to explain the idea, or at -least how I chose to implement it in LALRPOP, which may or may not be -faithful to the original algorithm. Naturally it also serves as a -guide to the code. - -### First example grammar: G0 - -We will be working through two example grammars. The first I call G0 --- it is a reduced version of what the paper calls G1. It is -interesting because it does not require splitting any states, and so -we wind up with the same number of states as in LR0. Put another way, -it is an LALR(1) grammar. - -#### Grammar G0 - -``` -G0 = X "c" - | Y "d" -X = "e" X - | "e" -Y = "e" Y - | "e" -``` - -#### Step 1: Construct an LR(0) state machine - -We begin by constructing an LR(0) state machine. The LR(0) states for -G0 are as follows: - -``` -S0 = G0 = (*) X "c" - | G0 = (*) Y "d" - | X = (*) "e" X - | X = (*) "e" - | Y = (*) "e" Y - | Y = (*) "e" - -S1 = X = "e" (*) X - | X = "e" (*) - | X = (*) "e" - | X = (*) "e" "X" - | Y = "e" (*) Y - | Y = "e" (*) - | Y = (*) "e" - | Y = (*) "e" Y - -S2 = X = "e" X (*) - -S3 = G0 = X (*) "c" - -S4 = Y = "e" Y (*) - -S5 = G0 = Y (*) "d" - -S6 = G0 = X "c" (*) - -S7 = G0 = Y "d" (*) -``` - -We can also consider *edges* between the states as follows, -with the label being the symbol that is pushed onto the stack: - -``` -S0 -"e"-> S1 -S1 -"e"-> S1 -S1 --X--> S2 -S0 --X--> S3 -S1 --Y--> S4 -S0 --Y--> S5 -S3 -"c"-> S6 -S5 -"d"-> S7 -``` - -Note that state S1 is "inconsistent", in that it has conflicting -actions. - -#### Step 2: Convert LR(0) states into LR(0-1) states. - -The term LR(0-1), but basically the idea is that the lookahead in a -LR(0-1) state can be either a set of terminals (as in LR(1)) or *none* -(as in LR(0)). You can also think of it alternatively as adding a -special "wildcard" symbol `_` to the grammar; in our actual code, we -represent this with `TokenSet::all()`. We will thus denote the -inconsistent state after transformation as follows, where each line -has the "wildcard" lookahead: - -``` -S1 = X = "e" (*) X [_] - | X = "e" (*) [_] - | X = (*) "e" [_] - | X = (*) "e" "X" [_] - | Y = "e" (*) Y [_] - | Y = "e" (*) [_] - | Y = (*) "e" [_] - | Y = (*) "e" Y [_] -``` - -Naturally, the state is still inconsistent. - -#### Step 3: Resolve inconsistencies. - -In the next step, we iterate over all of our LR(0-1) states. In this -example, we will not need to create new states, but in future examples -we will. The iteration thus consists of a queue and some code like -this: - -```rust -let mut queue = Queue::new(); -queue.extend(/* all states */); -while let Some(s) = queue.pop_front() { - if /* s is an inconsistent state */ { - resolve_inconsistencies(s, &mut queue); - } -} -``` - -##### Step 3a: Build the lane table. - -To resolve an inconsistent state, we first construct a **lane -table**. This is done by the code in the `lane` module (the `table` -module maintains the data structure). It works by structing at each -conflict and tracing **backwards**. Let's start with the final table -we will get for the state S1 and then we will work our way back to how -it is constructed. First, let's identify the conflicting actions from -S1 and give them indices: - -``` -S1 = X = (*) "e" [_] // C0 -- shift "e" - | X = "e" (*) [_] // C1 -- reduce `X = "e" (*)` - | X = (*) "e" "X" [_] // C0 -- shift "e" - | X = "e" (*) X [_] - | Y = (*) "e" [_] // C0 -- shift "e" - | Y = "e" (*) [_] // C2 -- reduce `Y = "e" (*)` - | Y = (*) "e" Y [_] // C0 -- shift "e" - | Y = "e" (*) Y [_] -``` - -Several of the items can cause "Confliction Action 0" (C0), which is -to shift an `"e"`. These are all mutually compatible. However, there -are also two incompatible actions: C1 and C2, both reductions. In -fact, we'll find that we look back at state S0, these 'conflicting' -actions all occur with distinct lookahead. The purpose of the lane -table is to summarize that information. The lane table we will up -constructing for these conflicting actions is as follows: - -``` -| State | C0 | C1 | C2 | Successors | -| S0 | | ["c"] | ["d"] | {S1} | -| S1 | ["e"] | [] | [] | {S1} | -``` - -Here the idea is that the lane table summarizes the lookahead -information contributed by each state. Note that for the *shift* the -state S1 already has enough lookahead information: we only shift when -we see the terminal we need next ("e"). But state C1 and C2, the lookahead -actually came from S0, which is a predecessor state. - -As I said earlier, the algorithm for constructing the table works by -looking at the conflicting item and walking backwards. So let's -illustrate with conflict C1. We have the conflicting item `X = "e" -(*)`, and we are basically looking to find its lookahead. We know -that somewhere in the distant past of our state machine there must be -an item like - - Foo = ...a (*) X ...b - -that led us here. We want to find that item, so we can derive the -lookahead from `...b` (whatever symbols come after `X`). - -To do this, we will walk the graph. Our state at any point in time -will be the pair of a state and an item in that state. To start out, -then, we have `(S1, X = "e" (*))`, which is the conflict C1. Because -the `(*)` is not at the "front" of this item, we have to figure out -where this `"e"` came from on our stack, so we look for predecessors -of the state S1 which have an item like `X = (*) e`. This leads us to -S0 and also S1. So we can push two states in our search: `(S0, X = (*) -"e")` and `(S1, X = (*) "e")`. Let's consider each in turn. - -The next state is then `(S0, X = (*) "e")`. Here the `(*)` lies at the -front of the item, so we search **the same state** S0 for items that -would have led to this state via an *epsilon move*. This basically -means an item like `Foo = ... (*) X ...` -- i.e., where the `(*)` -appears directly before the nonterminal `X`. In our case, we will find -`G0 = (*) X "c"`. This is great, because it tells us some lookahead -("c", in particular), and hence we can stop our search. We add to the -table the entry that the state S0 contributes lookahead "c" to the -conflict C1. In some cases, we might find something like `Foo = -... (*) X` instead, where the `X` we are looking for appears at the -end. In that case, we have to restart our search, but looking for the -lookahead for `Foo`. - -The next state in our case is `(S1, X = (*) e)`. Again the `(*)` lies -at the beginning and hence we search for things in the state S1 where -`X` is the next symbol. We find `X = "e" (*) X`. This is not as good -as last time, because there are no symbols appearing after X in this -item, so it does not contribute any lookahead. We therefore can't stop -our search yet, but we push the state `(S1, X = "e" (*) X)` -- this -corresponds to the `Foo` state I mentioned at the end of the last -paragraph, except that in this case `Foo` is the same nonterminal `X` -we started with. - -Looking at `(S1, X = "e" (*) X)`, we again have the `(*)` in the -middle of the item, so we move it left, searching for predecessors -with the item `X = (*) e X`. We will (again) find S0 and S1 have such -items. In the case of S0, we will (again) find the context "c", which -we dutifully add to the table (this has no effect, since it is already -present). In the case of S1, we will (again) wind up at the state -`(S1, X = "e" (*) X)`. Since we've already visited this state, we -stop our search, it will not lead to new context. - -At this point, our table column for C1 is complete. We can repeat the -process for C2, which plays out in an analogous way. - -##### Step 3b: Update the lookahead - -Looking at the lane table we built, we can union the context sets in -any particular column. We see that the context sets for each -conflicting action are pairwise disjoint. Therefore, we can simply -update each reduce action in our state with those lookaheads in mind, -and hence render it consistent: - -``` -S1 = X = (*) "e" [_] - | X = "e" (*) ["c"] // lookahead from C1 - | X = (*) "e" "X" [_] - | X = "e" (*) X [_] - | Y = (*) "e" [_] - | Y = "e" (*) ["d"] // lookahead from C2 - | Y = (*) "e" Y [_] - | Y = "e" (*) Y [_] -``` - -This is of course also what the LALR(1) state would look like (though -it would include context for the other items, though that doesn't play -into the final machine execution). - -At this point we've covered enough to handle the grammar G0. Let's -turn to a more complex grammar, grammar G1, and then we'll come back -to cover the remaining steps. - -### Second example: the grammar G1 - -G1 is a (typo corrected) version of the grammar from the paper. This -grammar is not LALR(1) and hence it is more interesting, because it -requires splitting states. - -#### Grammar G1 - -``` -G1 = "a" X "d" - | "a" Y "c" - | "b" X "c" - | "b" Y "d" -X = "e" X - | "e" -Y = "e" Y - | "e" -``` - -The key point of this grammar is that when we see `... "e" "c"` and we -wish to know whether to reduce to `X` or `Y`, we don't have enough -information. We need to know what is in the `...`, because `"a" "e" -"c"` means we reduce `"e"` to `Y` and `"b" "e" "c"` means we reduce to -`X`. In terms of our *state machine*, this corresponds to *splitting* -the states responsible for X and Y based on earlier context. - -Let's look at a subset of the LR(0) states for G1: - -``` -S0 = G0 = (*) "a" X "d" - | G0 = (*) "a" Y "c" - | G0 = (*) "b" X "c" - | G0 = (*) "b" X "d" - -S1 = G0 = "a" (*) X "d" - | G0 = "a" (*) Y "c" - | X = (*) "e" X - | X = (*) "e" - | Y = (*) "e" Y - | Y = (*) "e" - -S2 = G0 = "b" (*) X "c" - | G0 = "b" (*) Y "d" - | X = (*) "e" X - | X = (*) "e" - | Y = (*) "e" Y - | Y = (*) "e" - -S3 = X = "e" (*) X - | X = "e" (*) // C1 -- can reduce - | X = (*) "e" // C0 -- can shift "e" - | X = (*) "e" "X" // C0 -- can shift "e" - | Y = "e" (*) Y - | Y = "e" (*) // C2 -- can reduce - | Y = (*) "e" // C0 -- can shift "e" - | Y = (*) "e" Y // C0 -- can shift "e" -``` - -Here we can see the problem. The state S3 is inconsistent. But it is -reachable from both S1 and S2. If we come from S1, then we can have (e.g.) -`X "d"`, but if we come from S2, we expect `X "c"`. - -Let's walk through our algorithm again. I'll start with step 3a. - -### Step 3a: Build the lane table. - -The lane table for state S3 will look like this: - -``` -| State | C0 | C1 | C2 | Successors | -| S1 | | ["d"] | ["c"] | {S3} | -| S2 | | ["c"] | ["d"] | {S3} | -| S3 | ["e"] | [] | [] | {S3} | -``` - -Now if we union each column, we see that both C1 and C2 wind up with -lookahead `{"c", "d"}`. This is our problem. We have to isolate things -better. Therefore, step 3b ("update lookahead") does not apply. Instead -we attempt step 3c. - -### Step 3c: Isolate lanes - -This part of the algorithm is only loosely described in the paper, but -I think it works as follows. We will employ a union-find data -structure. With each set, we will record a "context set", which -records for each conflict the set of lookahead tokens (e.g., -`{C1:{"d"}}`). - -A context set tells us how to map the lookahead to an action; -therefire, to be self-consistent, the lookaheads for each conflict -must be mutually disjoint. In other words, `{C1:{"d"}, C2:{"c"}}` is -valid, and says to do C1 if we see a "d" and C2 if we see a "c". But -`{C1:{"d"}, C2:{"d"}}` is not, because there are two actions. - -Initially, each state in the lane table is mapped to itself, and the -conflict set is derived from its column in the lane table: - -``` -S1 = {C1:d, C2:c} -S2 = {C1:c, C2:d} -S3 = {C0:e} -``` - -We designate "beachhead" states as those states in the table that are -not reachable from another state in the table (i.e., using the -successors). In this case, those are the states S1 and S2. We will be -doing a DFS through the table and we want to use those as the starting -points. - -(Question: is there always at least one beachhead state? Seems like -there must be.) - -So we begin by iterating over the beachhead states. - -```rust -for beachhead in beachheads { ... } -``` - -When we visit a state X, we will examine each of its successors Y. We -consider whether the context set for Y can be merged with the context -set for X. So, in our case, X will be S1 to start and Y will be S3. -In this case, the context set can be merged, and hence we union S1, S3 -and wind up with the following union-find state: - -``` -S1,S3 = {C0:e, C1:d, C2:c} -S2 = {C1:c, C2:d} -``` - -(Note that this union is just for the purpose of tracking context; it -doesn't imply that S1 and S3 are the 'same states' or anything like -that.) - -Next we examine the edge S3 -> S3. Here the contexts are already -merged and everything is happy, so we stop. (We already visited S3, -after all.) - -This finishes our first beachhead, so we proceed to the next edge, S2 --> S3. Here we find that we **cannot** union the context: it would -produce an inconsistent state. So what we do is we **clone** S3 to -make a new state, S3', with the initial setup corresponding to the row -for S3 from the lane table: - -``` -S1,S3 = {C0:e, C1:d, C2:c} -S2 = {C1:c, C2:d} -S3' = {C0:e} -``` - -This also involves updating our LR(0-1) state set to have a new state -S3'. All edges from S2 that led to S3 now lead to S3'; the outgoing -edges from S3' remain unchanged. (At least to start.) - -Therefore, the edge `S2 -> S3` is now `S2 -> S3'`. We can now merge -the conflicts: - -``` -S1,S3 = {C0:e, C1:d, C2:c} -S2,S3' = {C0:e, C1:c, C2:d} -``` - -Now we examine the outgoing edge S3' -> S3. We cannot merge these -conflicts, so we search (greedily, I guess) for a clone of S3 where we -can merge the conflicts. We find one in S3', and hence we redirect the -S3 edge to S3' and we are done. (I think the actual search we want is -to make first look for a clone of S3 that is using literally the same -context as us (i.e., same root node), as in this case. If that is not -found, *then* we search for one with a mergable context. If *that* -fails, then we clone a new state.) - -The final state thus has two copies of S3, one for the path from S1, -and one for the path from S2, which gives us enough context to -proceed. +This module contains code for LR(1) construction based on a paper by +Pager and Chen, "The Lane Table Method Of Constructing LR(1) Parsers", +published in APPLC '12. Unfortunately, that paper is quite compact -- +only 8 pages! -- which doesn't leave much room for examples and +explanation. This README is my attempt to explain the idea, or at +least how I chose to implement it in LALRPOP, which may or may not be +faithful to the original algorithm. Naturally it also serves as a +guide to the code. + +### First example grammar: G0 + +We will be working through two example grammars. The first I call G0 +-- it is a reduced version of what the paper calls G1. It is +interesting because it does not require splitting any states, and so +we wind up with the same number of states as in LR0. Put another way, +it is an LALR(1) grammar. + +#### Grammar G0 + +``` +G0 = X "c" + | Y "d" +X = "e" X + | "e" +Y = "e" Y + | "e" +``` + +#### Step 1: Construct an LR(0) state machine + +We begin by constructing an LR(0) state machine. The LR(0) states for +G0 are as follows: + +``` +S0 = G0 = (*) X "c" + | G0 = (*) Y "d" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S1 = X = "e" (*) X + | X = "e" (*) + | X = (*) "e" + | X = (*) "e" "X" + | Y = "e" (*) Y + | Y = "e" (*) + | Y = (*) "e" + | Y = (*) "e" Y + +S2 = X = "e" X (*) + +S3 = G0 = X (*) "c" + +S4 = Y = "e" Y (*) + +S5 = G0 = Y (*) "d" + +S6 = G0 = X "c" (*) + +S7 = G0 = Y "d" (*) +``` + +We can also consider *edges* between the states as follows, +with the label being the symbol that is pushed onto the stack: + +``` +S0 -"e"-> S1 +S1 -"e"-> S1 +S1 --X--> S2 +S0 --X--> S3 +S1 --Y--> S4 +S0 --Y--> S5 +S3 -"c"-> S6 +S5 -"d"-> S7 +``` + +Note that state S1 is "inconsistent", in that it has conflicting +actions. + +#### Step 2: Convert LR(0) states into LR(0-1) states. + +The term LR(0-1), but basically the idea is that the lookahead in a +LR(0-1) state can be either a set of terminals (as in LR(1)) or *none* +(as in LR(0)). You can also think of it alternatively as adding a +special "wildcard" symbol `_` to the grammar; in our actual code, we +represent this with `TokenSet::all()`. We will thus denote the +inconsistent state after transformation as follows, where each line +has the "wildcard" lookahead: + +``` +S1 = X = "e" (*) X [_] + | X = "e" (*) [_] + | X = (*) "e" [_] + | X = (*) "e" "X" [_] + | Y = "e" (*) Y [_] + | Y = "e" (*) [_] + | Y = (*) "e" [_] + | Y = (*) "e" Y [_] +``` + +Naturally, the state is still inconsistent. + +#### Step 3: Resolve inconsistencies. + +In the next step, we iterate over all of our LR(0-1) states. In this +example, we will not need to create new states, but in future examples +we will. The iteration thus consists of a queue and some code like +this: + +```rust +let mut queue = Queue::new(); +queue.extend(/* all states */); +while let Some(s) = queue.pop_front() { + if /* s is an inconsistent state */ { + resolve_inconsistencies(s, &mut queue); + } +} +``` + +##### Step 3a: Build the lane table. + +To resolve an inconsistent state, we first construct a **lane +table**. This is done by the code in the `lane` module (the `table` +module maintains the data structure). It works by structing at each +conflict and tracing **backwards**. Let's start with the final table +we will get for the state S1 and then we will work our way back to how +it is constructed. First, let's identify the conflicting actions from +S1 and give them indices: + +``` +S1 = X = (*) "e" [_] // C0 -- shift "e" + | X = "e" (*) [_] // C1 -- reduce `X = "e" (*)` + | X = (*) "e" "X" [_] // C0 -- shift "e" + | X = "e" (*) X [_] + | Y = (*) "e" [_] // C0 -- shift "e" + | Y = "e" (*) [_] // C2 -- reduce `Y = "e" (*)` + | Y = (*) "e" Y [_] // C0 -- shift "e" + | Y = "e" (*) Y [_] +``` + +Several of the items can cause "Confliction Action 0" (C0), which is +to shift an `"e"`. These are all mutually compatible. However, there +are also two incompatible actions: C1 and C2, both reductions. In +fact, we'll find that we look back at state S0, these 'conflicting' +actions all occur with distinct lookahead. The purpose of the lane +table is to summarize that information. The lane table we will up +constructing for these conflicting actions is as follows: + +``` +| State | C0 | C1 | C2 | Successors | +| S0 | | ["c"] | ["d"] | {S1} | +| S1 | ["e"] | [] | [] | {S1} | +``` + +Here the idea is that the lane table summarizes the lookahead +information contributed by each state. Note that for the *shift* the +state S1 already has enough lookahead information: we only shift when +we see the terminal we need next ("e"). But state C1 and C2, the lookahead +actually came from S0, which is a predecessor state. + +As I said earlier, the algorithm for constructing the table works by +looking at the conflicting item and walking backwards. So let's +illustrate with conflict C1. We have the conflicting item `X = "e" +(*)`, and we are basically looking to find its lookahead. We know +that somewhere in the distant past of our state machine there must be +an item like + + Foo = ...a (*) X ...b + +that led us here. We want to find that item, so we can derive the +lookahead from `...b` (whatever symbols come after `X`). + +To do this, we will walk the graph. Our state at any point in time +will be the pair of a state and an item in that state. To start out, +then, we have `(S1, X = "e" (*))`, which is the conflict C1. Because +the `(*)` is not at the "front" of this item, we have to figure out +where this `"e"` came from on our stack, so we look for predecessors +of the state S1 which have an item like `X = (*) e`. This leads us to +S0 and also S1. So we can push two states in our search: `(S0, X = (*) +"e")` and `(S1, X = (*) "e")`. Let's consider each in turn. + +The next state is then `(S0, X = (*) "e")`. Here the `(*)` lies at the +front of the item, so we search **the same state** S0 for items that +would have led to this state via an *epsilon move*. This basically +means an item like `Foo = ... (*) X ...` -- i.e., where the `(*)` +appears directly before the nonterminal `X`. In our case, we will find +`G0 = (*) X "c"`. This is great, because it tells us some lookahead +("c", in particular), and hence we can stop our search. We add to the +table the entry that the state S0 contributes lookahead "c" to the +conflict C1. In some cases, we might find something like `Foo = +... (*) X` instead, where the `X` we are looking for appears at the +end. In that case, we have to restart our search, but looking for the +lookahead for `Foo`. + +The next state in our case is `(S1, X = (*) e)`. Again the `(*)` lies +at the beginning and hence we search for things in the state S1 where +`X` is the next symbol. We find `X = "e" (*) X`. This is not as good +as last time, because there are no symbols appearing after X in this +item, so it does not contribute any lookahead. We therefore can't stop +our search yet, but we push the state `(S1, X = "e" (*) X)` -- this +corresponds to the `Foo` state I mentioned at the end of the last +paragraph, except that in this case `Foo` is the same nonterminal `X` +we started with. + +Looking at `(S1, X = "e" (*) X)`, we again have the `(*)` in the +middle of the item, so we move it left, searching for predecessors +with the item `X = (*) e X`. We will (again) find S0 and S1 have such +items. In the case of S0, we will (again) find the context "c", which +we dutifully add to the table (this has no effect, since it is already +present). In the case of S1, we will (again) wind up at the state +`(S1, X = "e" (*) X)`. Since we've already visited this state, we +stop our search, it will not lead to new context. + +At this point, our table column for C1 is complete. We can repeat the +process for C2, which plays out in an analogous way. + +##### Step 3b: Update the lookahead + +Looking at the lane table we built, we can union the context sets in +any particular column. We see that the context sets for each +conflicting action are pairwise disjoint. Therefore, we can simply +update each reduce action in our state with those lookaheads in mind, +and hence render it consistent: + +``` +S1 = X = (*) "e" [_] + | X = "e" (*) ["c"] // lookahead from C1 + | X = (*) "e" "X" [_] + | X = "e" (*) X [_] + | Y = (*) "e" [_] + | Y = "e" (*) ["d"] // lookahead from C2 + | Y = (*) "e" Y [_] + | Y = "e" (*) Y [_] +``` + +This is of course also what the LALR(1) state would look like (though +it would include context for the other items, though that doesn't play +into the final machine execution). + +At this point we've covered enough to handle the grammar G0. Let's +turn to a more complex grammar, grammar G1, and then we'll come back +to cover the remaining steps. + +### Second example: the grammar G1 + +G1 is a (typo corrected) version of the grammar from the paper. This +grammar is not LALR(1) and hence it is more interesting, because it +requires splitting states. + +#### Grammar G1 + +``` +G1 = "a" X "d" + | "a" Y "c" + | "b" X "c" + | "b" Y "d" +X = "e" X + | "e" +Y = "e" Y + | "e" +``` + +The key point of this grammar is that when we see `... "e" "c"` and we +wish to know whether to reduce to `X` or `Y`, we don't have enough +information. We need to know what is in the `...`, because `"a" "e" +"c"` means we reduce `"e"` to `Y` and `"b" "e" "c"` means we reduce to +`X`. In terms of our *state machine*, this corresponds to *splitting* +the states responsible for X and Y based on earlier context. + +Let's look at a subset of the LR(0) states for G1: + +``` +S0 = G0 = (*) "a" X "d" + | G0 = (*) "a" Y "c" + | G0 = (*) "b" X "c" + | G0 = (*) "b" X "d" + +S1 = G0 = "a" (*) X "d" + | G0 = "a" (*) Y "c" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S2 = G0 = "b" (*) X "c" + | G0 = "b" (*) Y "d" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S3 = X = "e" (*) X + | X = "e" (*) // C1 -- can reduce + | X = (*) "e" // C0 -- can shift "e" + | X = (*) "e" "X" // C0 -- can shift "e" + | Y = "e" (*) Y + | Y = "e" (*) // C2 -- can reduce + | Y = (*) "e" // C0 -- can shift "e" + | Y = (*) "e" Y // C0 -- can shift "e" +``` + +Here we can see the problem. The state S3 is inconsistent. But it is +reachable from both S1 and S2. If we come from S1, then we can have (e.g.) +`X "d"`, but if we come from S2, we expect `X "c"`. + +Let's walk through our algorithm again. I'll start with step 3a. + +### Step 3a: Build the lane table. + +The lane table for state S3 will look like this: + +``` +| State | C0 | C1 | C2 | Successors | +| S1 | | ["d"] | ["c"] | {S3} | +| S2 | | ["c"] | ["d"] | {S3} | +| S3 | ["e"] | [] | [] | {S3} | +``` + +Now if we union each column, we see that both C1 and C2 wind up with +lookahead `{"c", "d"}`. This is our problem. We have to isolate things +better. Therefore, step 3b ("update lookahead") does not apply. Instead +we attempt step 3c. + +### Step 3c: Isolate lanes + +This part of the algorithm is only loosely described in the paper, but +I think it works as follows. We will employ a union-find data +structure. With each set, we will record a "context set", which +records for each conflict the set of lookahead tokens (e.g., +`{C1:{"d"}}`). + +A context set tells us how to map the lookahead to an action; +therefire, to be self-consistent, the lookaheads for each conflict +must be mutually disjoint. In other words, `{C1:{"d"}, C2:{"c"}}` is +valid, and says to do C1 if we see a "d" and C2 if we see a "c". But +`{C1:{"d"}, C2:{"d"}}` is not, because there are two actions. + +Initially, each state in the lane table is mapped to itself, and the +conflict set is derived from its column in the lane table: + +``` +S1 = {C1:d, C2:c} +S2 = {C1:c, C2:d} +S3 = {C0:e} +``` + +We designate "beachhead" states as those states in the table that are +not reachable from another state in the table (i.e., using the +successors). In this case, those are the states S1 and S2. We will be +doing a DFS through the table and we want to use those as the starting +points. + +(Question: is there always at least one beachhead state? Seems like +there must be.) + +So we begin by iterating over the beachhead states. + +```rust +for beachhead in beachheads { ... } +``` + +When we visit a state X, we will examine each of its successors Y. We +consider whether the context set for Y can be merged with the context +set for X. So, in our case, X will be S1 to start and Y will be S3. +In this case, the context set can be merged, and hence we union S1, S3 +and wind up with the following union-find state: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2 = {C1:c, C2:d} +``` + +(Note that this union is just for the purpose of tracking context; it +doesn't imply that S1 and S3 are the 'same states' or anything like +that.) + +Next we examine the edge S3 -> S3. Here the contexts are already +merged and everything is happy, so we stop. (We already visited S3, +after all.) + +This finishes our first beachhead, so we proceed to the next edge, S2 +-> S3. Here we find that we **cannot** union the context: it would +produce an inconsistent state. So what we do is we **clone** S3 to +make a new state, S3', with the initial setup corresponding to the row +for S3 from the lane table: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2 = {C1:c, C2:d} +S3' = {C0:e} +``` + +This also involves updating our LR(0-1) state set to have a new state +S3'. All edges from S2 that led to S3 now lead to S3'; the outgoing +edges from S3' remain unchanged. (At least to start.) + +Therefore, the edge `S2 -> S3` is now `S2 -> S3'`. We can now merge +the conflicts: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2,S3' = {C0:e, C1:c, C2:d} +``` + +Now we examine the outgoing edge S3' -> S3. We cannot merge these +conflicts, so we search (greedily, I guess) for a clone of S3 where we +can merge the conflicts. We find one in S3', and hence we redirect the +S3 edge to S3' and we are done. (I think the actual search we want is +to make first look for a clone of S3 that is using literally the same +context as us (i.e., same root node), as in this case. If that is not +found, *then* we search for one with a mergable context. If *that* +fails, then we clone a new state.) + +The final state thus has two copies of S3, one for the path from S1, +and one for the path from S2, which gives us enough context to +proceed. diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/construct/merge.rs b/third_party/rust/lalrpop/src/lr1/lane_table/construct/merge.rs index e48f51d6c7a7..56752885fb4f 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/construct/merge.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/construct/merge.rs @@ -1,219 +1,218 @@ -use collections::{Map, Multimap, Set}; -use ena::unify::InPlaceUnificationTable; -use lr1::core::{Action, LR1State, StateIndex}; -use lr1::lane_table::construct::state_set::StateSet; -use lr1::lane_table::table::context_set::ContextSet; -use lr1::lane_table::table::LaneTable; - -/// The "merge" phase of the algorithm is described in "Step 3c" of -/// [the README][r]. It consists of walking through the various -/// states in the lane table and merging them into sets of states that -/// have compatible context sets; if we encounter a state S that has a -/// successor T but where the context set of S is not compatible with -/// T, then we will clone T into a new T2 (and hopefully the context -/// set of S will be compatible with the reduced context of T2). -/// -/// [r]: ../README.md -pub struct Merge<'m, 'grammar: 'm> { - table: &'m LaneTable<'grammar>, - states: &'m mut Vec>, - visited: Set, - original_indices: Map, - clones: Multimap>, - target_states: Vec, - context_sets: ContextSets<'m>, -} - -impl<'m, 'grammar> Merge<'m, 'grammar> { - pub fn new( - table: &'m LaneTable<'grammar>, - unify: &'m mut InPlaceUnificationTable, - states: &'m mut Vec>, - state_sets: &'m mut Map, - inconsistent_state: StateIndex, - ) -> Self { - Merge { - table: table, - states: states, - visited: Set::new(), - original_indices: Map::new(), - clones: Multimap::new(), - target_states: vec![inconsistent_state], - context_sets: ContextSets { - unify: unify, - state_sets: state_sets, - }, - } - } - - pub fn start(&mut self, beachhead_state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { - debug!("Merge::start(beachhead_state={:?})", beachhead_state); - - // Since we always start walks from beachhead states, and they - // are not reachable from anyone else, this state should not - // have been unioned with anything else yet. - self.walk(beachhead_state) - } - - pub fn patch_target_starts(mut self, actions: &Set>) { - debug!("Merge::patch_target_starts(actions={:?})", actions); - - for &target_state in &self.target_states { - debug!( - "Merge::patch_target_starts: target_state={:?}", - target_state - ); - let context_set = self.context_sets.context_set(target_state); - debug!("Merge::patch_target_starts: context_set={:?}", context_set); - context_set.apply(&mut self.states[target_state.0], actions); - } - } - - /// If `state` is a cloned state, find its original index. Useful - /// for indexing into the lane table and so forth. - fn original_index(&self, state: StateIndex) -> StateIndex { - *self.original_indices.get(&state).unwrap_or(&state) - } - - fn successors(&self, state: StateIndex) -> Option<&'m Set> { - self.table.successors(self.original_index(state)) - } - - fn walk(&mut self, state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { - debug!("Merge::walk(state={:?})", state); - - if !self.visited.insert(state) { - debug!("Merge::walk: visited already"); - return Ok(()); - } - - for &successor in self.successors(state).iter().flat_map(|&s| s) { - debug!("Merge::walk: state={:?} successor={:?}", state, successor); - - if self.context_sets.union(state, successor) { - debug!( - "Merge::walk: successful union, context-set = {:?}", - self.context_sets.context_set(state) - ); - self.walk(successor)?; - } else { - // search for an existing clone with which we can merge - debug!("Merge::walk: union failed, seek existing clone"); - let existing_clone = { - let context_sets = &mut self.context_sets; - self.clones - .get(&successor) - .into_iter() - .flat_map(|clones| clones) // get() returns an Option - .cloned() - .filter(|&successor1| context_sets.union(state, successor1)) - .next() - }; - - if let Some(successor1) = existing_clone { - debug!("Merge::walk: found existing clone {:?}", successor1); - self.patch_links(state, successor, successor1); - self.walk(successor1)?; - } else { - // if we don't find one, we have to make a new clone - debug!("Merge::walk: creating new clone of {:?}", successor); - let successor1 = self.clone(successor); - if self.context_sets.union(state, successor1) { - self.patch_links(state, successor, successor1); - self.walk(successor1)?; - } else { - debug!( - "Merge::walk: failed to union {:?} with {:?}", - state, successor1 - ); - debug!( - "Merge::walk: state context = {:?}", - self.context_sets.context_set(state) - ); - debug!( - "Merge::walk: successor context = {:?}", - self.context_sets.context_set(successor1) - ); - - return Err((self.original_index(state), self.original_index(successor1))); - } - } - } - } - - Ok(()) - } - - fn clone(&mut self, state: StateIndex) -> StateIndex { - // create a new state with same contents as the old one - let new_index = StateIndex(self.states.len()); - let new_state = self.states[state.0].clone(); - self.states.push(new_state); - - // track the original index and clones - let original_index = self.original_index(state); - self.original_indices.insert(new_index, original_index); - self.clones.push(original_index, new_index); - - // create a new unify key for this new state - let context_set = self.table.context_set(original_index).unwrap(); - self.context_sets.new_state(new_index, context_set); - - // keep track of the clones of the target state - if original_index == self.target_states[0] { - self.target_states.push(new_index); - } - - debug!("Merge::clone: cloned {:?} to {:?}", state, new_index); - new_index - } - - fn patch_links( - &mut self, - predecessor: StateIndex, - original_successor: StateIndex, - cloned_successor: StateIndex, - ) { - let replace = |target_state: &mut StateIndex| { - if *target_state == original_successor { - *target_state = cloned_successor; - } - }; - - let state = &mut self.states[predecessor.0]; - for (_, target_state) in &mut state.shifts { - replace(target_state); - } - for (_, target_state) in &mut state.gotos { - replace(target_state); - } - } -} - -struct ContextSets<'m> { - state_sets: &'m mut Map, - unify: &'m mut InPlaceUnificationTable, -} - -impl<'m> ContextSets<'m> { - fn context_set(&mut self, state: StateIndex) -> ContextSet { - let state_set = self.state_sets[&state]; - self.unify.probe_value(state_set) - } - - fn union(&mut self, source: StateIndex, target: StateIndex) -> bool { - let set1 = self.state_sets[&source]; - let set2 = self.state_sets[&target]; - let result = self.unify.unify_var_var(set1, set2).is_ok(); - debug!( - "ContextSets::union: source={:?} target={:?} result={:?}", - source, target, result - ); - result - } - - fn new_state(&mut self, new_index: StateIndex, context_set: ContextSet) { - let state_set = self.unify.new_key(context_set); - self.state_sets.insert(new_index, state_set); - } -} +use collections::{Map, Multimap, Set}; +use ena::unify::InPlaceUnificationTable; +use lr1::core::{Action, LR1State, StateIndex}; +use lr1::lane_table::construct::state_set::StateSet; +use lr1::lane_table::table::LaneTable; +use lr1::lane_table::table::context_set::ContextSet; + +/// The "merge" phase of the algorithm is described in "Step 3c" of +/// [the README][r]. It consists of walking through the various +/// states in the lane table and merging them into sets of states that +/// have compatible context sets; if we encounter a state S that has a +/// successor T but where the context set of S is not compatible with +/// T, then we will clone T into a new T2 (and hopefully the context +/// set of S will be compatible with the reduced context of T2). +/// +/// [r]: ../README.md +pub struct Merge<'m, 'grammar: 'm> { + table: &'m LaneTable<'grammar>, + states: &'m mut Vec>, + visited: Set, + original_indices: Map, + clones: Multimap>, + target_states: Vec, + context_sets: ContextSets<'m>, +} + +impl<'m, 'grammar> Merge<'m, 'grammar> { + pub fn new( + table: &'m LaneTable<'grammar>, + unify: &'m mut InPlaceUnificationTable, + states: &'m mut Vec>, + state_sets: &'m mut Map, + inconsistent_state: StateIndex, + ) -> Self { + Merge { + table: table, + states: states, + visited: Set::new(), + original_indices: Map::new(), + clones: Multimap::new(), + target_states: vec![inconsistent_state], + context_sets: ContextSets { + unify: unify, + state_sets: state_sets, + }, + } + } + + pub fn start(&mut self, beachhead_state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { + debug!("Merge::start(beachhead_state={:?})", beachhead_state); + + // Since we always start walks from beachhead states, and they + // are not reachable from anyone else, this state should not + // have been unioned with anything else yet. + self.walk(beachhead_state) + } + + pub fn patch_target_starts(mut self, actions: &Set>) { + debug!("Merge::patch_target_starts(actions={:?})", actions); + + for &target_state in &self.target_states { + debug!( + "Merge::patch_target_starts: target_state={:?}", + target_state + ); + let context_set = self.context_sets.context_set(target_state); + debug!("Merge::patch_target_starts: context_set={:?}", context_set); + context_set.apply(&mut self.states[target_state.0], actions); + } + } + + /// If `state` is a cloned state, find its original index. Useful + /// for indexing into the lane table and so forth. + fn original_index(&self, state: StateIndex) -> StateIndex { + *self.original_indices.get(&state).unwrap_or(&state) + } + + fn successors(&self, state: StateIndex) -> Option<&'m Set> { + self.table.successors(self.original_index(state)) + } + + fn walk(&mut self, state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { + debug!("Merge::walk(state={:?})", state); + + if !self.visited.insert(state) { + debug!("Merge::walk: visited already"); + return Ok(()); + } + + for &successor in self.successors(state).iter().flat_map(|&s| s) { + debug!("Merge::walk: state={:?} successor={:?}", state, successor); + + if self.context_sets.union(state, successor) { + debug!( + "Merge::walk: successful union, context-set = {:?}", + self.context_sets.context_set(state) + ); + self.walk(successor)?; + } else { + // search for an existing clone with which we can merge + debug!("Merge::walk: union failed, seek existing clone"); + let existing_clone = { + let context_sets = &mut self.context_sets; + self.clones.get(&successor) + .into_iter() + .flat_map(|clones| clones) // get() returns an Option + .cloned() + .filter(|&successor1| context_sets.union(state, successor1)) + .next() + }; + + if let Some(successor1) = existing_clone { + debug!("Merge::walk: found existing clone {:?}", successor1); + self.patch_links(state, successor, successor1); + self.walk(successor1)?; + } else { + // if we don't find one, we have to make a new clone + debug!("Merge::walk: creating new clone of {:?}", successor); + let successor1 = self.clone(successor); + if self.context_sets.union(state, successor1) { + self.patch_links(state, successor, successor1); + self.walk(successor1)?; + } else { + debug!( + "Merge::walk: failed to union {:?} with {:?}", + state, successor1 + ); + debug!( + "Merge::walk: state context = {:?}", + self.context_sets.context_set(state) + ); + debug!( + "Merge::walk: successor context = {:?}", + self.context_sets.context_set(successor1) + ); + + return Err((self.original_index(state), self.original_index(successor1))); + } + } + } + } + + Ok(()) + } + + fn clone(&mut self, state: StateIndex) -> StateIndex { + // create a new state with same contents as the old one + let new_index = StateIndex(self.states.len()); + let new_state = self.states[state.0].clone(); + self.states.push(new_state); + + // track the original index and clones + let original_index = self.original_index(state); + self.original_indices.insert(new_index, original_index); + self.clones.push(original_index, new_index); + + // create a new unify key for this new state + let context_set = self.table.context_set(original_index).unwrap(); + self.context_sets.new_state(new_index, context_set); + + // keep track of the clones of the target state + if original_index == self.target_states[0] { + self.target_states.push(new_index); + } + + debug!("Merge::clone: cloned {:?} to {:?}", state, new_index); + new_index + } + + fn patch_links( + &mut self, + predecessor: StateIndex, + original_successor: StateIndex, + cloned_successor: StateIndex, + ) { + let replace = |target_state: &mut StateIndex| { + if *target_state == original_successor { + *target_state = cloned_successor; + } + }; + + let state = &mut self.states[predecessor.0]; + for (_, target_state) in &mut state.shifts { + replace(target_state); + } + for (_, target_state) in &mut state.gotos { + replace(target_state); + } + } +} + +struct ContextSets<'m> { + state_sets: &'m mut Map, + unify: &'m mut InPlaceUnificationTable, +} + +impl<'m> ContextSets<'m> { + fn context_set(&mut self, state: StateIndex) -> ContextSet { + let state_set = self.state_sets[&state]; + self.unify.probe_value(state_set) + } + + fn union(&mut self, source: StateIndex, target: StateIndex) -> bool { + let set1 = self.state_sets[&source]; + let set2 = self.state_sets[&target]; + let result = self.unify.unify_var_var(set1, set2).is_ok(); + debug!( + "ContextSets::union: source={:?} target={:?} result={:?}", + source, target, result + ); + result + } + + fn new_state(&mut self, new_index: StateIndex, context_set: ContextSet) { + let state_set = self.unify.new_key(context_set); + self.state_sets.insert(new_index, state_set); + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/construct/mod.rs b/third_party/rust/lalrpop/src/lr1/lane_table/construct/mod.rs index ca5cd7a2eaa8..34ff3d88b373 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/construct/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/construct/mod.rs @@ -1,266 +1,264 @@ -//! - -use collections::{Map, Set}; -use ena::unify::InPlaceUnificationTable; -use grammar::repr::*; -use lr1::build; -use lr1::core::*; -use lr1::first::FirstSets; -use lr1::lane_table::lane::LaneTracer; -use lr1::lane_table::table::context_set::OverlappingLookahead; -use lr1::lane_table::table::{ConflictIndex, LaneTable}; -use lr1::lookahead::{Lookahead, TokenSet}; -use lr1::state_graph::StateGraph; -use std::rc::Rc; - -mod merge; -use self::merge::Merge; - -mod state_set; -use self::state_set::StateSet; - -pub struct LaneTableConstruct<'grammar> { - grammar: &'grammar Grammar, - first_sets: FirstSets, - start_nt: NonterminalString, -} - -impl<'grammar> LaneTableConstruct<'grammar> { - pub fn new(grammar: &'grammar Grammar, start_nt: NonterminalString) -> Self { - let first_sets = FirstSets::new(grammar); - LaneTableConstruct { - grammar: grammar, - start_nt: start_nt, - first_sets: first_sets, - } - } - - pub fn construct(self) -> Result>, LR1TableConstructionError<'grammar>> { - let states = { - match build::build_lr0_states(self.grammar, self.start_nt.clone()) { - Ok(states) => { - // In this case, the grammar is actually - // LR(0). This is very rare -- it means that the - // grammar does not need lookahead to execute. In - // principle, we could stop here, except that if - // we do so, then the lookahead values that we get - // are very broad. - // - // Broad lookahead values will cause "eager" - // reduce at runtime -- i.e., if there is some - // scenario where the lookahead tells you we are - // in error, but we would have to reduce a few - // states before we see it. This, in turn, can - // cause infinite loops around error recovery - // (#240). - // - // Since we want to behave as a LR(1) parser - // would, we'll just go ahead and run the - // algorithm. - states - } - Err(TableConstructionError { - states, - conflicts: _, - }) => states, - } - }; - - // Convert the LR(0) states into LR(0-1) states. - let mut states = self.promote_lr0_states(states); - - // For each inconsistent state, apply the lane-table algorithm to - // resolve it. - for i in 0.. { - if i >= states.len() { - break; - } - - match self.resolve_inconsistencies(&mut states, StateIndex(i)) { - Ok(()) => {} - Err(_) => { - // We failed because of irreconcilable conflicts - // somewhere. Just compute the conflicts from the final set of - // states. - debug!( - "construct: failed to resolve inconsistencies in state {:#?}", - states[i] - ); - let conflicts: Vec> = states - .iter() - .flat_map(|s| Lookahead::conflicts(&s)) - .collect(); - return Err(TableConstructionError { - states: states, - conflicts: conflicts, - }); - } - } - } - - Ok(states) - } - - /// Given a set of LR0 states, returns LR1 states where the lookahead - /// is always `TokenSet::all()`. We refer to these states as LR(0-1) - /// states in the README. - fn promote_lr0_states(&self, lr0: Vec>) -> Vec> { - let all = TokenSet::all(); - debug!("promote_lr0_states: all={:?}", all); - lr0.into_iter() - .map(|s| { - let items = s - .items - .vec - .iter() - .map(|item| Item { - production: item.production, - index: item.index, - lookahead: all.clone(), - }) - .collect(); - let reductions = s - .reductions - .into_iter() - .map(|(_, p)| (all.clone(), p)) - .collect(); - State { - index: s.index, - items: Items { - vec: Rc::new(items), - }, - shifts: s.shifts, - reductions: reductions, - gotos: s.gotos, - } - }) - .collect() - } - - fn resolve_inconsistencies( - &self, - states: &mut Vec>, - inconsistent_state: StateIndex, - ) -> Result<(), StateIndex> { - debug!( - "resolve_inconsistencies(inconsistent_state={:?}/{:#?}", - inconsistent_state, states[inconsistent_state.0] - ); - - let mut actions = super::conflicting_actions(&states[inconsistent_state.0]); - if actions.is_empty() { - // This can mean one of two things: only shifts, or a - // single reduction. We have to be careful about states - // with a single reduction: even though such a state is - // not inconsistent (there is only one possible course of - // action), we still want to run the lane table algorithm, - // because otherwise we get states with "complete" - // lookahead, which messes with error recovery. - // - // In particular, if there is too much lookahead, we will - // reduce even when it is inappropriate to do so. - actions = states[inconsistent_state.0] - .reductions - .iter() - .map(|&(_, prod)| Action::Reduce(prod)) - .collect(); - if actions.is_empty() { - return Ok(()); - } - } - - debug!("resolve_inconsistencies: conflicting_actions={:?}", actions); - - let table = self.build_lane_table(states, inconsistent_state, &actions); - - // Consider first the "LALR" case, where the lookaheads for each - // action are completely disjoint. - if self.attempt_lalr(&mut states[inconsistent_state.0], &table, &actions) { - return Ok(()); - } - - // Construct the initial states; each state will map to a - // context-set derived from its row in the lane-table. This is - // fallible, because a state may be internally inconstent. - // - // (To handle unification, we also map each state to a - // `StateSet` that is its entry in the `ena` table.) - let rows = table.rows()?; - let mut unify = InPlaceUnificationTable::::new(); - let mut state_sets = Map::new(); - for (&state_index, context_set) in &rows { - let state_set = unify.new_key(context_set.clone()); - state_sets.insert(state_index, state_set); - debug!( - "resolve_inconsistencies: state_index={:?}, state_set={:?}", - state_index, state_set - ); - } - - // Now merge state-sets, cloning states where needed. - let mut merge = Merge::new( - &table, - &mut unify, - states, - &mut state_sets, - inconsistent_state, - ); - let beachhead_states = table.beachhead_states(); - for beachhead_state in beachhead_states { - match merge.start(beachhead_state) { - Ok(()) => {} - Err((source, _)) => { - debug!( - "resolve_inconsistencies: failed to merge, source={:?}", - source - ); - return Err(source); - } - } - } - merge.patch_target_starts(&actions); - - Ok(()) - } - - fn attempt_lalr( - &self, - state: &mut LR1State<'grammar>, - table: &LaneTable<'grammar>, - actions: &Set>, - ) -> bool { - match table.columns() { - Ok(columns) => { - debug!("attempt_lalr, columns={:#?}", columns); - columns.apply(state, actions); - debug!("attempt_lalr, state={:#?}", state); - true - } - Err(OverlappingLookahead) => { - debug!("attempt_lalr, OverlappingLookahead"); - false - } - } - } - - fn build_lane_table( - &self, - states: &[LR1State<'grammar>], - inconsistent_state: StateIndex, - actions: &Set>, - ) -> LaneTable<'grammar> { - let state_graph = StateGraph::new(states); - let mut tracer = LaneTracer::new( - self.grammar, - self.start_nt.clone(), - states, - &self.first_sets, - &state_graph, - actions.len(), - ); - for (i, action) in actions.iter().enumerate() { - tracer.start_trace(inconsistent_state, ConflictIndex::new(i), action.clone()); - } - tracer.into_table() - } -} +//! + +use collections::{Map, Set}; +use ena::unify::InPlaceUnificationTable; +use grammar::repr::*; +use lr1::build; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::lookahead::{Lookahead, TokenSet}; +use lr1::lane_table::lane::LaneTracer; +use lr1::lane_table::table::{ConflictIndex, LaneTable}; +use lr1::lane_table::table::context_set::OverlappingLookahead; +use lr1::state_graph::StateGraph; +use std::rc::Rc; + +mod merge; +use self::merge::Merge; + +mod state_set; +use self::state_set::StateSet; + +pub struct LaneTableConstruct<'grammar> { + grammar: &'grammar Grammar, + first_sets: FirstSets, + start_nt: NonterminalString, +} + +impl<'grammar> LaneTableConstruct<'grammar> { + pub fn new(grammar: &'grammar Grammar, start_nt: NonterminalString) -> Self { + let first_sets = FirstSets::new(grammar); + LaneTableConstruct { + grammar: grammar, + start_nt: start_nt, + first_sets: first_sets, + } + } + + pub fn construct(self) -> Result>, LR1TableConstructionError<'grammar>> { + let states = { + match build::build_lr0_states(self.grammar, self.start_nt.clone()) { + Ok(states) => { + // In this case, the grammar is actually + // LR(0). This is very rare -- it means that the + // grammar does not need lookahead to execute. In + // principle, we could stop here, except that if + // we do so, then the lookahead values that we get + // are very broad. + // + // Broad lookahead values will cause "eager" + // reduce at runtime -- i.e., if there is some + // scenario where the lookahead tells you we are + // in error, but we would have to reduce a few + // states before we see it. This, in turn, can + // cause infinite loops around error recovery + // (#240). + // + // Since we want to behave as a LR(1) parser + // would, we'll just go ahead and run the + // algorithm. + states + } + Err(TableConstructionError { + states, + conflicts: _, + }) => states, + } + }; + + // Convert the LR(0) states into LR(0-1) states. + let mut states = self.promote_lr0_states(states); + + // For each inconsistent state, apply the lane-table algorithm to + // resolve it. + for i in 0.. { + if i >= states.len() { + break; + } + + match self.resolve_inconsistencies(&mut states, StateIndex(i)) { + Ok(()) => {} + Err(_) => { + // We failed because of irreconcilable conflicts + // somewhere. Just compute the conflicts from the final set of + // states. + debug!( + "construct: failed to resolve inconsistencies in state {:#?}", + states[i] + ); + let conflicts: Vec> = states + .iter() + .flat_map(|s| Lookahead::conflicts(&s)) + .collect(); + return Err(TableConstructionError { + states: states, + conflicts: conflicts, + }); + } + } + } + + Ok(states) + } + + /// Given a set of LR0 states, returns LR1 states where the lookahead + /// is always `TokenSet::all()`. We refer to these states as LR(0-1) + /// states in the README. + fn promote_lr0_states(&self, lr0: Vec>) -> Vec> { + let all = TokenSet::all(); + debug!("promote_lr0_states: all={:?}", all); + lr0.into_iter() + .map(|s| { + let items = s.items + .vec + .iter() + .map(|item| Item { + production: item.production, + index: item.index, + lookahead: all.clone(), + }) + .collect(); + let reductions = s.reductions + .into_iter() + .map(|(_, p)| (all.clone(), p)) + .collect(); + State { + index: s.index, + items: Items { + vec: Rc::new(items), + }, + shifts: s.shifts, + reductions: reductions, + gotos: s.gotos, + } + }) + .collect() + } + + fn resolve_inconsistencies( + &self, + states: &mut Vec>, + inconsistent_state: StateIndex, + ) -> Result<(), StateIndex> { + debug!( + "resolve_inconsistencies(inconsistent_state={:?}/{:#?}", + inconsistent_state, states[inconsistent_state.0] + ); + + let mut actions = super::conflicting_actions(&states[inconsistent_state.0]); + if actions.is_empty() { + // This can mean one of two things: only shifts, or a + // single reduction. We have to be careful about states + // with a single reduction: even though such a state is + // not inconsistent (there is only one possible course of + // action), we still want to run the lane table algorithm, + // because otherwise we get states with "complete" + // lookahead, which messes with error recovery. + // + // In particular, if there is too much lookahead, we will + // reduce even when it is inappropriate to do so. + actions = states[inconsistent_state.0] + .reductions + .iter() + .map(|&(_, prod)| Action::Reduce(prod)) + .collect(); + if actions.is_empty() { + return Ok(()); + } + } + + debug!("resolve_inconsistencies: conflicting_actions={:?}", actions); + + let table = self.build_lane_table(states, inconsistent_state, &actions); + + // Consider first the "LALR" case, where the lookaheads for each + // action are completely disjoint. + if self.attempt_lalr(&mut states[inconsistent_state.0], &table, &actions) { + return Ok(()); + } + + // Construct the initial states; each state will map to a + // context-set derived from its row in the lane-table. This is + // fallible, because a state may be internally inconstent. + // + // (To handle unification, we also map each state to a + // `StateSet` that is its entry in the `ena` table.) + let rows = table.rows()?; + let mut unify = InPlaceUnificationTable::::new(); + let mut state_sets = Map::new(); + for (&state_index, context_set) in &rows { + let state_set = unify.new_key(context_set.clone()); + state_sets.insert(state_index, state_set); + debug!( + "resolve_inconsistencies: state_index={:?}, state_set={:?}", + state_index, state_set + ); + } + + // Now merge state-sets, cloning states where needed. + let mut merge = Merge::new( + &table, + &mut unify, + states, + &mut state_sets, + inconsistent_state, + ); + let beachhead_states = table.beachhead_states(); + for beachhead_state in beachhead_states { + match merge.start(beachhead_state) { + Ok(()) => {} + Err((source, _)) => { + debug!( + "resolve_inconsistencies: failed to merge, source={:?}", + source + ); + return Err(source); + } + } + } + merge.patch_target_starts(&actions); + + Ok(()) + } + + fn attempt_lalr( + &self, + state: &mut LR1State<'grammar>, + table: &LaneTable<'grammar>, + actions: &Set>, + ) -> bool { + match table.columns() { + Ok(columns) => { + debug!("attempt_lalr, columns={:#?}", columns); + columns.apply(state, actions); + debug!("attempt_lalr, state={:#?}", state); + true + } + Err(OverlappingLookahead) => { + debug!("attempt_lalr, OverlappingLookahead"); + false + } + } + } + + fn build_lane_table( + &self, + states: &[LR1State<'grammar>], + inconsistent_state: StateIndex, + actions: &Set>, + ) -> LaneTable<'grammar> { + let state_graph = StateGraph::new(states); + let mut tracer = LaneTracer::new( + self.grammar, + self.start_nt.clone(), + states, + &self.first_sets, + &state_graph, + actions.len(), + ); + for (i, action) in actions.iter().enumerate() { + tracer.start_trace(inconsistent_state, ConflictIndex::new(i), action.clone()); + } + tracer.into_table() + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/construct/state_set.rs b/third_party/rust/lalrpop/src/lr1/lane_table/construct/state_set.rs index 7ff9939551fd..67ee957e3649 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/construct/state_set.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/construct/state_set.rs @@ -1,46 +1,46 @@ -use ena::unify::{UnifyKey, UnifyValue}; -use lr1::lane_table::table::context_set::{ContextSet, OverlappingLookahead}; - -/// The unification key for a set of states in the lane table -/// algorithm. Each set of states is associated with a -/// `ContextSet`. When two sets of states are merged, their conflict -/// sets are merged as well; this will fail if that would produce an -/// overlapping conflict set. -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub struct StateSet { - index: u32, -} - -impl UnifyKey for StateSet { - type Value = ContextSet; - - fn index(&self) -> u32 { - self.index - } - - fn from_index(u: u32) -> Self { - StateSet { index: u } - } - - fn tag() -> &'static str { - "StateSet" - } -} - -// FIXME: The `ena` interface is really designed around `UnifyValue` -// being cheaply cloneable; we should either refactor `ena` a bit or -// find some other way to associate a `ContextSet` with a state set -// (for example, we could have each state set be associated with an -// index that maps to a `ContextSet`), and do the merging ourselves. -// But this is easier for now, and cloning a `ContextSet` isn't THAT -// expensive, right? :) -impl UnifyValue for ContextSet { - type Error = (Self, Self); - - fn unify_values(value1: &Self, value2: &Self) -> Result { - match ContextSet::union(value1, value2) { - Ok(v) => Ok(v), - Err(OverlappingLookahead) => Err((value1.clone(), value2.clone())), - } - } -} +use ena::unify::{UnifyKey, UnifyValue}; +use lr1::lane_table::table::context_set::{ContextSet, OverlappingLookahead}; + +/// The unification key for a set of states in the lane table +/// algorithm. Each set of states is associated with a +/// `ContextSet`. When two sets of states are merged, their conflict +/// sets are merged as well; this will fail if that would produce an +/// overlapping conflict set. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct StateSet { + index: u32, +} + +impl UnifyKey for StateSet { + type Value = ContextSet; + + fn index(&self) -> u32 { + self.index + } + + fn from_index(u: u32) -> Self { + StateSet { index: u } + } + + fn tag() -> &'static str { + "StateSet" + } +} + +// FIXME: The `ena` interface is really designed around `UnifyValue` +// being cheaply cloneable; we should either refactor `ena` a bit or +// find some other way to associate a `ContextSet` with a state set +// (for example, we could have each state set be associated with an +// index that maps to a `ContextSet`), and do the merging ourselves. +// But this is easier for now, and cloning a `ContextSet` isn't THAT +// expensive, right? :) +impl UnifyValue for ContextSet { + type Error = (Self, Self); + + fn unify_values(value1: &Self, value2: &Self) -> Result { + match ContextSet::union(value1, value2) { + Ok(v) => Ok(v), + Err(OverlappingLookahead) => Err((value1.clone(), value2.clone())), + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/lane/mod.rs b/third_party/rust/lalrpop/src/lr1/lane_table/lane/mod.rs index c841cf0e890f..b61675a12945 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/lane/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/lane/mod.rs @@ -1,149 +1,149 @@ -//! Code to trace out a single lane, collecting information into the -//! lane table as we go. - -use collections::Set; -use grammar::repr::*; -use lr1::core::*; -use lr1::first::FirstSets; -use lr1::lookahead::*; -use lr1::state_graph::StateGraph; - -use super::table::{ConflictIndex, LaneTable}; - -pub struct LaneTracer<'trace, 'grammar: 'trace, L: Lookahead + 'trace> { - states: &'trace [State<'grammar, L>], - first_sets: &'trace FirstSets, - state_graph: &'trace StateGraph, - table: LaneTable<'grammar>, - start_nt: NonterminalString, -} - -impl<'trace, 'grammar, L: Lookahead> LaneTracer<'trace, 'grammar, L> { - pub fn new( - grammar: &'grammar Grammar, - start_nt: NonterminalString, - states: &'trace [State<'grammar, L>], - first_sets: &'trace FirstSets, - state_graph: &'trace StateGraph, - conflicts: usize, - ) -> Self { - LaneTracer { - states: states, - first_sets: first_sets, - state_graph: state_graph, - start_nt: start_nt, - table: LaneTable::new(grammar, conflicts), - } - } - - pub fn into_table(self) -> LaneTable<'grammar> { - self.table - } - - pub fn start_trace( - &mut self, - state: StateIndex, - conflict: ConflictIndex, - action: Action<'grammar>, - ) { - let mut visited_set = Set::default(); - - // if the conflict item is a "shift" item, then the context - // is always the terminal to shift (and conflicts only arise - // around shifting terminal, so it must be a terminal) - match action { - Action::Shift(term, _) => { - let mut token_set = TokenSet::new(); - token_set.insert(Token::Terminal(term)); - self.table.add_lookahead(state, conflict, &token_set); - } - - Action::Reduce(prod) => { - let item = Item::lr0(prod, prod.symbols.len()); - self.continue_trace(state, conflict, item, &mut visited_set); - } - } - } - - fn continue_trace( - &mut self, - state: StateIndex, - conflict: ConflictIndex, - item: LR0Item<'grammar>, - visited: &mut Set<(StateIndex, LR0Item<'grammar>)>, - ) { - if !visited.insert((state, item)) { - return; - } - - if item.index > 0 { - // This item was reached by shifting some symbol. We need - // to unshift that symbol, which means we walk backwards - // to predecessors of `state` in the state graph. - // - // Example: - // - // X = ...p T (*) ...s - // - // Here we would be "unshifting" T, which means we will - // walk to predecessors of the current state that were - // reached by shifting T. Those predecessors will contain - // an item like `X = ...p (*) T ...s`, which we will then - // process in turn. - let shifted_symbol = item.production.symbols[item.index - 1].clone(); - let unshifted_item = Item { - index: item.index - 1, - ..item - }; - let predecessors = self.state_graph.predecessors(state, shifted_symbol); - for predecessor in predecessors { - self.table.add_successor(predecessor, state); - self.continue_trace(predecessor, conflict, unshifted_item, visited); - } - return; - } - - // Either: we are in the start state, or this item was - // reached by an epsilon transition. We have to - // "unepsilon", which means that we search elsewhere in - // the state for where the epsilon transition could have - // come from. - // - // Example: - // - // X = (*) ... - // - // We will search for other items in the same state like: - // - // Y = ...p (*) X ...s - // - // We can then insert `FIRST(...s)` as lookahead for - // `conflict`. If `...s` may derive epsilon, though, we - // have to recurse and search with the previous item. - - let state_items = &self.states[state.0].items.vec; - let nonterminal = &item.production.nonterminal; - if *nonterminal == self.start_nt { - // as a special case, if the `X` above is the special, synthetic - // start-terminal, then the only thing that comes afterwards is EOF. - self.table.add_lookahead(state, conflict, &TokenSet::eof()); - } - - // NB: Under the normal LR terms, the start nonterminal will - // only have one production like `X' = X`, in which case this - // loop is useless, but sometimes in tests we don't observe - // that restriction, so do it anyway. - for pred_item in state_items - .iter() - .filter(|i| i.can_shift_nonterminal(nonterminal)) - { - let symbol_sets = pred_item.symbol_sets(); - let mut first = self.first_sets.first0(symbol_sets.suffix); - let derives_epsilon = first.take_eof(); - self.table.add_lookahead(state, conflict, &first); - if derives_epsilon { - self.continue_trace(state, conflict, pred_item.to_lr0(), visited); - } - } - } -} +//! Code to trace out a single lane, collecting information into the +//! lane table as we go. + +use collections::Set; +use grammar::repr::*; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::lookahead::*; +use lr1::state_graph::StateGraph; + +use super::table::{ConflictIndex, LaneTable}; + +pub struct LaneTracer<'trace, 'grammar: 'trace, L: Lookahead + 'trace> { + states: &'trace [State<'grammar, L>], + first_sets: &'trace FirstSets, + state_graph: &'trace StateGraph, + table: LaneTable<'grammar>, + start_nt: NonterminalString, +} + +impl<'trace, 'grammar, L: Lookahead> LaneTracer<'trace, 'grammar, L> { + pub fn new( + grammar: &'grammar Grammar, + start_nt: NonterminalString, + states: &'trace [State<'grammar, L>], + first_sets: &'trace FirstSets, + state_graph: &'trace StateGraph, + conflicts: usize, + ) -> Self { + LaneTracer { + states: states, + first_sets: first_sets, + state_graph: state_graph, + start_nt: start_nt, + table: LaneTable::new(grammar, conflicts), + } + } + + pub fn into_table(self) -> LaneTable<'grammar> { + self.table + } + + pub fn start_trace( + &mut self, + state: StateIndex, + conflict: ConflictIndex, + action: Action<'grammar>, + ) { + let mut visited_set = Set::default(); + + // if the conflict item is a "shift" item, then the context + // is always the terminal to shift (and conflicts only arise + // around shifting terminal, so it must be a terminal) + match action { + Action::Shift(term, _) => { + let mut token_set = TokenSet::new(); + token_set.insert(Token::Terminal(term)); + self.table.add_lookahead(state, conflict, &token_set); + } + + Action::Reduce(prod) => { + let item = Item::lr0(prod, prod.symbols.len()); + self.continue_trace(state, conflict, item, &mut visited_set); + } + } + } + + fn continue_trace( + &mut self, + state: StateIndex, + conflict: ConflictIndex, + item: LR0Item<'grammar>, + visited: &mut Set<(StateIndex, LR0Item<'grammar>)>, + ) { + if !visited.insert((state, item)) { + return; + } + + if item.index > 0 { + // This item was reached by shifting some symbol. We need + // to unshift that symbol, which means we walk backwards + // to predecessors of `state` in the state graph. + // + // Example: + // + // X = ...p T (*) ...s + // + // Here we would be "unshifting" T, which means we will + // walk to predecessors of the current state that were + // reached by shifting T. Those predecessors will contain + // an item like `X = ...p (*) T ...s`, which we will then + // process in turn. + let shifted_symbol = item.production.symbols[item.index - 1].clone(); + let unshifted_item = Item { + index: item.index - 1, + ..item + }; + let predecessors = self.state_graph.predecessors(state, shifted_symbol); + for predecessor in predecessors { + self.table.add_successor(predecessor, state); + self.continue_trace(predecessor, conflict, unshifted_item, visited); + } + return; + } + + // Either: we are in the start state, or this item was + // reached by an epsilon transition. We have to + // "unepsilon", which means that we search elsewhere in + // the state for where the epsilon transition could have + // come from. + // + // Example: + // + // X = (*) ... + // + // We will search for other items in the same state like: + // + // Y = ...p (*) X ...s + // + // We can then insert `FIRST(...s)` as lookahead for + // `conflict`. If `...s` may derive epsilon, though, we + // have to recurse and search with the previous item. + + let state_items = &self.states[state.0].items.vec; + let nonterminal = &item.production.nonterminal; + if *nonterminal == self.start_nt { + // as a special case, if the `X` above is the special, synthetic + // start-terminal, then the only thing that comes afterwards is EOF. + self.table.add_lookahead(state, conflict, &TokenSet::eof()); + } + + // NB: Under the normal LR terms, the start nonterminal will + // only have one production like `X' = X`, in which case this + // loop is useless, but sometimes in tests we don't observe + // that restriction, so do it anyway. + for pred_item in state_items + .iter() + .filter(|i| i.can_shift_nonterminal(nonterminal)) + { + let symbol_sets = pred_item.symbol_sets(); + let mut first = self.first_sets.first0(symbol_sets.suffix); + let derives_epsilon = first.take_eof(); + self.table.add_lookahead(state, conflict, &first); + if derives_epsilon { + self.continue_trace(state, conflict, pred_item.to_lr0(), visited); + } + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/mod.rs b/third_party/rust/lalrpop/src/lr1/lane_table/mod.rs index 6abd5bc3a1bf..f49220b991fd 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/mod.rs @@ -1,27 +1,27 @@ -use collections::Set; -use grammar::repr::*; -use lr1::core::*; -use lr1::lookahead::Lookahead; - -mod construct; -mod lane; -mod table; - -#[cfg(test)] -mod test; - -pub fn build_lane_table_states<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> LR1Result<'grammar> { - construct::LaneTableConstruct::new(grammar, start).construct() -} - -fn conflicting_actions<'grammar, L: Lookahead>( - state: &State<'grammar, L>, -) -> Set> { - let conflicts = L::conflicts(state); - let reductions = conflicts.iter().map(|c| Action::Reduce(c.production)); - let actions = conflicts.iter().map(|c| c.action.clone()); - reductions.chain(actions).collect() -} +use collections::Set; +use lr1::core::*; +use lr1::lookahead::Lookahead; +use grammar::repr::*; + +mod construct; +mod lane; +mod table; + +#[cfg(test)] +mod test; + +pub fn build_lane_table_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + construct::LaneTableConstruct::new(grammar, start).construct() +} + +fn conflicting_actions<'grammar, L: Lookahead>( + state: &State<'grammar, L>, +) -> Set> { + let conflicts = L::conflicts(state); + let reductions = conflicts.iter().map(|c| Action::Reduce(c.production)); + let actions = conflicts.iter().map(|c| c.action.clone()); + reductions.chain(actions).collect() +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/mod.rs b/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/mod.rs index 572a7d239331..b8cf27e26730 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/mod.rs @@ -1,98 +1,98 @@ -//! A key part of the lane-table algorithm is the idea of a CONTEXT -//! SET (my name, the paper has no name for this). Basically it -//! represents the LR1 context under which a given conflicting action -//! would take place. -//! -//! So, for example, imagine this grammar: -//! -//! ```notrust -//! A = B x -//! | C y -//! B = z -//! C = z -//! ``` -//! -//! This gives rise to states like: -//! -//! - `S0 = { * B x, * C y, B = * z, C = * z }` -//! - `S1 = { B = z *, C = z * }` -//! -//! This second state has two conflicting items. Let's call them -//! conflicts 0 and 1 respectively. The conflict set would then have -//! two entries (one for each conflict) and it would map each of them -//! to a TokenSet supplying context. So when we trace everything -//! out we might get a ContextSet of: -//! -//! - `[ 0: x, 1: y ]` -//! -//! In general, you want to ensure that the token sets of all -//! conflicting items are pairwise-disjoint, or else if you get to a -//! state that has both of those items (which, by definition, does -//! arise) you won't know which to take. In this case, we're all set, -//! because item 0 occurs only with lookahead `x` and item 1 with -//! lookahead `y`. - -use collections::{Map, Set}; -use lr1::core::*; -use lr1::lookahead::*; -mod test; - -use super::ConflictIndex; - -#[derive(Clone, Debug)] -pub struct ContextSet { - values: Vec, -} - -#[derive(Debug)] -pub struct OverlappingLookahead; - -impl ContextSet { - pub fn new(num_conflicts: usize) -> Self { - ContextSet { - values: (0..num_conflicts).map(|_| TokenSet::new()).collect(), - } - } - - pub fn union(set1: &ContextSet, set2: &ContextSet) -> Result { - let mut result = set1.clone(); - for (i, t) in set2.values.iter().enumerate() { - result.insert(ConflictIndex::new(i), t)?; - } - Ok(result) - } - - /// Attempts to merge the values `conflict: set` into this - /// conflict set. If this would result in an invalid conflict set - /// (where two conflicts have overlapping lookahead), then returns - /// `Err(OverlappingLookahead)` and has no effect. - /// - /// Assuming no errors, returns `Ok(true)` if this resulted in any - /// modifications, and `Ok(false)` otherwise. - pub fn insert( - &mut self, - conflict: ConflictIndex, - set: &TokenSet, - ) -> Result { - for (value, index) in self.values.iter().zip((0..).map(ConflictIndex::new)) { - if index != conflict { - if value.is_intersecting(&set) { - return Err(OverlappingLookahead); - } - } - } - - Ok(self.values[conflict.index].union_with(&set)) - } - - pub fn apply<'grammar>(&self, state: &mut LR1State<'grammar>, actions: &Set>) { - // create a map from each action to its lookahead - let lookaheads: Map, &TokenSet> = - actions.iter().cloned().zip(&self.values).collect(); - - for &mut (ref mut lookahead, production) in &mut state.reductions { - let action = Action::Reduce(production); - *lookahead = lookaheads[&action].clone(); - } - } -} +//! A key part of the lane-table algorithm is the idea of a CONTEXT +//! SET (my name, the paper has no name for this). Basically it +//! represents the LR1 context under which a given conflicting action +//! would take place. +//! +//! So, for example, imagine this grammar: +//! +//! ```notrust +//! A = B x +//! | C y +//! B = z +//! C = z +//! ``` +//! +//! This gives rise to states like: +//! +//! - `S0 = { * B x, * C y, B = * z, C = * z }` +//! - `S1 = { B = z *, C = z * }` +//! +//! This second state has two conflicting items. Let's call them +//! conflicts 0 and 1 respectively. The conflict set would then have +//! two entries (one for each conflict) and it would map each of them +//! to a TokenSet supplying context. So when we trace everything +//! out we might get a ContextSet of: +//! +//! - `[ 0: x, 1: y ]` +//! +//! In general, you want to ensure that the token sets of all +//! conflicting items are pairwise-disjoint, or else if you get to a +//! state that has both of those items (which, by definition, does +//! arise) you won't know which to take. In this case, we're all set, +//! because item 0 occurs only with lookahead `x` and item 1 with +//! lookahead `y`. + +use collections::{Map, Set}; +use lr1::core::*; +use lr1::lookahead::*; +mod test; + +use super::ConflictIndex; + +#[derive(Clone, Debug)] +pub struct ContextSet { + values: Vec, +} + +#[derive(Debug)] +pub struct OverlappingLookahead; + +impl ContextSet { + pub fn new(num_conflicts: usize) -> Self { + ContextSet { + values: (0..num_conflicts).map(|_| TokenSet::new()).collect(), + } + } + + pub fn union(set1: &ContextSet, set2: &ContextSet) -> Result { + let mut result = set1.clone(); + for (i, t) in set2.values.iter().enumerate() { + result.insert(ConflictIndex::new(i), t)?; + } + Ok(result) + } + + /// Attempts to merge the values `conflict: set` into this + /// conflict set. If this would result in an invalid conflict set + /// (where two conflicts have overlapping lookahead), then returns + /// `Err(OverlappingLookahead)` and has no effect. + /// + /// Assuming no errors, returns `Ok(true)` if this resulted in any + /// modifications, and `Ok(false)` otherwise. + pub fn insert( + &mut self, + conflict: ConflictIndex, + set: &TokenSet, + ) -> Result { + for (value, index) in self.values.iter().zip((0..).map(ConflictIndex::new)) { + if index != conflict { + if value.is_intersecting(&set) { + return Err(OverlappingLookahead); + } + } + } + + Ok(self.values[conflict.index].union_with(&set)) + } + + pub fn apply<'grammar>(&self, state: &mut LR1State<'grammar>, actions: &Set>) { + // create a map from each action to its lookahead + let lookaheads: Map, &TokenSet> = + actions.iter().cloned().zip(&self.values).collect(); + + for &mut (ref mut lookahead, production) in &mut state.reductions { + let action = Action::Reduce(production); + *lookahead = lookaheads[&action].clone(); + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/test.rs b/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/test.rs index 6b6cd4c650bf..67005ab4bc55 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/test.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/table/context_set/test.rs @@ -1 +1 @@ -#![cfg(test)] +#![cfg(test)] diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/table/mod.rs b/third_party/rust/lalrpop/src/lr1/lane_table/table/mod.rs index c62ffc2e5214..10a716345b02 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/table/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/table/mod.rs @@ -1,205 +1,203 @@ -//! The "Lane Table". In the paper, this is depicted like so: -//! -//! ``` -//! +-------+----+-----+----+------------+ -//! + State | C1 | ... | Cn | Successors | -//! +-------+----+-----+----+------------+ -//! ``` -//! -//! where each row summarizes some state that potentially contributes -//! lookahead to the conflict. The columns `Ci` represent each of the -//! conflicts we are trying to disentangle; their values are each -//! `TokenSet` indicating the lookahead contributing by this state. -//! The Successors is a vector of further successors. For simplicity -//! though we store this using maps, at least for now. - -use collections::{Map, Multimap, Set}; -use grammar::repr::*; -use lr1::core::*; -use lr1::lookahead::*; -use std::default::Default; -use std::fmt::{Debug, Error, Formatter}; -use std::iter; - -pub mod context_set; -use self::context_set::{ContextSet, OverlappingLookahead}; - -#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] -pub struct ConflictIndex { - index: usize, -} - -impl ConflictIndex { - pub fn new(index: usize) -> ConflictIndex { - ConflictIndex { index: index } - } -} - -pub struct LaneTable<'grammar> { - _grammar: &'grammar Grammar, - conflicts: usize, - lookaheads: Map<(StateIndex, ConflictIndex), TokenSet>, - successors: Multimap>, -} - -impl<'grammar> LaneTable<'grammar> { - pub fn new(grammar: &'grammar Grammar, conflicts: usize) -> LaneTable { - LaneTable { - _grammar: grammar, - conflicts: conflicts, - lookaheads: Map::default(), - successors: Multimap::default(), - } - } - - pub fn add_lookahead(&mut self, state: StateIndex, conflict: ConflictIndex, tokens: &TokenSet) { - self.lookaheads - .entry((state, conflict)) - .or_insert_with(|| TokenSet::new()) - .union_with(&tokens); - } - - pub fn add_successor(&mut self, state: StateIndex, succ: StateIndex) { - self.successors.push(state, succ); - } - - /// Unions together the lookaheads for each column and returns a - /// context set containing all of them. For an LALR(1) grammar, - /// these token sets will be mutually disjoint, as discussed in - /// the [README]; otherwise `Err` will be returned. - /// - /// [README]: ../README.md - pub fn columns(&self) -> Result { - let mut columns = ContextSet::new(self.conflicts); - for (&(_, conflict_index), set) in &self.lookaheads { - columns.insert(conflict_index, set)?; - } - Ok(columns) - } - - pub fn successors(&self, state: StateIndex) -> Option<&Set> { - self.successors.get(&state) - } - - /// Returns the state of states in the table that are **not** - /// reachable from another state in the table. These are called - /// "beachhead states". - pub fn beachhead_states(&self) -> Set { - // set of all states that are reachable from another state - let reachable: Set = self - .successors - .iter() - .flat_map(|(_pred, succ)| succ) - .cloned() - .collect(); - - self.lookaheads - .keys() - .map(|&(state_index, _)| state_index) - .filter(|s| !reachable.contains(s)) - .collect() - } - - pub fn context_set(&self, state: StateIndex) -> Result { - let mut set = ContextSet::new(self.conflicts); - for (&(state_index, conflict_index), token_set) in &self.lookaheads { - if state_index == state { - set.insert(conflict_index, token_set)?; - } - } - Ok(set) - } - - /// Returns a map containing all states that appear in the table, - /// along with the context set for each state (i.e., each row in - /// the table, basically). Returns Err if any state has a conflict - /// between the context sets even within its own row. - pub fn rows(&self) -> Result, StateIndex> { - let mut map = Map::new(); - for (&(state_index, conflict_index), token_set) in &self.lookaheads { - debug!( - "rows: inserting state_index={:?} conflict_index={:?} token_set={:?}", - state_index, conflict_index, token_set - ); - match { - map.entry(state_index) - .or_insert_with(|| ContextSet::new(self.conflicts)) - .insert(conflict_index, token_set) - } { - Ok(_changed) => {} - Err(OverlappingLookahead) => { - debug!("rows: intra-row conflict inserting state_index={:?} conflict_index={:?} token_set={:?}", - state_index, conflict_index, token_set); - return Err(state_index); - } - } - } - - // In some cases, there are states that have no context at - // all, only successors. In that case, make sure to add an - // empty row for them. - for (&state_index, _) in &self.successors { - map.entry(state_index) - .or_insert_with(|| ContextSet::new(self.conflicts)); - } - - Ok(map) - } -} - -impl<'grammar> Debug for LaneTable<'grammar> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let indices: Set = self - .lookaheads - .keys() - .map(|&(state, _)| state) - .chain(self.successors.iter().map(|(key, _)| key.clone())) - .collect(); - - let header = iter::once(format!("State")) - .chain((0..self.conflicts).map(|i| format!("C{}", i))) - .chain(Some(format!("Successors"))) - .collect(); - - let rows = indices.iter().map(|&index| { - iter::once(format!("{:?}", index)) - .chain((0..self.conflicts).map(|i| { - self.lookaheads - .get(&(index, ConflictIndex::new(i))) - .map(|token_set| format!("{:?}", token_set)) - .unwrap_or(String::new()) - })) - .chain(Some( - self.successors - .get(&index) - .map(|c| format!("{:?}", c)) - .unwrap_or(String::new()), - )) - .collect() - }); - - let table: Vec> = iter::once(header).chain(rows).collect(); - - let columns = 2 + self.conflicts; - - let widths: Vec<_> = (0..columns) - .map(|c| { - // find the max width of any row at this column - table.iter().map(|r| r[c].len()).max().unwrap() - }) - .collect(); - - for row in &table { - try!(write!(fmt, "| ")); - for (i, column) in row.iter().enumerate() { - if i > 0 { - try!(write!(fmt, " | ")); - } - try!(write!(fmt, "{0:1$}", column, widths[i])); - } - try!(write!(fmt, " |\n")); - } - - Ok(()) - } -} +//! The "Lane Table". In the paper, this is depicted like so: +//! +//! ``` +//! +-------+----+-----+----+------------+ +//! + State | C1 | ... | Cn | Successors | +//! +-------+----+-----+----+------------+ +//! ``` +//! +//! where each row summarizes some state that potentially contributes +//! lookahead to the conflict. The columns `Ci` represent each of the +//! conflicts we are trying to disentangle; their values are each +//! `TokenSet` indicating the lookahead contributing by this state. +//! The Successors is a vector of further successors. For simplicity +//! though we store this using maps, at least for now. + +use collections::{Map, Multimap, Set}; +use grammar::repr::*; +use lr1::core::*; +use lr1::lookahead::*; +use std::default::Default; +use std::fmt::{Debug, Error, Formatter}; +use std::iter; + +pub mod context_set; +use self::context_set::{ContextSet, OverlappingLookahead}; + +#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub struct ConflictIndex { + index: usize, +} + +impl ConflictIndex { + pub fn new(index: usize) -> ConflictIndex { + ConflictIndex { index: index } + } +} + +pub struct LaneTable<'grammar> { + _grammar: &'grammar Grammar, + conflicts: usize, + lookaheads: Map<(StateIndex, ConflictIndex), TokenSet>, + successors: Multimap>, +} + +impl<'grammar> LaneTable<'grammar> { + pub fn new(grammar: &'grammar Grammar, conflicts: usize) -> LaneTable { + LaneTable { + _grammar: grammar, + conflicts: conflicts, + lookaheads: Map::default(), + successors: Multimap::default(), + } + } + + pub fn add_lookahead(&mut self, state: StateIndex, conflict: ConflictIndex, tokens: &TokenSet) { + self.lookaheads + .entry((state, conflict)) + .or_insert_with(|| TokenSet::new()) + .union_with(&tokens); + } + + pub fn add_successor(&mut self, state: StateIndex, succ: StateIndex) { + self.successors.push(state, succ); + } + + /// Unions together the lookaheads for each column and returns a + /// context set containing all of them. For an LALR(1) grammar, + /// these token sets will be mutually disjoint, as discussed in + /// the [README]; otherwise `Err` will be returned. + /// + /// [README]: ../README.md + pub fn columns(&self) -> Result { + let mut columns = ContextSet::new(self.conflicts); + for (&(_, conflict_index), set) in &self.lookaheads { + columns.insert(conflict_index, set)?; + } + Ok(columns) + } + + pub fn successors(&self, state: StateIndex) -> Option<&Set> { + self.successors.get(&state) + } + + /// Returns the state of states in the table that are **not** + /// reachable from another state in the table. These are called + /// "beachhead states". + pub fn beachhead_states(&self) -> Set { + // set of all states that are reachable from another state + let reachable: Set = self.successors + .iter() + .flat_map(|(_pred, succ)| succ) + .cloned() + .collect(); + + self.lookaheads + .keys() + .map(|&(state_index, _)| state_index) + .filter(|s| !reachable.contains(s)) + .collect() + } + + pub fn context_set(&self, state: StateIndex) -> Result { + let mut set = ContextSet::new(self.conflicts); + for (&(state_index, conflict_index), token_set) in &self.lookaheads { + if state_index == state { + set.insert(conflict_index, token_set)?; + } + } + Ok(set) + } + + /// Returns a map containing all states that appear in the table, + /// along with the context set for each state (i.e., each row in + /// the table, basically). Returns Err if any state has a conflict + /// between the context sets even within its own row. + pub fn rows(&self) -> Result, StateIndex> { + let mut map = Map::new(); + for (&(state_index, conflict_index), token_set) in &self.lookaheads { + debug!( + "rows: inserting state_index={:?} conflict_index={:?} token_set={:?}", + state_index, conflict_index, token_set + ); + match { + map.entry(state_index) + .or_insert_with(|| ContextSet::new(self.conflicts)) + .insert(conflict_index, token_set) + } { + Ok(_changed) => {} + Err(OverlappingLookahead) => { + debug!("rows: intra-row conflict inserting state_index={:?} conflict_index={:?} token_set={:?}", + state_index, conflict_index, token_set); + return Err(state_index); + } + } + } + + // In some cases, there are states that have no context at + // all, only successors. In that case, make sure to add an + // empty row for them. + for (&state_index, _) in &self.successors { + map.entry(state_index) + .or_insert_with(|| ContextSet::new(self.conflicts)); + } + + Ok(map) + } +} + +impl<'grammar> Debug for LaneTable<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let indices: Set = self.lookaheads + .keys() + .map(|&(state, _)| state) + .chain(self.successors.iter().map(|(key, _)| key.clone())) + .collect(); + + let header = iter::once(format!("State")) + .chain((0..self.conflicts).map(|i| format!("C{}", i))) + .chain(Some(format!("Successors"))) + .collect(); + + let rows = indices.iter().map(|&index| { + iter::once(format!("{:?}", index)) + .chain((0..self.conflicts).map(|i| { + self.lookaheads + .get(&(index, ConflictIndex::new(i))) + .map(|token_set| format!("{:?}", token_set)) + .unwrap_or(String::new()) + })) + .chain(Some( + self.successors + .get(&index) + .map(|c| format!("{:?}", c)) + .unwrap_or(String::new()), + )) + .collect() + }); + + let table: Vec> = iter::once(header).chain(rows).collect(); + + let columns = 2 + self.conflicts; + + let widths: Vec<_> = (0..columns) + .map(|c| { + // find the max width of any row at this column + table.iter().map(|r| r[c].len()).max().unwrap() + }) + .collect(); + + for row in &table { + try!(write!(fmt, "| ")); + for (i, column) in row.iter().enumerate() { + if i > 0 { + try!(write!(fmt, " | ")); + } + try!(write!(fmt, "{0:1$}", column, widths[i])); + } + try!(write!(fmt, " |\n")); + } + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/lr1/lane_table/test.rs b/third_party/rust/lalrpop/src/lr1/lane_table/test.rs index 8602efd0dbbd..323fa5757253 100644 --- a/third_party/rust/lalrpop/src/lr1/lane_table/test.rs +++ b/third_party/rust/lalrpop/src/lr1/lane_table/test.rs @@ -1,379 +1,376 @@ -use grammar::repr::*; -use lr1::build; -use lr1::core::*; -use lr1::first::FirstSets; -use lr1::interpret; -use lr1::state_graph::StateGraph; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::{expect_debug, normalized_grammar}; -use tls::Tls; - -use super::construct::*; -use super::lane::*; -use super::table::*; - -macro_rules! tokens { - ($($x:expr),*) => { - vec![$(TerminalString::quoted(Atom::from($x))),*] - } -} - -fn sym(t: &str) -> Symbol { - if t.chars().next().unwrap().is_uppercase() { - Symbol::Nonterminal(nt(t)) - } else { - Symbol::Terminal(term(t)) - } -} - -fn term(t: &str) -> TerminalString { - TerminalString::quoted(Atom::from(t)) -} - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -fn traverse(states: &[LR0State], tokens: &[&str]) -> StateIndex { - interpret::interpret_partial(states, tokens.iter().map(|&s| term(s))) - .unwrap() - .pop() - .unwrap() -} - -/// A simplified version of the paper's initial grammar; this version -/// only has one inconsistent state (the same state they talk about in -/// the paper). -pub fn paper_example_g0() -> Grammar { - normalized_grammar( - r#" -grammar; - -pub G: () = { - X "c", - Y "d", -}; - -X: () = { - "e" X, - "e",} -; - -Y: () = { - "e" Y, - "e" -}; -"#, - ) -} - -/// A (corrected) version of the sample grammar G1 from the paper. The -/// grammar as written in the text omits some items, but the diagrams -/// seem to contain the full set. I believe this is one of the -/// smallest examples that still requires splitting states from the -/// LR0 states. -pub fn paper_example_g1() -> Grammar { - normalized_grammar( - r#" -grammar; - -pub G: () = { - // if "a" is input, then lookahead "d" means "reduce X" - // and lookahead "c" means "reduce "Y" - "a" X "d", - "a" Y "c", - - // if "b" is input, then lookahead "d" means "reduce Y" - // and lookahead "c" means "reduce X. - "b" X "c", - "b" Y "d", -}; - -X: () = { - "e" X, - "e", -}; - -Y: () = { - "e" Y, - "e" -}; -"#, - ) -} - -fn build_table<'grammar>( - grammar: &'grammar Grammar, - goal: &str, - tokens: &[&str], -) -> LaneTable<'grammar> { - let lr0_err = build::build_lr0_states(&grammar, nt(goal)).unwrap_err(); - - // Push the `tokens` to find the index of the inconsistent state - let inconsistent_state_index = traverse(&lr0_err.states, tokens); - assert!( - lr0_err - .conflicts - .iter() - .any(|c| c.state == inconsistent_state_index) - ); - let inconsistent_state = &lr0_err.states[inconsistent_state_index.0]; - println!("inconsistent_state={:#?}", inconsistent_state.items); - - // Extract conflicting items and trace the lanes, constructing a table - let conflicting_items = super::conflicting_actions(inconsistent_state); - println!("conflicting_items={:#?}", conflicting_items); - let first_sets = FirstSets::new(&grammar); - let state_graph = StateGraph::new(&lr0_err.states); - let mut tracer = LaneTracer::new( - &grammar, - nt("G"), - &lr0_err.states, - &first_sets, - &state_graph, - conflicting_items.len(), - ); - for (i, conflicting_item) in conflicting_items.iter().enumerate() { - tracer.start_trace( - inconsistent_state.index, - ConflictIndex::new(i), - conflicting_item.clone(), - ); - } - - tracer.into_table() -} - -#[test] -fn g0_conflict_1() { - let _tls = Tls::test(); - let grammar = paper_example_g0(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let table = build_table(&grammar, "G", &["e"]); - println!("{:#?}", table); - // conflicting_actions={ - // Shift("e") // C0 - // Reduce(X = "e" => ActionFn(4)) // C1 - // Reduce(Y = "e" => ActionFn(6)) // C2 - // } - expect_debug( - &table, - r#" -| State | C0 | C1 | C2 | Successors | -| S0 | | ["c"] | ["d"] | {S3} | -| S3 | ["e"] | [] | [] | {S3} | -"# - .trim_left(), - ); -} - -#[test] -fn paper_example_g1_conflict_1() { - let _tls = Tls::test(); - let grammar = paper_example_g1(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let table = build_table(&grammar, "G", &["a", "e"]); - println!("{:#?}", table); - // conflicting_actions={ - // Shift("e") // C0 - // Reduce(X = "e" => ActionFn(6)) // C1 - // Reduce(Y = "e" => ActionFn(8)) // C2 - // } - expect_debug( - &table, - r#" -| State | C0 | C1 | C2 | Successors | -| S1 | | ["d"] | ["c"] | {S5} | -| S2 | | ["c"] | ["d"] | {S5} | -| S5 | ["e"] | [] | [] | {S5} | -"# - .trim_left(), - ); -} - -#[test] -fn paper_example_g0_build() { - let _tls = Tls::test(); - let grammar = paper_example_g0(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); - let states = LaneTableConstruct::new(&grammar, nt("G")) - .construct() - .expect("failed to build lane table states"); - - // we do not require more *states* than LR(0), just different lookahead - assert_eq!(states.len(), lr0_err.states.len()); - - let tree = interpret::interpret(&states, tokens!["e", "c"]).unwrap(); - expect_debug(&tree, r#"[G: [X: "e"], "c"]"#); - - let tree = interpret::interpret(&states, tokens!["e", "e", "c"]).unwrap(); - expect_debug(&tree, r#"[G: [X: "e", [X: "e"]], "c"]"#); - - let tree = interpret::interpret(&states, tokens!["e", "e", "d"]).unwrap(); - expect_debug(&tree, r#"[G: [Y: "e", [Y: "e"]], "d"]"#); - - interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); -} - -#[test] -fn paper_example_g1_build() { - let _tls = Tls::test(); - let grammar = paper_example_g1(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); - let states = LaneTableConstruct::new(&grammar, nt("G")) - .construct() - .expect("failed to build lane table states"); - - // we require more *states* than LR(0), not just different lookahead - assert_eq!(states.len() - lr0_err.states.len(), 1); - - let tree = interpret::interpret(&states, tokens!["a", "e", "e", "d"]).unwrap(); - expect_debug(&tree, r#"[G: "a", [X: "e", [X: "e"]], "d"]"#); - - let tree = interpret::interpret(&states, tokens!["b", "e", "e", "d"]).unwrap(); - expect_debug(&tree, r#"[G: "b", [Y: "e", [Y: "e"]], "d"]"#); - - interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); -} - -pub fn paper_example_large() -> Grammar { - normalized_grammar( - r#" -grammar; - -pub G: () = { - "x" W "a", - "x" V "t", - "y" W "b", - "y" V "t", - "z" W "r", - "z" V "b", - "u" U X "a", - "u" U Y "r", -}; - -W: () = { - U X C -}; - -V: () = { - U Y "d" -}; - -X: () = { - "k" "t" U X P, - "k" "t" -}; - -Y: () = { - "k" "t" U Y "u", - "k" "t" -}; - -U: () = { - U "k" "t", - "s" -}; - -E: () = { - "a", - "b", - "c", - "v", -}; - -C: () = { - "c", - "w" -}; - -P: () = { - "z" -}; -"#, - ) -} - -#[test] -fn large_conflict_1() { - let _tls = Tls::test(); - let grammar = paper_example_large(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let table = build_table(&grammar, "G", &["x", "s", "k", "t"]); - println!("{:#?}", table); - - // conflicting_actions={ - // Shift("s") // C0 - // Reduce(U = U "k" "t") // C1 - // Reduce(X = "k" "t") // C2 - // Reduce(Y = "k" "t") // C3 - // } - - expect_debug( - &table, - r#" -| State | C0 | C1 | C2 | C3 | Successors | -| S1 | | ["k"] | | | {S5} | -| S2 | | ["k"] | | | {S7} | -| S3 | | ["k"] | | | {S7} | -| S4 | | ["k"] | | | {S7} | -| S5 | | | ["a"] | ["r"] | {S16} | -| S7 | | | ["c", "w"] | ["d"] | {S16} | -| S16 | | | | | {S27} | -| S27 | ["s"] | ["k"] | | | {S32} | -| S32 | | | ["z"] | ["u"] | {S16} | -"# - .trim_left(), - ); - - // ^^ This differs in some particulars from what appears in the - // paper, but I believe it to be correct, and the paper to be wrong. - // - // Here is the table using the state names from the paper. I've - // marked the differences with `(*)`. Note that the paper does not - // include the C0 column (the shift). - // - // | State | pi1 | pi2 | pi3 | Successors | - // | B | ["k"] | | *1 | {G} | - // | C | ["k"] | | *1 | {G} | - // | D | ["k"] | | *1 | {G} | - // | E | ["k"] | | | {F} | - // | F | | ["r"] | ["a"] | {H} | - // | G | | ["d"] | ["c", "w"] | {H} | - // | H | | | | {I} | - // | I | ["k"] | | | {J} | - // | J | | ["u"] | ["z"] *2 | {H} | - // - // *1 - the paper lists "a", "b", and "r" here as lookaheads. We - // do not. This is because when we trace back pi3, we never reach - // those states, as we have already acquired the necessary token - // of context earlier. I can imagine a distinct lane tracing - // algorithm that considers *sets* of conflicts and only - // terminates when all sets have context, but it's much more - // complex to implement, and seems to add little value. - // - // *2 - the paper does not list this context, and yet it seems to - // present. If you trace back "t" and "k" you reach state J which - // has the item "X = k t (*)". This "unepsilons" to "X = k t U (*) - // X P", and the lookahead from the "X" here is FIRST(P) which is - // "z". -} - -#[test] -fn paper_example_large_build() { - let _tls = Tls::test(); - let grammar = paper_example_large(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let states = LaneTableConstruct::new(&grammar, nt("G")) - .construct() - .expect("failed to build lane table states"); - - let tree = interpret::interpret(&states, tokens!["y", "s", "k", "t", "c", "b"]).unwrap(); - expect_debug( - &tree, - r#"[G: "y", [W: [U: "s"], [X: "k", "t"], [C: "c"]], "b"]"#, - ); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use test_util::{expect_debug, normalized_grammar}; +use lr1::build; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::interpret; +use lr1::state_graph::StateGraph; +use lr1::tls::Lr1Tls; +use tls::Tls; + +use super::construct::*; +use super::lane::*; +use super::table::*; + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +fn sym(t: &str) -> Symbol { + if t.chars().next().unwrap().is_uppercase() { + Symbol::Nonterminal(nt(t)) + } else { + Symbol::Terminal(term(t)) + } +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn traverse(states: &[LR0State], tokens: &[&str]) -> StateIndex { + interpret::interpret_partial(states, tokens.iter().map(|&s| term(s))) + .unwrap() + .pop() + .unwrap() +} + +/// A simplified version of the paper's initial grammar; this version +/// only has one inconsistent state (the same state they talk about in +/// the paper). +pub fn paper_example_g0() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + X "c", + Y "d", +}; + +X: () = { + "e" X, + "e",} +; + +Y: () = { + "e" Y, + "e" +}; +"#, + ) +} + +/// A (corrected) version of the sample grammar G1 from the paper. The +/// grammar as written in the text omits some items, but the diagrams +/// seem to contain the full set. I believe this is one of the +/// smallest examples that still requires splitting states from the +/// LR0 states. +pub fn paper_example_g1() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + // if "a" is input, then lookahead "d" means "reduce X" + // and lookahead "c" means "reduce "Y" + "a" X "d", + "a" Y "c", + + // if "b" is input, then lookahead "d" means "reduce Y" + // and lookahead "c" means "reduce X. + "b" X "c", + "b" Y "d", +}; + +X: () = { + "e" X, + "e", +}; + +Y: () = { + "e" Y, + "e" +}; +"#, + ) +} + +fn build_table<'grammar>( + grammar: &'grammar Grammar, + goal: &str, + tokens: &[&str], +) -> LaneTable<'grammar> { + let lr0_err = build::build_lr0_states(&grammar, nt(goal)).unwrap_err(); + + // Push the `tokens` to find the index of the inconsistent state + let inconsistent_state_index = traverse(&lr0_err.states, tokens); + assert!( + lr0_err + .conflicts + .iter() + .any(|c| c.state == inconsistent_state_index) + ); + let inconsistent_state = &lr0_err.states[inconsistent_state_index.0]; + println!("inconsistent_state={:#?}", inconsistent_state.items); + + // Extract conflicting items and trace the lanes, constructing a table + let conflicting_items = super::conflicting_actions(inconsistent_state); + println!("conflicting_items={:#?}", conflicting_items); + let first_sets = FirstSets::new(&grammar); + let state_graph = StateGraph::new(&lr0_err.states); + let mut tracer = LaneTracer::new( + &grammar, + nt("G"), + &lr0_err.states, + &first_sets, + &state_graph, + conflicting_items.len(), + ); + for (i, conflicting_item) in conflicting_items.iter().enumerate() { + tracer.start_trace( + inconsistent_state.index, + ConflictIndex::new(i), + conflicting_item.clone(), + ); + } + + tracer.into_table() +} + +#[test] +fn g0_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_g0(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["e"]); + println!("{:#?}", table); + // conflicting_actions={ + // Shift("e") // C0 + // Reduce(X = "e" => ActionFn(4)) // C1 + // Reduce(Y = "e" => ActionFn(6)) // C2 + // } + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | Successors | +| S0 | | ["c"] | ["d"] | {S3} | +| S3 | ["e"] | [] | [] | {S3} | +"#.trim_left(), + ); +} + +#[test] +fn paper_example_g1_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_g1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["a", "e"]); + println!("{:#?}", table); + // conflicting_actions={ + // Shift("e") // C0 + // Reduce(X = "e" => ActionFn(6)) // C1 + // Reduce(Y = "e" => ActionFn(8)) // C2 + // } + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | Successors | +| S1 | | ["d"] | ["c"] | {S5} | +| S2 | | ["c"] | ["d"] | {S5} | +| S5 | ["e"] | [] | [] | {S5} | +"#.trim_left(), + ); +} + +#[test] +fn paper_example_g0_build() { + let _tls = Tls::test(); + let grammar = paper_example_g0(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + // we do not require more *states* than LR(0), just different lookahead + assert_eq!(states.len(), lr0_err.states.len()); + + let tree = interpret::interpret(&states, tokens!["e", "c"]).unwrap(); + expect_debug(&tree, r#"[G: [X: "e"], "c"]"#); + + let tree = interpret::interpret(&states, tokens!["e", "e", "c"]).unwrap(); + expect_debug(&tree, r#"[G: [X: "e", [X: "e"]], "c"]"#); + + let tree = interpret::interpret(&states, tokens!["e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: [Y: "e", [Y: "e"]], "d"]"#); + + interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); +} + +#[test] +fn paper_example_g1_build() { + let _tls = Tls::test(); + let grammar = paper_example_g1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + // we require more *states* than LR(0), not just different lookahead + assert_eq!(states.len() - lr0_err.states.len(), 1); + + let tree = interpret::interpret(&states, tokens!["a", "e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: "a", [X: "e", [X: "e"]], "d"]"#); + + let tree = interpret::interpret(&states, tokens!["b", "e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: "b", [Y: "e", [Y: "e"]], "d"]"#); + + interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); +} + +pub fn paper_example_large() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + "x" W "a", + "x" V "t", + "y" W "b", + "y" V "t", + "z" W "r", + "z" V "b", + "u" U X "a", + "u" U Y "r", +}; + +W: () = { + U X C +}; + +V: () = { + U Y "d" +}; + +X: () = { + "k" "t" U X P, + "k" "t" +}; + +Y: () = { + "k" "t" U Y "u", + "k" "t" +}; + +U: () = { + U "k" "t", + "s" +}; + +E: () = { + "a", + "b", + "c", + "v", +}; + +C: () = { + "c", + "w" +}; + +P: () = { + "z" +}; +"#, + ) +} + +#[test] +fn large_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_large(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["x", "s", "k", "t"]); + println!("{:#?}", table); + + // conflicting_actions={ + // Shift("s") // C0 + // Reduce(U = U "k" "t") // C1 + // Reduce(X = "k" "t") // C2 + // Reduce(Y = "k" "t") // C3 + // } + + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | C3 | Successors | +| S1 | | ["k"] | | | {S5} | +| S2 | | ["k"] | | | {S7} | +| S3 | | ["k"] | | | {S7} | +| S4 | | ["k"] | | | {S7} | +| S5 | | | ["a"] | ["r"] | {S16} | +| S7 | | | ["c", "w"] | ["d"] | {S16} | +| S16 | | | | | {S27} | +| S27 | ["s"] | ["k"] | | | {S32} | +| S32 | | | ["z"] | ["u"] | {S16} | +"#.trim_left(), + ); + + // ^^ This differs in some particulars from what appears in the + // paper, but I believe it to be correct, and the paper to be wrong. + // + // Here is the table using the state names from the paper. I've + // marked the differences with `(*)`. Note that the paper does not + // include the C0 column (the shift). + // + // | State | pi1 | pi2 | pi3 | Successors | + // | B | ["k"] | | *1 | {G} | + // | C | ["k"] | | *1 | {G} | + // | D | ["k"] | | *1 | {G} | + // | E | ["k"] | | | {F} | + // | F | | ["r"] | ["a"] | {H} | + // | G | | ["d"] | ["c", "w"] | {H} | + // | H | | | | {I} | + // | I | ["k"] | | | {J} | + // | J | | ["u"] | ["z"] *2 | {H} | + // + // *1 - the paper lists "a", "b", and "r" here as lookaheads. We + // do not. This is because when we trace back pi3, we never reach + // those states, as we have already acquired the necessary token + // of context earlier. I can imagine a distinct lane tracing + // algorithm that considers *sets* of conflicts and only + // terminates when all sets have context, but it's much more + // complex to implement, and seems to add little value. + // + // *2 - the paper does not list this context, and yet it seems to + // present. If you trace back "t" and "k" you reach state J which + // has the item "X = k t (*)". This "unepsilons" to "X = k t U (*) + // X P", and the lookahead from the "X" here is FIRST(P) which is + // "z". +} + +#[test] +fn paper_example_large_build() { + let _tls = Tls::test(); + let grammar = paper_example_large(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + let tree = interpret::interpret(&states, tokens!["y", "s", "k", "t", "c", "b"]).unwrap(); + expect_debug( + &tree, + r#"[G: "y", [W: [U: "s"], [X: "k", "t"], [C: "c"]], "b"]"#, + ); +} diff --git a/third_party/rust/lalrpop/src/lr1/lookahead.rs b/third_party/rust/lalrpop/src/lr1/lookahead.rs index 10f264ab4fee..94d5a60f9546 100644 --- a/third_party/rust/lalrpop/src/lr1/lookahead.rs +++ b/third_party/rust/lalrpop/src/lr1/lookahead.rs @@ -1,301 +1,299 @@ -use bit_set::{self, BitSet}; -use collections::Collection; -use grammar::repr::*; -use lr1::core::*; -use lr1::tls::Lr1Tls; -use std::fmt::{Debug, Error, Formatter}; -use std::hash::Hash; - -pub trait Lookahead: Clone + Debug + Eq + Ord + Hash + Collection { - fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error>; - - fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec>; -} - -#[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct Nil; - -impl Collection for Nil { - type Item = Nil; - - fn push(&mut self, _: Nil) -> bool { - false - } -} - -impl Lookahead for Nil { - fn fmt_as_item_suffix(&self, _fmt: &mut Formatter) -> Result<(), Error> { - Ok(()) - } - - fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { - let index = this_state.index; - - let mut conflicts = vec![]; - - for (terminal, &next_state) in &this_state.shifts { - conflicts.extend( - this_state - .reductions - .iter() - .map(|&(_, production)| Conflict { - state: index, - lookahead: Nil, - production: production, - action: Action::Shift(terminal.clone(), next_state), - }), - ); - } - - if this_state.reductions.len() > 1 { - for &(_, production) in &this_state.reductions[1..] { - let other_production = this_state.reductions[0].1; - conflicts.push(Conflict { - state: index, - lookahead: Nil, - production: production, - action: Action::Reduce(other_production), - }); - } - } - - conflicts - } -} - -/// I have semi-arbitrarily decided to use the term "token" to mean -/// either one of the terminals of our language, or else the -/// pseudo-symbol EOF that represents "end of input". -#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub enum Token { - EOF, - Error, - Terminal(TerminalString), -} - -impl Lookahead for TokenSet { - fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, " {:?}", self) - } - - fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { - let mut conflicts = vec![]; - - for (terminal, &next_state) in &this_state.shifts { - let token = Token::Terminal(terminal.clone()); - let inconsistent = - this_state - .reductions - .iter() - .filter_map(|&(ref reduce_tokens, production)| { - if reduce_tokens.contains(&token) { - Some(production) - } else { - None - } - }); - let set = TokenSet::from(token.clone()); - for production in inconsistent { - conflicts.push(Conflict { - state: this_state.index, - lookahead: set.clone(), - production: production, - action: Action::Shift(terminal.clone(), next_state), - }); - } - } - - let len = this_state.reductions.len(); - for i in 0..len { - for j in i + 1..len { - let &(ref i_tokens, i_production) = &this_state.reductions[i]; - let &(ref j_tokens, j_production) = &this_state.reductions[j]; - - if i_tokens.is_disjoint(j_tokens) { - continue; - } - - conflicts.push(Conflict { - state: this_state.index, - lookahead: i_tokens.intersection(j_tokens), - production: i_production, - action: Action::Reduce(j_production), - }); - } - } - - conflicts - } -} - -impl Token { - pub fn unwrap_terminal(&self) -> &TerminalString { - match *self { - Token::Terminal(ref t) => t, - Token::EOF | Token::Error => { - panic!("`unwrap_terminal()` invoked but with EOF or Error") - } - } - } -} - -#[derive(Clone, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub struct TokenSet { - bit_set: BitSet, -} - -fn with(op: OP) -> RET -where - OP: FnOnce(&TerminalSet) -> RET, -{ - Lr1Tls::with(op) -} - -impl TokenSet { - pub fn new() -> Self { - with(|terminals| TokenSet { - bit_set: BitSet::with_capacity(terminals.all.len() + 2), - }) - } - - /// A TokenSet containing all possible terminals + EOF. - pub fn all() -> Self { - let mut s = TokenSet::new(); - with(|terminals| { - for i in 0..terminals.all.len() { - s.bit_set.insert(i); - } - s.insert_eof(); - }); - s - } - - pub fn eof() -> Self { - let mut set = TokenSet::new(); - set.insert_eof(); - set - } - - fn eof_bit(&self) -> usize { - with(|terminals| terminals.all.len()) - } - - fn bit(&self, lookahead: &Token) -> usize { - match *lookahead { - Token::EOF => self.eof_bit(), - Token::Error => self.eof_bit() + 1, - Token::Terminal(ref t) => with(|terminals| terminals.bits[t]), - } - } - - pub fn len(&self) -> usize { - self.bit_set.len() - } - - pub fn insert(&mut self, lookahead: Token) -> bool { - let bit = self.bit(&lookahead); - self.bit_set.insert(bit) - } - - pub fn insert_eof(&mut self) -> bool { - let bit = self.eof_bit(); - self.bit_set.insert(bit) - } - - pub fn union_with(&mut self, set: &TokenSet) -> bool { - let len = self.len(); - self.bit_set.union_with(&set.bit_set); - self.len() != len - } - - pub fn intersection(&self, set: &TokenSet) -> TokenSet { - let mut bit_set = self.bit_set.clone(); - bit_set.intersect_with(&set.bit_set); - TokenSet { bit_set: bit_set } - } - - pub fn contains(&self, token: &Token) -> bool { - self.bit_set.contains(self.bit(token)) - } - - pub fn contains_eof(&self) -> bool { - self.bit_set.contains(self.eof_bit()) - } - - /// If this set contains EOF, removes it from the set and returns - /// true. Otherwise, returns false. - pub fn take_eof(&mut self) -> bool { - let eof_bit = self.eof_bit(); - let contains_eof = self.bit_set.contains(eof_bit); - self.bit_set.remove(eof_bit); - contains_eof - } - - pub fn is_disjoint(&self, other: &TokenSet) -> bool { - self.bit_set.is_disjoint(&other.bit_set) - } - - pub fn is_intersecting(&self, other: &TokenSet) -> bool { - !self.is_disjoint(other) - } - - pub fn iter<'iter>(&'iter self) -> TokenSetIter<'iter> { - TokenSetIter { - bit_set: self.bit_set.iter(), - } - } -} - -pub struct TokenSetIter<'iter> { - bit_set: bit_set::Iter<'iter, u32>, -} - -impl<'iter> Iterator for TokenSetIter<'iter> { - type Item = Token; - - fn next(&mut self) -> Option { - self.bit_set.next().map(|bit| { - with(|terminals| { - if bit == terminals.all.len() + 1 { - Token::Error - } else if bit == terminals.all.len() { - Token::EOF - } else { - Token::Terminal(terminals.all[bit].clone()) - } - }) - }) - } -} - -impl<'debug> Debug for TokenSet { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let terminals: Vec<_> = self.iter().collect(); - Debug::fmt(&terminals, fmt) - } -} - -impl<'iter> IntoIterator for &'iter TokenSet { - type IntoIter = TokenSetIter<'iter>; - type Item = Token; - - fn into_iter(self) -> Self::IntoIter { - self.iter() - } -} - -impl Collection for TokenSet { - type Item = TokenSet; - - fn push(&mut self, item: TokenSet) -> bool { - self.union_with(&item) - } -} - -impl From for TokenSet { - fn from(token: Token) -> Self { - let mut set = TokenSet::new(); - set.insert(token); - set - } -} +use bit_set::{self, BitSet}; +use collections::Collection; +use lr1::core::*; +use lr1::tls::Lr1Tls; +use std::fmt::{Debug, Error, Formatter}; +use std::hash::Hash; +use grammar::repr::*; + +pub trait Lookahead: Clone + Debug + Eq + Ord + Hash + Collection { + fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error>; + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec>; +} + +#[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Nil; + +impl Collection for Nil { + type Item = Nil; + + fn push(&mut self, _: Nil) -> bool { + false + } +} + +impl Lookahead for Nil { + fn fmt_as_item_suffix(&self, _fmt: &mut Formatter) -> Result<(), Error> { + Ok(()) + } + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { + let index = this_state.index; + + let mut conflicts = vec![]; + + for (terminal, &next_state) in &this_state.shifts { + conflicts.extend( + this_state + .reductions + .iter() + .map(|&(_, production)| Conflict { + state: index, + lookahead: Nil, + production: production, + action: Action::Shift(terminal.clone(), next_state), + }), + ); + } + + if this_state.reductions.len() > 1 { + for &(_, production) in &this_state.reductions[1..] { + let other_production = this_state.reductions[0].1; + conflicts.push(Conflict { + state: index, + lookahead: Nil, + production: production, + action: Action::Reduce(other_production), + }); + } + } + + conflicts + } +} + +/// I have semi-arbitrarily decided to use the term "token" to mean +/// either one of the terminals of our language, or else the +/// pseudo-symbol EOF that represents "end of input". +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum Token { + EOF, + Error, + Terminal(TerminalString), +} + +impl Lookahead for TokenSet { + fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, " {:?}", self) + } + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { + let mut conflicts = vec![]; + + for (terminal, &next_state) in &this_state.shifts { + let token = Token::Terminal(terminal.clone()); + let inconsistent = this_state.reductions.iter().filter_map( + |&(ref reduce_tokens, production)| { + if reduce_tokens.contains(&token) { + Some(production) + } else { + None + } + }, + ); + let set = TokenSet::from(token.clone()); + for production in inconsistent { + conflicts.push(Conflict { + state: this_state.index, + lookahead: set.clone(), + production: production, + action: Action::Shift(terminal.clone(), next_state), + }); + } + } + + let len = this_state.reductions.len(); + for i in 0..len { + for j in i + 1..len { + let &(ref i_tokens, i_production) = &this_state.reductions[i]; + let &(ref j_tokens, j_production) = &this_state.reductions[j]; + + if i_tokens.is_disjoint(j_tokens) { + continue; + } + + conflicts.push(Conflict { + state: this_state.index, + lookahead: i_tokens.intersection(j_tokens), + production: i_production, + action: Action::Reduce(j_production), + }); + } + } + + conflicts + } +} + +impl Token { + pub fn unwrap_terminal(&self) -> &TerminalString { + match *self { + Token::Terminal(ref t) => t, + Token::EOF | Token::Error => { + panic!("`unwrap_terminal()` invoked but with EOF or Error") + } + } + } +} + +#[derive(Clone, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct TokenSet { + bit_set: BitSet, +} + +fn with(op: OP) -> RET +where + OP: FnOnce(&TerminalSet) -> RET, +{ + Lr1Tls::with(op) +} + +impl TokenSet { + pub fn new() -> Self { + with(|terminals| TokenSet { + bit_set: BitSet::with_capacity(terminals.all.len() + 2), + }) + } + + /// A TokenSet containing all possible terminals + EOF. + pub fn all() -> Self { + let mut s = TokenSet::new(); + with(|terminals| { + for i in 0..terminals.all.len() { + s.bit_set.insert(i); + } + s.insert_eof(); + }); + s + } + + pub fn eof() -> Self { + let mut set = TokenSet::new(); + set.insert_eof(); + set + } + + fn eof_bit(&self) -> usize { + with(|terminals| terminals.all.len()) + } + + fn bit(&self, lookahead: &Token) -> usize { + match *lookahead { + Token::EOF => self.eof_bit(), + Token::Error => self.eof_bit() + 1, + Token::Terminal(ref t) => with(|terminals| terminals.bits[t]), + } + } + + pub fn len(&self) -> usize { + self.bit_set.len() + } + + pub fn insert(&mut self, lookahead: Token) -> bool { + let bit = self.bit(&lookahead); + self.bit_set.insert(bit) + } + + pub fn insert_eof(&mut self) -> bool { + let bit = self.eof_bit(); + self.bit_set.insert(bit) + } + + pub fn union_with(&mut self, set: &TokenSet) -> bool { + let len = self.len(); + self.bit_set.union_with(&set.bit_set); + self.len() != len + } + + pub fn intersection(&self, set: &TokenSet) -> TokenSet { + let mut bit_set = self.bit_set.clone(); + bit_set.intersect_with(&set.bit_set); + TokenSet { bit_set: bit_set } + } + + pub fn contains(&self, token: &Token) -> bool { + self.bit_set.contains(self.bit(token)) + } + + pub fn contains_eof(&self) -> bool { + self.bit_set.contains(self.eof_bit()) + } + + /// If this set contains EOF, removes it from the set and returns + /// true. Otherwise, returns false. + pub fn take_eof(&mut self) -> bool { + let eof_bit = self.eof_bit(); + let contains_eof = self.bit_set.contains(eof_bit); + self.bit_set.remove(eof_bit); + contains_eof + } + + pub fn is_disjoint(&self, other: &TokenSet) -> bool { + self.bit_set.is_disjoint(&other.bit_set) + } + + pub fn is_intersecting(&self, other: &TokenSet) -> bool { + !self.is_disjoint(other) + } + + pub fn iter<'iter>(&'iter self) -> TokenSetIter<'iter> { + TokenSetIter { + bit_set: self.bit_set.iter(), + } + } +} + +pub struct TokenSetIter<'iter> { + bit_set: bit_set::Iter<'iter, u32>, +} + +impl<'iter> Iterator for TokenSetIter<'iter> { + type Item = Token; + + fn next(&mut self) -> Option { + self.bit_set.next().map(|bit| { + with(|terminals| { + if bit == terminals.all.len() + 1 { + Token::Error + } else if bit == terminals.all.len() { + Token::EOF + } else { + Token::Terminal(terminals.all[bit].clone()) + } + }) + }) + } +} + +impl<'debug> Debug for TokenSet { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let terminals: Vec<_> = self.iter().collect(); + Debug::fmt(&terminals, fmt) + } +} + +impl<'iter> IntoIterator for &'iter TokenSet { + type IntoIter = TokenSetIter<'iter>; + type Item = Token; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +impl Collection for TokenSet { + type Item = TokenSet; + + fn push(&mut self, item: TokenSet) -> bool { + self.union_with(&item) + } +} + +impl From for TokenSet { + fn from(token: Token) -> Self { + let mut set = TokenSet::new(); + set.insert(token); + set + } +} diff --git a/third_party/rust/lalrpop/src/lr1/mod.rs b/third_party/rust/lalrpop/src/lr1/mod.rs index ea41535e6348..b87ea1898293 100644 --- a/third_party/rust/lalrpop/src/lr1/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/mod.rs @@ -1,43 +1,43 @@ -//! Naive LR(1) generation algorithm. - -use grammar::repr::*; - -mod build; -mod build_lalr; -pub mod codegen; -mod core; -mod error; -mod example; -mod first; -mod lane_table; -mod lookahead; -mod report; -mod state_graph; -mod tls; -mod trace; -use std::io::{self, Write}; - -#[cfg(test)] -mod interpret; - -pub use self::core::{LR1Result, LR1TableConstructionError}; -pub use self::error::report_error; -pub use self::tls::Lr1Tls; - -pub fn build_states<'grammar>( - grammar: &'grammar Grammar, - start: NonterminalString, -) -> LR1Result<'grammar> { - if !grammar.algorithm.lalr { - build::build_lr1_states(grammar, start) - } else { - build_lalr::build_lalr_states(grammar, start) - } -} - -pub fn generate_report<'grammar, W: Write + 'grammar>( - out: &'grammar mut W, - lr1result: &LR1Result<'grammar>, -) -> io::Result<()> { - report::generate_report(out, lr1result) -} +//! Naive LR(1) generation algorithm. + +use grammar::repr::*; + +pub mod codegen; +mod build; +mod build_lalr; +mod core; +mod error; +mod example; +mod first; +mod lane_table; +mod lookahead; +mod state_graph; +mod tls; +mod trace; +mod report; +use std::io::{self, Write}; + +#[cfg(test)] +mod interpret; + +pub use self::core::{LR1Result, LR1TableConstructionError}; +pub use self::error::report_error; +pub use self::tls::Lr1Tls; + +pub fn build_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + if !grammar.algorithm.lalr { + build::build_lr1_states(grammar, start) + } else { + build_lalr::build_lalr_states(grammar, start) + } +} + +pub fn generate_report<'grammar, W: Write + 'grammar>( + out: &'grammar mut W, + lr1result: &LR1Result<'grammar>, +) -> io::Result<()> { + report::generate_report(out, lr1result) +} diff --git a/third_party/rust/lalrpop/src/lr1/report/mod.rs b/third_party/rust/lalrpop/src/lr1/report/mod.rs index d0e4a61e3de8..d62d897f603c 100644 --- a/third_party/rust/lalrpop/src/lr1/report/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/report/mod.rs @@ -1,446 +1,446 @@ -use collections::*; -use grammar::repr::*; -use lr1::core::*; -use std::cmp::max; -use std::io::{self, Write}; - -use super::lookahead::*; - -pub fn generate_report<'grammar, W: Write + 'grammar>( - out: &'grammar mut W, - lr1result: &LR1Result<'grammar>, -) -> io::Result<()> { - let mut generator = ReportGenerator::new(out); - generator.report_lr_table_construction(lr1result) -} - -static INDENT_STRING: &'static str = " "; - -struct ReportGenerator<'report, W> -where - W: Write + 'report, -{ - pub out: &'report mut W, -} - -type ConflictStateMap<'report, 'grammar, L> = Map>>; - -impl<'report, W> ReportGenerator<'report, W> -where - W: Write + 'report, -{ - pub fn new(out: &'report mut W) -> Self { - ReportGenerator { out: out } - } - - pub fn report_lr_table_construction<'grammar: 'report, L>( - &mut self, - lr1result: &'report LRResult<'grammar, L>, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - try!(self.write_header()); - try!(self.write_section_header("Summary")); - try!(writeln!(self.out, "")); - match lr1result { - &Ok(ref states) => { - try!(writeln!(self.out, "Constructed {} states", states.len())); - try!(self.report_states(&states, &Map::new())); - } - &Err(ref table_construction_error) => { - try!(writeln!(self.out, "Failure")); - try!(writeln!( - self.out, - "Constructed {} states", - table_construction_error.states.len() - )); - try!(writeln!( - self.out, - "Has {} conflicts", - table_construction_error.conflicts.len() - )); - let (sr, rr, conflict_map) = - self.process_conflicts(&table_construction_error.conflicts); - if (sr > 0) { - try!(writeln!(self.out, "{}shift/reduce: {}", INDENT_STRING, sr)); - } - if (rr > 0) { - try!(writeln!(self.out, "{}reduce/reduce: {}", INDENT_STRING, rr)); - } - try!(write!(self.out, "States with conflicts: ")); - for state in conflict_map.keys() { - try!(write!(self.out, " {}", state)); - } - try!(writeln!(self.out, "")); - try!(self.report_states(&table_construction_error.states, &conflict_map)); - } - }; - Ok(()) - } - - fn process_conflicts<'grammar, L>( - &mut self, - conflicts: &'report Vec>, - ) -> (usize, usize, ConflictStateMap<'report, 'grammar, L>) - where - L: Lookahead, - { - let mut sr: usize = 0; - let mut rr: usize = 0; - let mut conflict_map = Map::new(); - for conflict in conflicts.iter() { - match conflict.action { - Action::Shift(_, _) => sr = sr + 1, - Action::Reduce(_) => rr = rr + 1, - } - conflict_map - .entry(conflict.state) - .or_insert(vec![]) - .push(conflict); - } - (sr, rr, conflict_map) - } - - fn report_states<'grammar, L>( - &mut self, - states: &Vec>, - conflict_map: &ConflictStateMap<'report, 'grammar, L>, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - try!(self.write_section_header("State Table")); - for ref state in states { - try!(writeln!(self.out, "")); - try!(self.report_state(&state, conflict_map.get(&state.index))); - } - Ok(()) - } - - fn report_state<'grammar, L>( - &mut self, - state: &State<'grammar, L>, - conflicts_opt: Option<&Vec<&'report Conflict<'grammar, L>>>, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - try!(writeln!(self.out, "State {} {{", state.index)); - try!(self.write_items(&state.items)); - if (state.reductions.len() > 0) { - try!(writeln!(self.out, "")); - try!(self.write_reductions(&state.reductions)); - } - - let max_width = get_width_for_gotos(state); - - if (!state.shifts.len() > 0) { - try!(writeln!(self.out, "")); - try!(self.write_shifts(&state.shifts, max_width)); - } - - if (!state.gotos.len() > 0) { - try!(writeln!(self.out, "")); - try!(self.write_gotos(&state.gotos, max_width)); - } - - if let Some(conflicts) = conflicts_opt { - for conflict in conflicts.iter() { - try!(self.write_conflict(conflict)); - } - } - - try!(writeln!(self.out, "}}")); - Ok(()) - } - - fn write_conflict<'grammar, L>(&mut self, conflict: &Conflict<'grammar, L>) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - try!(writeln!(self.out, "")); - match conflict.action { - Action::Shift(ref terminal, state) => { - let max_width = max( - terminal.display_len(), - conflict.production.nonterminal.len(), - ); - try!(writeln!(self.out, "{}shift/reduce conflict", INDENT_STRING)); - try!(write!( - self.out, - "{}{}reduction ", - INDENT_STRING, INDENT_STRING - )); - try!(self.write_production(conflict.production, max_width)); - let sterminal = format!("{}", terminal); - try!(writeln!( - self.out, - "{}{}shift {:width$} shift and goto {}", - INDENT_STRING, - INDENT_STRING, - sterminal, - state, - width = max_width - )); - } - Action::Reduce(other_production) => { - let max_width = max( - other_production.nonterminal.len(), - conflict.production.nonterminal.len(), - ); - try!(writeln!( - self.out, - "{}reduce/reduce conflict", - INDENT_STRING - )); - try!(write!( - self.out, - "{}{}reduction ", - INDENT_STRING, INDENT_STRING - )); - try!(self.write_production(conflict.production, max_width)); - try!(write!( - self.out, - "{}{}reduction ", - INDENT_STRING, INDENT_STRING - )); - try!(self.write_production(other_production, max_width)); - } - } - try!(self.write_lookahead(&conflict.lookahead)); - Ok(()) - } - - fn write_items<'grammar, L>(&mut self, items: &Items<'grammar, L>) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - let max_width = get_max_length(items.vec.iter().map(|item| &item.production.nonterminal)); - - for item in items.vec.iter() { - try!(writeln!(self.out, "")); - try!(self.write_item(item, max_width)); - } - Ok(()) - } - - fn write_item<'grammar, L>( - &mut self, - item: &Item<'grammar, L>, - max_width: usize, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - try!(write!(self.out, "{}", INDENT_STRING)); - // stringize it first to allow handle :width by Display for string - let s = format!("{}", item.production.nonterminal); - try!(write!(self.out, "{:width$} ->", s, width = max_width)); - for i in 0..item.index { - try!(write!(self.out, " {}", item.production.symbols[i])); - } - try!(write!(self.out, " .")); - for i in item.index..item.production.symbols.len() { - try!(write!(self.out, " {}", item.production.symbols[i])); - } - try!(writeln!(self.out, "")); - try!(self.write_lookahead(&item.lookahead)); - Ok(()) - } - - fn write_shifts( - &mut self, - shifts: &Map, - max_width: usize, - ) -> io::Result<()> { - for entry in shifts { - try!(write!(self.out, "{}", INDENT_STRING)); - // stringize it first to allow handle :width by Display for string - let s = format!("{}", entry.0); - try!(writeln!( - self.out, - "{:width$} shift and goto {}", - s, - entry.1, - width = max_width - )); - } - Ok(()) - } - - fn write_reductions<'grammar, L>( - &mut self, - reductions: &Vec<(L, &'grammar Production)>, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - let max_width = get_max_length(reductions.into_iter().map(|p| &p.1.nonterminal)); - for reduction in reductions.iter() { - try!(writeln!(self.out, "")); - try!(self.write_reduction(reduction, max_width)); - } - Ok(()) - } - - fn write_production<'grammar>( - &mut self, - production: &'grammar Production, - max_width: usize, - ) -> io::Result<()> { - try!(write!( - self.out, - "{:width$} ->", - production.nonterminal, - width = max_width - )); - for symbol in production.symbols.iter() { - try!(write!(self.out, " {}", symbol)); - } - try!(writeln!(self.out, "")); - Ok(()) - } - - fn write_reduction<'grammar, L>( - &mut self, - reduction: &(L, &'grammar Production), - max_width: usize, - ) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - let ref production = reduction.1; - try!(write!(self.out, "{}reduction ", INDENT_STRING)); - try!(self.write_production(production, max_width)); - try!(self.write_lookahead(&reduction.0)); - Ok(()) - } - - fn write_lookahead(&mut self, lookahead: &L) -> io::Result<()> - where - L: Lookahead + LookaheadPrinter, - { - if (lookahead.has_anything_to_print()) { - try!(write!( - self.out, - "{}{}lookahead", - INDENT_STRING, INDENT_STRING - )); - try!(lookahead.print(self.out)); - try!(writeln!(self.out, "")); - } - Ok(()) - } - - fn write_gotos( - &mut self, - gotos: &Map, - max_width: usize, - ) -> io::Result<()> { - for entry in gotos { - try!(write!(self.out, "{}", INDENT_STRING)); - // stringize it first to allow handle :width by Display for string - let s = format!("{}", entry.0); - try!(writeln!( - self.out, - "{:width$} goto {}", - s, - entry.1, - width = max_width - )); - } - Ok(()) - } - - fn write_section_header(&mut self, title: &str) -> io::Result<()> { - try!(writeln!(self.out, "\n{}", title)); - try!(writeln!( - self.out, - "----------------------------------------" - )); - Ok(()) - } - - fn write_header(&mut self) -> io::Result<()> { - try!(writeln!(self.out, "Lalrpop Report File")); - try!(writeln!( - self.out, - "========================================" - )); - Ok(()) - } -} - -// helpers - -trait LookaheadPrinter -where - W: Write, -{ - fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()>; - - fn has_anything_to_print<'report>(self: &Self) -> bool; -} - -impl LookaheadPrinter for Nil -where - W: Write, -{ - fn print<'report, 'grammar>(self: &Self, _: &'report mut W) -> io::Result<()> { - Ok(()) - } - - fn has_anything_to_print<'report>(self: &Self) -> bool { - false - } -} - -impl LookaheadPrinter for TokenSet -where - W: Write, -{ - fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()> { - for i in self.iter() { - try!(write!(out, " {}", i)) - } - Ok(()) - } - - fn has_anything_to_print<'report>(self: &Self) -> bool { - self.len() > 0 - } -} - -trait HasDisplayLen { - fn display_len(&self) -> usize; -} - -impl<'a> HasDisplayLen for &'a TerminalString { - fn display_len(&self) -> usize { - TerminalString::display_len(self) - } -} - -impl<'a> HasDisplayLen for &'a NonterminalString { - fn display_len(&self) -> usize { - self.len() - } -} - -fn get_max_length(m: I) -> usize -where - I: Iterator, - I::Item: HasDisplayLen, -{ - m.map(|k| k.display_len()).fold(0, |acc, x| max(acc, x)) -} - -fn get_width_for_gotos<'grammar, L>(state: &State<'grammar, L>) -> usize -where - L: Lookahead, -{ - let shifts_max_width = get_max_length(state.shifts.keys()); - let gotos_max_width = get_max_length(state.gotos.keys()); - max(shifts_max_width, gotos_max_width) -} +use grammar::repr::*; +use lr1::core::*; +use std::io::{self, Write}; +use std::cmp::max; +use collections::*; + +use super::lookahead::*; + +pub fn generate_report<'grammar, W: Write + 'grammar>( + out: &'grammar mut W, + lr1result: &LR1Result<'grammar>, +) -> io::Result<()> { + let mut generator = ReportGenerator::new(out); + generator.report_lr_table_construction(lr1result) +} + +static INDENT_STRING: &'static str = " "; + +struct ReportGenerator<'report, W> +where + W: Write + 'report, +{ + pub out: &'report mut W, +} + +type ConflictStateMap<'report, 'grammar, L> = Map>>; + +impl<'report, W> ReportGenerator<'report, W> +where + W: Write + 'report, +{ + pub fn new(out: &'report mut W) -> Self { + ReportGenerator { out: out } + } + + pub fn report_lr_table_construction<'grammar: 'report, L>( + &mut self, + lr1result: &'report LRResult<'grammar, L>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(self.write_header()); + try!(self.write_section_header("Summary")); + try!(writeln!(self.out, "")); + match lr1result { + &Ok(ref states) => { + try!(writeln!(self.out, "Constructed {} states", states.len())); + try!(self.report_states(&states, &Map::new())); + } + &Err(ref table_construction_error) => { + try!(writeln!(self.out, "Failure")); + try!(writeln!( + self.out, + "Constructed {} states", + table_construction_error.states.len() + )); + try!(writeln!( + self.out, + "Has {} conflicts", + table_construction_error.conflicts.len() + )); + let (sr, rr, conflict_map) = + self.process_conflicts(&table_construction_error.conflicts); + if (sr > 0) { + try!(writeln!(self.out, "{}shift/reduce: {}", INDENT_STRING, sr)); + } + if (rr > 0) { + try!(writeln!(self.out, "{}reduce/reduce: {}", INDENT_STRING, rr)); + } + try!(write!(self.out, "States with conflicts: ")); + for state in conflict_map.keys() { + try!(write!(self.out, " {}", state)); + } + try!(writeln!(self.out, "")); + try!(self.report_states(&table_construction_error.states, &conflict_map)); + } + }; + Ok(()) + } + + fn process_conflicts<'grammar, L>( + &mut self, + conflicts: &'report Vec>, + ) -> (usize, usize, ConflictStateMap<'report, 'grammar, L>) + where + L: Lookahead, + { + let mut sr: usize = 0; + let mut rr: usize = 0; + let mut conflict_map = Map::new(); + for conflict in conflicts.iter() { + match conflict.action { + Action::Shift(_, _) => sr = sr + 1, + Action::Reduce(_) => rr = rr + 1, + } + conflict_map + .entry(conflict.state) + .or_insert(vec![]) + .push(conflict); + } + (sr, rr, conflict_map) + } + + fn report_states<'grammar, L>( + &mut self, + states: &Vec>, + conflict_map: &ConflictStateMap<'report, 'grammar, L>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(self.write_section_header("State Table")); + for ref state in states { + try!(writeln!(self.out, "")); + try!(self.report_state(&state, conflict_map.get(&state.index))); + } + Ok(()) + } + + fn report_state<'grammar, L>( + &mut self, + state: &State<'grammar, L>, + conflicts_opt: Option<&Vec<&'report Conflict<'grammar, L>>>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(writeln!(self.out, "State {} {{", state.index)); + try!(self.write_items(&state.items)); + if (state.reductions.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_reductions(&state.reductions)); + } + + let max_width = get_width_for_gotos(state); + + if (!state.shifts.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_shifts(&state.shifts, max_width)); + } + + if (!state.gotos.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_gotos(&state.gotos, max_width)); + } + + if let Some(conflicts) = conflicts_opt { + for conflict in conflicts.iter() { + try!(self.write_conflict(conflict)); + } + } + + try!(writeln!(self.out, "}}")); + Ok(()) + } + + fn write_conflict<'grammar, L>(&mut self, conflict: &Conflict<'grammar, L>) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(writeln!(self.out, "")); + match conflict.action { + Action::Shift(ref terminal, state) => { + let max_width = max( + terminal.display_len(), + conflict.production.nonterminal.len(), + ); + try!(writeln!(self.out, "{}shift/reduce conflict", INDENT_STRING)); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(conflict.production, max_width)); + let sterminal = format!("{}", terminal); + try!(writeln!( + self.out, + "{}{}shift {:width$} shift and goto {}", + INDENT_STRING, + INDENT_STRING, + sterminal, + state, + width = max_width + )); + } + Action::Reduce(other_production) => { + let max_width = max( + other_production.nonterminal.len(), + conflict.production.nonterminal.len(), + ); + try!(writeln!( + self.out, + "{}reduce/reduce conflict", + INDENT_STRING + )); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(conflict.production, max_width)); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(other_production, max_width)); + } + } + try!(self.write_lookahead(&conflict.lookahead)); + Ok(()) + } + + fn write_items<'grammar, L>(&mut self, items: &Items<'grammar, L>) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let max_width = get_max_length(items.vec.iter().map(|item| &item.production.nonterminal)); + + for item in items.vec.iter() { + try!(writeln!(self.out, "")); + try!(self.write_item(item, max_width)); + } + Ok(()) + } + + fn write_item<'grammar, L>( + &mut self, + item: &Item<'grammar, L>, + max_width: usize, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", item.production.nonterminal); + try!(write!(self.out, "{:width$} ->", s, width = max_width)); + for i in 0..item.index { + try!(write!(self.out, " {}", item.production.symbols[i])); + } + try!(write!(self.out, " .")); + for i in item.index..item.production.symbols.len() { + try!(write!(self.out, " {}", item.production.symbols[i])); + } + try!(writeln!(self.out, "")); + try!(self.write_lookahead(&item.lookahead)); + Ok(()) + } + + fn write_shifts( + &mut self, + shifts: &Map, + max_width: usize, + ) -> io::Result<()> { + for entry in shifts { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", entry.0); + try!(writeln!( + self.out, + "{:width$} shift and goto {}", + s, + entry.1, + width = max_width + )); + } + Ok(()) + } + + fn write_reductions<'grammar, L>( + &mut self, + reductions: &Vec<(L, &'grammar Production)>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let max_width = get_max_length(reductions.into_iter().map(|p| &p.1.nonterminal)); + for reduction in reductions.iter() { + try!(writeln!(self.out, "")); + try!(self.write_reduction(reduction, max_width)); + } + Ok(()) + } + + fn write_production<'grammar>( + &mut self, + production: &'grammar Production, + max_width: usize, + ) -> io::Result<()> { + try!(write!( + self.out, + "{:width$} ->", + production.nonterminal, + width = max_width + )); + for symbol in production.symbols.iter() { + try!(write!(self.out, " {}", symbol)); + } + try!(writeln!(self.out, "")); + Ok(()) + } + + fn write_reduction<'grammar, L>( + &mut self, + reduction: &(L, &'grammar Production), + max_width: usize, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let ref production = reduction.1; + try!(write!(self.out, "{}reduction ", INDENT_STRING)); + try!(self.write_production(production, max_width)); + try!(self.write_lookahead(&reduction.0)); + Ok(()) + } + + fn write_lookahead(&mut self, lookahead: &L) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + if (lookahead.has_anything_to_print()) { + try!(write!( + self.out, + "{}{}lookahead", + INDENT_STRING, INDENT_STRING + )); + try!(lookahead.print(self.out)); + try!(writeln!(self.out, "")); + } + Ok(()) + } + + fn write_gotos( + &mut self, + gotos: &Map, + max_width: usize, + ) -> io::Result<()> { + for entry in gotos { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", entry.0); + try!(writeln!( + self.out, + "{:width$} goto {}", + s, + entry.1, + width = max_width + )); + } + Ok(()) + } + + fn write_section_header(&mut self, title: &str) -> io::Result<()> { + try!(writeln!(self.out, "\n{}", title)); + try!(writeln!( + self.out, + "----------------------------------------" + )); + Ok(()) + } + + fn write_header(&mut self) -> io::Result<()> { + try!(writeln!(self.out, "Lalrpop Report File")); + try!(writeln!( + self.out, + "========================================" + )); + Ok(()) + } +} + +// helpers + +trait LookaheadPrinter +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()>; + + fn has_anything_to_print<'report>(self: &Self) -> bool; +} + +impl LookaheadPrinter for Nil +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, _: &'report mut W) -> io::Result<()> { + Ok(()) + } + + fn has_anything_to_print<'report>(self: &Self) -> bool { + false + } +} + +impl LookaheadPrinter for TokenSet +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()> { + for i in self.iter() { + try!(write!(out, " {}", i)) + } + Ok(()) + } + + fn has_anything_to_print<'report>(self: &Self) -> bool { + self.len() > 0 + } +} + +trait HasDisplayLen { + fn display_len(&self) -> usize; +} + +impl<'a> HasDisplayLen for &'a TerminalString { + fn display_len(&self) -> usize { + TerminalString::display_len(self) + } +} + +impl<'a> HasDisplayLen for &'a NonterminalString { + fn display_len(&self) -> usize { + self.len() + } +} + +fn get_max_length(m: I) -> usize +where + I: Iterator, + I::Item: HasDisplayLen, +{ + m.map(|k| k.display_len()).fold(0, |acc, x| max(acc, x)) +} + +fn get_width_for_gotos<'grammar, L>(state: &State<'grammar, L>) -> usize +where + L: Lookahead, +{ + let shifts_max_width = get_max_length(state.shifts.keys()); + let gotos_max_width = get_max_length(state.gotos.keys()); + max(shifts_max_width, gotos_max_width) +} diff --git a/third_party/rust/lalrpop/src/lr1/state_graph.rs b/third_party/rust/lalrpop/src/lr1/state_graph.rs index caa7cdc9c0b8..8639845e4c90 100644 --- a/third_party/rust/lalrpop/src/lr1/state_graph.rs +++ b/third_party/rust/lalrpop/src/lr1/state_graph.rs @@ -1,94 +1,94 @@ -use grammar::repr::*; -use lr1::core::*; -use lr1::lookahead::Lookahead; -use petgraph::graph::NodeIndex; -use petgraph::prelude::*; -use petgraph::{EdgeDirection, Graph}; - -// Each state `s` corresponds to the node in the graph with index -// `s`. The edges are the shift transitions. -pub struct StateGraph { - graph: Graph<(), Symbol>, -} - -impl StateGraph { - pub fn new<'grammar, L>(states: &[State<'grammar, L>]) -> StateGraph - where - L: Lookahead, - { - let mut graph = Graph::new(); - - // First, create the nodes. - for i in 0..states.len() { - let j = graph.add_node(()); - assert_eq!(i, j.index()); - } - - // Add in the edges. - for (i, state) in states.iter().enumerate() { - // Successors of a node arise from: - // - shifts (found in the `conflicts` and `tokens` maps) - // - gotos (found in the `gotos` map) - graph.extend_with_edges( - state - .shifts - .iter() - .map(|(terminal, &state)| (Symbol::Terminal(terminal.clone()), state)) - .chain( - state - .gotos - .iter() - .map(|(nt, &state)| (Symbol::Nonterminal(nt.clone()), state)), - ) - .map(|(symbol, successor)| { - (NodeIndex::new(i), NodeIndex::new(successor.0), symbol) - }), - ); - } - - StateGraph { graph: graph } - } - - /// Given a list of symbols `[X, Y, Z]`, traces back from - /// `initial_state_index` to find the set of states whence we - /// could have arrived at `initial_state_index` after pushing `X`, - /// `Y`, and `Z`. - pub fn trace_back( - &self, - initial_state_index: StateIndex, - initial_symbols: &[Symbol], - ) -> Vec { - let mut stack = vec![(initial_state_index, initial_symbols)]; - let mut result = vec![]; - while let Some((state_index, symbols)) = stack.pop() { - if let Some((head, tail)) = symbols.split_last() { - stack.extend( - self.graph - .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) - .filter(|edge| edge.weight() == head) - .map(|edge| (StateIndex(edge.source().index()), tail)), - ); - } else { - result.push(state_index); - } - } - result.sort(); - result.dedup(); - result - } - - pub fn successors(&self, state_index: StateIndex) -> Vec { - self.graph - .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Outgoing) - .map(|edge| StateIndex(edge.target().index())) - .collect() - } - - pub fn predecessors(&self, state_index: StateIndex, symbol: Symbol) -> Vec { - self.graph - .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) - .filter(|edge| *edge.weight() == symbol) - .map(|edge| StateIndex(edge.source().index())) - .collect() - } -} +use grammar::repr::*; +use lr1::core::*; +use lr1::lookahead::Lookahead; +use petgraph::{EdgeDirection, Graph}; +use petgraph::graph::NodeIndex; +use petgraph::prelude::*; + +// Each state `s` corresponds to the node in the graph with index +// `s`. The edges are the shift transitions. +pub struct StateGraph { + graph: Graph<(), Symbol>, +} + +impl StateGraph { + pub fn new<'grammar, L>(states: &[State<'grammar, L>]) -> StateGraph + where + L: Lookahead, + { + let mut graph = Graph::new(); + + // First, create the nodes. + for i in 0..states.len() { + let j = graph.add_node(()); + assert_eq!(i, j.index()); + } + + // Add in the edges. + for (i, state) in states.iter().enumerate() { + // Successors of a node arise from: + // - shifts (found in the `conflicts` and `tokens` maps) + // - gotos (found in the `gotos` map) + graph.extend_with_edges( + state + .shifts + .iter() + .map(|(terminal, &state)| (Symbol::Terminal(terminal.clone()), state)) + .chain( + state + .gotos + .iter() + .map(|(nt, &state)| (Symbol::Nonterminal(nt.clone()), state)), + ) + .map(|(symbol, successor)| { + (NodeIndex::new(i), NodeIndex::new(successor.0), symbol) + }), + ); + } + + StateGraph { graph: graph } + } + + /// Given a list of symbols `[X, Y, Z]`, traces back from + /// `initial_state_index` to find the set of states whence we + /// could have arrived at `initial_state_index` after pushing `X`, + /// `Y`, and `Z`. + pub fn trace_back( + &self, + initial_state_index: StateIndex, + initial_symbols: &[Symbol], + ) -> Vec { + let mut stack = vec![(initial_state_index, initial_symbols)]; + let mut result = vec![]; + while let Some((state_index, symbols)) = stack.pop() { + if let Some((head, tail)) = symbols.split_last() { + stack.extend( + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) + .filter(|edge| edge.weight() == head) + .map(|edge| (StateIndex(edge.source().index()), tail)), + ); + } else { + result.push(state_index); + } + } + result.sort(); + result.dedup(); + result + } + + pub fn successors(&self, state_index: StateIndex) -> Vec { + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Outgoing) + .map(|edge| StateIndex(edge.target().index())) + .collect() + } + + pub fn predecessors(&self, state_index: StateIndex, symbol: Symbol) -> Vec { + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) + .filter(|edge| *edge.weight() == symbol) + .map(|edge| StateIndex(edge.source().index())) + .collect() + } +} diff --git a/third_party/rust/lalrpop/src/lr1/tls.rs b/third_party/rust/lalrpop/src/lr1/tls.rs index aff50c396cf6..3f68a45cc1ec 100644 --- a/third_party/rust/lalrpop/src/lr1/tls.rs +++ b/third_party/rust/lalrpop/src/lr1/tls.rs @@ -1,40 +1,40 @@ -//! Thread-local data specific to LR(1) processing. - -use grammar::repr::TerminalSet; -use std::cell::RefCell; -use std::mem; -use std::sync::Arc; - -thread_local! { - static TERMINALS: RefCell>> = RefCell::new(None) -} - -pub struct Lr1Tls { - old_value: Option>, -} - -impl Lr1Tls { - pub fn install(terminals: TerminalSet) -> Lr1Tls { - let old_value = TERMINALS.with(|s| { - let mut s = s.borrow_mut(); - mem::replace(&mut *s, Some(Arc::new(terminals))) - }); - - Lr1Tls { - old_value: old_value, - } - } - - pub fn with(op: OP) -> RET - where - OP: FnOnce(&TerminalSet) -> RET, - { - TERMINALS.with(|s| op(s.borrow().as_ref().expect("LR1 TLS not installed"))) - } -} - -impl Drop for Lr1Tls { - fn drop(&mut self) { - TERMINALS.with(|s| *s.borrow_mut() = self.old_value.take()); - } -} +//! Thread-local data specific to LR(1) processing. + +use grammar::repr::TerminalSet; +use std::cell::RefCell; +use std::mem; +use std::sync::Arc; + +thread_local! { + static TERMINALS: RefCell>> = RefCell::new(None) +} + +pub struct Lr1Tls { + old_value: Option>, +} + +impl Lr1Tls { + pub fn install(terminals: TerminalSet) -> Lr1Tls { + let old_value = TERMINALS.with(|s| { + let mut s = s.borrow_mut(); + mem::replace(&mut *s, Some(Arc::new(terminals))) + }); + + Lr1Tls { + old_value: old_value, + } + } + + pub fn with(op: OP) -> RET + where + OP: FnOnce(&TerminalSet) -> RET, + { + TERMINALS.with(|s| op(s.borrow().as_ref().expect("LR1 TLS not installed"))) + } +} + +impl Drop for Lr1Tls { + fn drop(&mut self) { + TERMINALS.with(|s| *s.borrow_mut() = self.old_value.take()); + } +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/mod.rs b/third_party/rust/lalrpop/src/lr1/trace/mod.rs index ba0a7ff3dde7..d928a205a530 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/mod.rs @@ -1,31 +1,31 @@ -use collections::{set, Set}; -use grammar::repr::*; -use lr1::core::*; -use lr1::first::FirstSets; -use lr1::state_graph::StateGraph; - -mod reduce; -mod shift; -mod trace_graph; - -pub struct Tracer<'trace, 'grammar: 'trace> { - states: &'trace [LR1State<'grammar>], - first_sets: &'trace FirstSets, - state_graph: StateGraph, - trace_graph: TraceGraph<'grammar>, - visited_set: Set<(StateIndex, NonterminalString)>, -} - -impl<'trace, 'grammar> Tracer<'trace, 'grammar> { - pub fn new(first_sets: &'trace FirstSets, states: &'trace [LR1State<'grammar>]) -> Self { - Tracer { - states: states, - first_sets: first_sets, - state_graph: StateGraph::new(states), - trace_graph: TraceGraph::new(), - visited_set: set(), - } - } -} - -pub use self::trace_graph::TraceGraph; +use collections::{set, Set}; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::state_graph::StateGraph; +use grammar::repr::*; + +mod reduce; +mod shift; +mod trace_graph; + +pub struct Tracer<'trace, 'grammar: 'trace> { + states: &'trace [LR1State<'grammar>], + first_sets: &'trace FirstSets, + state_graph: StateGraph, + trace_graph: TraceGraph<'grammar>, + visited_set: Set<(StateIndex, NonterminalString)>, +} + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn new(first_sets: &'trace FirstSets, states: &'trace [LR1State<'grammar>]) -> Self { + Tracer { + states: states, + first_sets: first_sets, + state_graph: StateGraph::new(states), + trace_graph: TraceGraph::new(), + visited_set: set(), + } + } +} + +pub use self::trace_graph::TraceGraph; diff --git a/third_party/rust/lalrpop/src/lr1/trace/reduce/mod.rs b/third_party/rust/lalrpop/src/lr1/trace/reduce/mod.rs index 6ce4d4c22d0e..028dcb77f43b 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/reduce/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/reduce/mod.rs @@ -1,111 +1,111 @@ -use grammar::repr::*; -use lr1::core::*; - -use super::trace_graph::*; -use super::Tracer; - -#[cfg(test)] -mod test; - -impl<'trace, 'grammar> Tracer<'trace, 'grammar> { - pub fn backtrace_reduce( - mut self, - item_state: StateIndex, - item: LR0Item<'grammar>, - ) -> TraceGraph<'grammar> { - self.trace_reduce_item(item_state, item); - self.trace_graph - } - - fn trace_reduce_item(&mut self, item_state: StateIndex, item: LR0Item<'grammar>) { - // We start out with an item - // - // X = ...p (*) ...s - // - // which we can (eventually) reduce, though we may have to do - // some epsilon reductions first if ...s is non-empty. We want - // to trace back until we have (at least) one element of - // context for the reduction. - let nonterminal = &item.production.nonterminal; // X - - // Add an edge - // - // [X] -{...p,_,...s}-> [X = ...p (*) ...s] - // - // because to reach that item we pushed `...p` from the start - // of `X` and afterwards we expect to see `...s`. - self.trace_graph - .add_edge(nonterminal.clone(), item, item.symbol_sets()); - - // Walk back to the set of states S where we had: - // - // X = (*) ...p - let pred_states = self.state_graph.trace_back(item_state, item.prefix()); - - // Add in edges from [X] to all the places [X] can be consumed. - for pred_state in pred_states { - self.trace_reduce_from_state(pred_state, nonterminal); - } - } - - // We know that we can reduce the nonterminal `Y`. We want to find - // at least one element of context, so we search back to find out - // who will consume that reduced value. So search for those items - // that can shift a `Y`: - // - // Z = ... (*) Y ...s - // - // If we find that `...s` is potentially empty, then we haven't - // actually found any context, and so we may have to keep - // searching. - fn trace_reduce_from_state(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) - // "Y" - { - if !self.visited_set.insert((item_state, nonterminal.clone())) { - return; - } - for pred_item in self.states[item_state.0] - .items - .vec - .iter() - .filter(|i| i.can_shift_nonterminal(nonterminal)) - { - // Found a state: - // - // Z = ...p (*) Y ...s - // - // If `...s` does not match `\epsilon`, then we are done, - // because `FIRST(...s)` will provide a token of context. - // But otherwise we have to keep searching backwards. - - let symbol_sets = pred_item.symbol_sets(); - - let first_suffix = self.first_sets.first0(symbol_sets.suffix); - let continue_tracing = first_suffix.contains_eof(); - - if !continue_tracing { - // Add an edge - // - // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] - // - // and stop. - self.trace_graph - .add_edge(pred_item.to_lr0(), nonterminal.clone(), symbol_sets); - } else { - // Add an edge - // - // [Z] -{..p}-> [Y] - // - // because we can reduce by consuming `...p` - // tokens, and continue tracing. - self.trace_graph.add_edge( - pred_item.production.nonterminal.clone(), - nonterminal.clone(), - symbol_sets, - ); - - self.trace_reduce_item(item_state, pred_item.to_lr0()); - } - } - } -} +use lr1::core::*; +use grammar::repr::*; + +use super::Tracer; +use super::trace_graph::*; + +#[cfg(test)] +mod test; + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn backtrace_reduce( + mut self, + item_state: StateIndex, + item: LR0Item<'grammar>, + ) -> TraceGraph<'grammar> { + self.trace_reduce_item(item_state, item); + self.trace_graph + } + + fn trace_reduce_item(&mut self, item_state: StateIndex, item: LR0Item<'grammar>) { + // We start out with an item + // + // X = ...p (*) ...s + // + // which we can (eventually) reduce, though we may have to do + // some epsilon reductions first if ...s is non-empty. We want + // to trace back until we have (at least) one element of + // context for the reduction. + let nonterminal = &item.production.nonterminal; // X + + // Add an edge + // + // [X] -{...p,_,...s}-> [X = ...p (*) ...s] + // + // because to reach that item we pushed `...p` from the start + // of `X` and afterwards we expect to see `...s`. + self.trace_graph + .add_edge(nonterminal.clone(), item, item.symbol_sets()); + + // Walk back to the set of states S where we had: + // + // X = (*) ...p + let pred_states = self.state_graph.trace_back(item_state, item.prefix()); + + // Add in edges from [X] to all the places [X] can be consumed. + for pred_state in pred_states { + self.trace_reduce_from_state(pred_state, nonterminal); + } + } + + // We know that we can reduce the nonterminal `Y`. We want to find + // at least one element of context, so we search back to find out + // who will consume that reduced value. So search for those items + // that can shift a `Y`: + // + // Z = ... (*) Y ...s + // + // If we find that `...s` is potentially empty, then we haven't + // actually found any context, and so we may have to keep + // searching. + fn trace_reduce_from_state(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) + // "Y" + { + if !self.visited_set.insert((item_state, nonterminal.clone())) { + return; + } + for pred_item in self.states[item_state.0] + .items + .vec + .iter() + .filter(|i| i.can_shift_nonterminal(nonterminal)) + { + // Found a state: + // + // Z = ...p (*) Y ...s + // + // If `...s` does not match `\epsilon`, then we are done, + // because `FIRST(...s)` will provide a token of context. + // But otherwise we have to keep searching backwards. + + let symbol_sets = pred_item.symbol_sets(); + + let first_suffix = self.first_sets.first0(symbol_sets.suffix); + let continue_tracing = first_suffix.contains_eof(); + + if !continue_tracing { + // Add an edge + // + // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] + // + // and stop. + self.trace_graph + .add_edge(pred_item.to_lr0(), nonterminal.clone(), symbol_sets); + } else { + // Add an edge + // + // [Z] -{..p}-> [Y] + // + // because we can reduce by consuming `...p` + // tokens, and continue tracing. + self.trace_graph.add_edge( + pred_item.production.nonterminal.clone(), + nonterminal.clone(), + symbol_sets, + ); + + self.trace_reduce_item(item_state, pred_item.to_lr0()); + } + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/reduce/test.rs b/third_party/rust/lalrpop/src/lr1/trace/reduce/test.rs index a9c853aea020..20f150039898 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/reduce/test.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/reduce/test.rs @@ -1,369 +1,364 @@ -use grammar::repr::*; -use lr1::build_states; -use lr1::core::Item; -use lr1::first::FirstSets; -use lr1::interpret::interpret_partial; -use lr1::lookahead::{Token, TokenSet}; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::{expect_debug, normalized_grammar}; -use tls::Tls; - -use super::super::Tracer; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -fn term(t: &str) -> TerminalString { - TerminalString::quoted(Atom::from(t)) -} - -macro_rules! terms { - ($($t:expr),*) => { - vec![$(term($t)),*] - } -} - -fn test_grammar1() -> Grammar { - normalized_grammar( - r#" - grammar; - - pub Start: () = Stmt; - - pub Stmt: () = { - Exprs ";", - Exprs - }; - - Exprs: () = { - Expr, - Exprs "," Expr - }; - - Expr: () = { - "Int", - Expr "+" "Int", - }; -"#, - ) -} - -#[test] -fn backtrace1() { - let _tls = Tls::test(); - let grammar = test_grammar1(); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - let states = build_states(&grammar, nt("Start")).unwrap(); - let tracer = Tracer::new(&first_sets, &states); - let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); - let top_state = *state_stack.last().unwrap(); - - // Top state will have items like: - // - // Expr = "Int" (*) [EOF], - // Expr = "Int" (*) ["+"], - // Expr = "Int" (*) [","], - // Expr = "Int" (*) [";"] - // - // Select the ";" one. - let semi = Token::Terminal(term(";")); - let semi_item = states[top_state.0] - .items - .vec - .iter() - .filter(|item| item.lookahead.contains(&semi)) - .next() - .unwrap(); - - let backtrace = tracer.backtrace_reduce(top_state, semi_item.to_lr0()); - - println!("{:#?}", backtrace); - - let pictures: Vec<_> = backtrace - .lr0_examples(semi_item.to_lr0()) - .map(|e| e.paint_unstyled()) - .collect(); - expect_debug( - &pictures, - r#" -[ - [ - " Exprs "," "Int" ╷ ";"", - " │ └─Expr─┤ │", - " ├─Exprs──────────┘ │", - " └─Stmt───────────────┘" - ], - [ - " Exprs "," "Int" ╷ "," Expr", - " │ └─Expr─┤ │", - " ├─Exprs──────────┘ │", - " └─Exprs───────────────────┘" - ], - [ - " "Int" ╷ ";"", - " ├─Expr──┤ │", - " ├─Exprs─┘ │", - " └─Stmt──────┘" - ], - [ - " "Int" ╷ "," Expr", - " ├─Expr──┤ │", - " ├─Exprs─┘ │", - " └─Exprs──────────┘" - ], - [ - " "Int" ╷ "+" "Int"", - " ├─Expr─┘ │", - " └─Expr───────────┘" - ] -] -"# - .trim(), - ); -} - -#[test] -fn backtrace2() { - let _tls = Tls::test(); - // This grammar yields a S/R conflict. Is it (int -> int) -> int - // or int -> (int -> int)? - let grammar = normalized_grammar( - r#" -grammar; -pub Ty: () = { - "int" => (), - "bool" => (), - "->" => (), -}; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - let err = build_states(&grammar, nt("Ty")).unwrap_err(); - let tracer = Tracer::new(&first_sets, &err.states); - let conflict = err.conflicts[0].clone(); - println!("conflict={:?}", conflict); - let item = Item { - production: conflict.production, - index: conflict.production.symbols.len(), - lookahead: conflict.lookahead.clone(), - }; - println!("item={:?}", item); - let backtrace = tracer.backtrace_reduce(conflict.state, item.to_lr0()); - println!("{:#?}", backtrace); - expect_debug( - &backtrace, - r#" -[ - (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), - (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), - (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), - (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) -] -"# - .trim(), - ); - - // Check that we can successfully enumerate and paint the examples - // here. - let pictures: Vec<_> = backtrace - .lr1_examples(&first_sets, &item) - .map(|e| e.paint_unstyled()) - .collect(); - expect_debug( - &pictures, - r#" -[ - [ - " Ty "->" Ty "->" Ty", - " ├─Ty─────┘ │", - " └─Ty─────────────┘" - ] -] -"# - .trim(), - ); -} - -#[test] -fn reduce_backtrace_3_graph() { - // This grammar yields a S/R conflict. Is it `(int -> int) -> int` - // or `int -> (int -> int)`? - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" -grammar; -pub Ty: () = { - "int" => (), - "bool" => (), - "->" => (), -}; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - let err = build_states(&grammar, nt("Ty")).unwrap_err(); - let conflict = err.conflicts[0].clone(); - println!("conflict={:?}", conflict); - let item = Item { - production: conflict.production, - index: conflict.production.symbols.len(), - lookahead: conflict.lookahead.clone(), - }; - println!("item={:?}", item); - let tracer = Tracer::new(&first_sets, &err.states); - let graph = tracer.backtrace_reduce(conflict.state, item.to_lr0()); - expect_debug( - &graph, - r#" -[ - (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), - (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), - (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), - (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) -] -"# - .trim(), - ); - - let list: Vec<_> = graph - .lr1_examples(&first_sets, &item) - .map(|example| example.paint_unstyled()) - .collect(); - expect_debug( - &list, - r#" -[ - [ - " Ty "->" Ty "->" Ty", - " ├─Ty─────┘ │", - " └─Ty─────────────┘" - ] -] -"# - .trim(), - ); -} - -#[test] -fn backtrace_filter() { - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" - grammar; - - pub Start: () = Stmt; - - pub Stmt: () = { - Exprs ";" - }; - - Exprs: () = { - Expr, - Exprs "," Expr - }; - - Expr: () = { - ExprAtom ExprSuffix - }; - - ExprSuffix: () = { - (), - "?", - }; - - ExprAtom: () = { - "Int", - }; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let states = build_states(&grammar, nt("Start")).unwrap(); - let first_sets = FirstSets::new(&grammar); - let tracer = Tracer::new(&first_sets, &states); - let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); - let top_state = *state_stack.last().unwrap(); - - // Top state will have an item like: - // - // Expr = "Int" (*) [",", ";"], - let semi = Token::Terminal(term(";")); - let lr1_item = states[top_state.0] - .items - .vec - .iter() - .filter(|item| item.lookahead.contains(&semi)) - .next() - .unwrap(); - - let backtrace = tracer.backtrace_reduce(top_state, lr1_item.to_lr0()); - - println!("{:#?}", backtrace); - - // With no filtering, we get examples with both `;` and `,` as - // lookahead (though `ExprSuffix` is in the way). - let pictures: Vec<_> = backtrace - .lr0_examples(lr1_item.to_lr0()) - .map(|e| e.paint_unstyled()) - .collect(); - expect_debug(&pictures, r#" -[ - [ - " Exprs "," "Int" ╷ ExprSuffix ";"", - " │ ├─ExprAtom─┘ │ │", - " │ └─Expr────────────────┤ │", - " ├─Exprs─────────────────────────┘ │", - " └─Stmt──────────────────────────────┘" - ], - [ - " Exprs "," "Int" ╷ ExprSuffix "," Expr", - " │ ├─ExprAtom─┘ │ │", - " │ └─Expr────────────────┤ │", - " ├─Exprs─────────────────────────┘ │", - " └─Exprs──────────────────────────────────┘" - ], - [ - " "Int" ╷ ExprSuffix ";"", - " ├─ExprAtom─┘ │ │", - " ├─Expr────────────────┤ │", - " ├─Exprs───────────────┘ │", - " └─Stmt────────────────────┘" - ], - [ - " "Int" ╷ ExprSuffix "," Expr", - " ├─ExprAtom─┘ │ │", - " ├─Expr────────────────┤ │", - " ├─Exprs───────────────┘ │", - " └─Exprs────────────────────────┘" - ] -] -"#.trim()); - - // Select those with `;` as lookahead - let semi_item = lr1_item.with_lookahead(TokenSet::from(semi)); - let pictures: Vec<_> = backtrace - .lr1_examples(&first_sets, &semi_item) - .map(|e| e.paint_unstyled()) - .collect(); - expect_debug(&pictures, r#" -[ - [ - " Exprs "," "Int" ╷ ExprSuffix ";"", - " │ ├─ExprAtom─┘ │ │", - " │ └─Expr────────────────┤ │", - " ├─Exprs─────────────────────────┘ │", - " └─Stmt──────────────────────────────┘" - ], - [ - " "Int" ╷ ExprSuffix ";"", - " ├─ExprAtom─┘ │ │", - " ├─Expr────────────────┤ │", - " ├─Exprs───────────────┘ │", - " └─Stmt────────────────────┘" - ] -] -"#.trim()); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::core::Item; +use lr1::first::FirstSets; +use lr1::interpret::interpret_partial; +use lr1::lookahead::{Token, TokenSet}; +use lr1::tls::Lr1Tls; +use test_util::{expect_debug, normalized_grammar}; +use tls::Tls; + +use super::super::Tracer; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +macro_rules! terms { + ($($t:expr),*) => { + vec![$(term($t)),*] + } +} + +fn test_grammar1() -> Grammar { + normalized_grammar( + r#" + grammar; + + pub Start: () = Stmt; + + pub Stmt: () = { + Exprs ";", + Exprs + }; + + Exprs: () = { + Expr, + Exprs "," Expr + }; + + Expr: () = { + "Int", + Expr "+" "Int", + }; +"#, + ) +} + +#[test] +fn backtrace1() { + let _tls = Tls::test(); + let grammar = test_grammar1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let states = build_states(&grammar, nt("Start")).unwrap(); + let tracer = Tracer::new(&first_sets, &states); + let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); + let top_state = *state_stack.last().unwrap(); + + // Top state will have items like: + // + // Expr = "Int" (*) [EOF], + // Expr = "Int" (*) ["+"], + // Expr = "Int" (*) [","], + // Expr = "Int" (*) [";"] + // + // Select the ";" one. + let semi = Token::Terminal(term(";")); + let semi_item = states[top_state.0] + .items + .vec + .iter() + .filter(|item| item.lookahead.contains(&semi)) + .next() + .unwrap(); + + let backtrace = tracer.backtrace_reduce(top_state, semi_item.to_lr0()); + + println!("{:#?}", backtrace); + + let pictures: Vec<_> = backtrace + .lr0_examples(semi_item.to_lr0()) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug( + &pictures, + r#" +[ + [ + " Exprs "," "Int" ╷ ";"", + " │ └─Expr─┤ │", + " ├─Exprs──────────┘ │", + " └─Stmt───────────────┘" + ], + [ + " Exprs "," "Int" ╷ "," Expr", + " │ └─Expr─┤ │", + " ├─Exprs──────────┘ │", + " └─Exprs───────────────────┘" + ], + [ + " "Int" ╷ ";"", + " ├─Expr──┤ │", + " ├─Exprs─┘ │", + " └─Stmt──────┘" + ], + [ + " "Int" ╷ "," Expr", + " ├─Expr──┤ │", + " ├─Exprs─┘ │", + " └─Exprs──────────┘" + ], + [ + " "Int" ╷ "+" "Int"", + " ├─Expr─┘ │", + " └─Expr───────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn backtrace2() { + let _tls = Tls::test(); + // This grammar yields a S/R conflict. Is it (int -> int) -> int + // or int -> (int -> int)? + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let tracer = Tracer::new(&first_sets, &err.states); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + let item = Item { + production: conflict.production, + index: conflict.production.symbols.len(), + lookahead: conflict.lookahead.clone(), + }; + println!("item={:?}", item); + let backtrace = tracer.backtrace_reduce(conflict.state, item.to_lr0()); + println!("{:#?}", backtrace); + expect_debug( + &backtrace, + r#" +[ + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), + (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + // Check that we can successfully enumerate and paint the examples + // here. + let pictures: Vec<_> = backtrace + .lr1_examples(&first_sets, &item) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug( + &pictures, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " ├─Ty─────┘ │", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn reduce_backtrace_3_graph() { + // This grammar yields a S/R conflict. Is it `(int -> int) -> int` + // or `int -> (int -> int)`? + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + let item = Item { + production: conflict.production, + index: conflict.production.symbols.len(), + lookahead: conflict.lookahead.clone(), + }; + println!("item={:?}", item); + let tracer = Tracer::new(&first_sets, &err.states); + let graph = tracer.backtrace_reduce(conflict.state, item.to_lr0()); + expect_debug( + &graph, + r#" +[ + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), + (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + let list: Vec<_> = graph + .lr1_examples(&first_sets, &item) + .map(|example| example.paint_unstyled()) + .collect(); + expect_debug( + &list, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " ├─Ty─────┘ │", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn backtrace_filter() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" + grammar; + + pub Start: () = Stmt; + + pub Stmt: () = { + Exprs ";" + }; + + Exprs: () = { + Expr, + Exprs "," Expr + }; + + Expr: () = { + ExprAtom ExprSuffix + }; + + ExprSuffix: () = { + (), + "?", + }; + + ExprAtom: () = { + "Int", + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let states = build_states(&grammar, nt("Start")).unwrap(); + let first_sets = FirstSets::new(&grammar); + let tracer = Tracer::new(&first_sets, &states); + let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); + let top_state = *state_stack.last().unwrap(); + + // Top state will have an item like: + // + // Expr = "Int" (*) [",", ";"], + let semi = Token::Terminal(term(";")); + let lr1_item = states[top_state.0] + .items + .vec + .iter() + .filter(|item| item.lookahead.contains(&semi)) + .next() + .unwrap(); + + let backtrace = tracer.backtrace_reduce(top_state, lr1_item.to_lr0()); + + println!("{:#?}", backtrace); + + // With no filtering, we get examples with both `;` and `,` as + // lookahead (though `ExprSuffix` is in the way). + let pictures: Vec<_> = backtrace + .lr0_examples(lr1_item.to_lr0()) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug(&pictures, r#" +[ + [ + " Exprs "," "Int" ╷ ExprSuffix ";"", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Stmt──────────────────────────────┘" + ], + [ + " Exprs "," "Int" ╷ ExprSuffix "," Expr", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Exprs──────────────────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix ";"", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Stmt────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix "," Expr", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Exprs────────────────────────┘" + ] +] +"#.trim()); + + // Select those with `;` as lookahead + let semi_item = lr1_item.with_lookahead(TokenSet::from(semi)); + let pictures: Vec<_> = backtrace + .lr1_examples(&first_sets, &semi_item) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug(&pictures, r#" +[ + [ + " Exprs "," "Int" ╷ ExprSuffix ";"", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Stmt──────────────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix ";"", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Stmt────────────────────┘" + ] +] +"#.trim()); +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/shift/mod.rs b/third_party/rust/lalrpop/src/lr1/trace/shift/mod.rs index 10bb6ed27a74..540e6e321f87 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/shift/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/shift/mod.rs @@ -1,101 +1,101 @@ -use grammar::repr::*; -use lr1::core::*; - -use super::trace_graph::*; -use super::Tracer; - -#[cfg(test)] -mod test; - -/// A backtrace explaining how a particular shift: -/// -/// X = ...p (*) Token ... -/// -/// came to be in the list of items for some state S. This backtrace -/// always has a particular form. First, we can walk back over the -/// prefix, which will bring us to some set of states S1 all of which -/// contain the same item, but with the cursor at the front: -/// -/// X = (*) ...p Token ... -/// -/// Then we can walk back within those states some number of epsilon -/// moves, traversing nonterminals of the form: -/// -/// Y = (*) X ...s -/// -/// (Note that each nonterminal `Y` may potentially have many -/// productions of this form. I am not sure yet if they all matter or -/// not.) -/// -/// Finally, either we are in the start state, or else we reach some -/// production of the form: -/// -/// Z = ...p (*) Y ...s -/// -/// Ultimately this "trace" is best represented as a DAG. The problem -/// is that some of those nonterminals could, for example, be -/// optional. - -impl<'trace, 'grammar> Tracer<'trace, 'grammar> { - pub fn backtrace_shift( - mut self, - item_state: StateIndex, - item: LR0Item<'grammar>, - ) -> TraceGraph<'grammar> { - let symbol_sets = item.symbol_sets(); - - // The states `S` - let pred_states = self.state_graph.trace_back(item_state, symbol_sets.prefix); - - // Add the edge `[X] -{...p,Token,...s}-> [X = ...p (*) Token ...s]` - self.trace_graph - .add_edge(item.production.nonterminal.clone(), item, symbol_sets); - - for pred_state in pred_states { - self.trace_epsilon_edges(pred_state, &item.production.nonterminal); - } - - self.trace_graph - } - - // Because item.index is 0, we know we are at an index - // like: - // - // Y = (*) ... - // - // This can only arise if `Y` is the start nonterminal - // or if there is an epsilon move from another item - // like: - // - // Z = ...p (*) Y ... - // - // So search for items like Z. - fn trace_epsilon_edges(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) // "Y" - { - if self.visited_set.insert((item_state, nonterminal.clone())) { - for pred_item in self.states[item_state.0].items.vec.iter() { - if pred_item.can_shift_nonterminal(nonterminal) { - if pred_item.index > 0 { - // Add an edge: - // - // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] - self.trace_graph.add_edge( - pred_item, - nonterminal.clone(), - pred_item.symbol_sets(), - ); - } else { - // Trace back any incoming edges to [Z = ...p (*) Y ...]. - let pred_nonterminal = &pred_item.production.nonterminal; - self.trace_graph.add_edge( - pred_nonterminal.clone(), - nonterminal.clone(), - pred_item.symbol_sets(), - ); - self.trace_epsilon_edges(item_state, pred_nonterminal); - } - } - } - } - } -} +use lr1::core::*; +use grammar::repr::*; + +use super::Tracer; +use super::trace_graph::*; + +#[cfg(test)] +mod test; + +/// A backtrace explaining how a particular shift: +/// +/// X = ...p (*) Token ... +/// +/// came to be in the list of items for some state S. This backtrace +/// always has a particular form. First, we can walk back over the +/// prefix, which will bring us to some set of states S1 all of which +/// contain the same item, but with the cursor at the front: +/// +/// X = (*) ...p Token ... +/// +/// Then we can walk back within those states some number of epsilon +/// moves, traversing nonterminals of the form: +/// +/// Y = (*) X ...s +/// +/// (Note that each nonterminal `Y` may potentially have many +/// productions of this form. I am not sure yet if they all matter or +/// not.) +/// +/// Finally, either we are in the start state, or else we reach some +/// production of the form: +/// +/// Z = ...p (*) Y ...s +/// +/// Ultimately this "trace" is best represented as a DAG. The problem +/// is that some of those nonterminals could, for example, be +/// optional. + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn backtrace_shift( + mut self, + item_state: StateIndex, + item: LR0Item<'grammar>, + ) -> TraceGraph<'grammar> { + let symbol_sets = item.symbol_sets(); + + // The states `S` + let pred_states = self.state_graph.trace_back(item_state, symbol_sets.prefix); + + // Add the edge `[X] -{...p,Token,...s}-> [X = ...p (*) Token ...s]` + self.trace_graph + .add_edge(item.production.nonterminal.clone(), item, symbol_sets); + + for pred_state in pred_states { + self.trace_epsilon_edges(pred_state, &item.production.nonterminal); + } + + self.trace_graph + } + + // Because item.index is 0, we know we are at an index + // like: + // + // Y = (*) ... + // + // This can only arise if `Y` is the start nonterminal + // or if there is an epsilon move from another item + // like: + // + // Z = ...p (*) Y ... + // + // So search for items like Z. + fn trace_epsilon_edges(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) // "Y" + { + if self.visited_set.insert((item_state, nonterminal.clone())) { + for pred_item in self.states[item_state.0].items.vec.iter() { + if pred_item.can_shift_nonterminal(nonterminal) { + if pred_item.index > 0 { + // Add an edge: + // + // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] + self.trace_graph.add_edge( + pred_item, + nonterminal.clone(), + pred_item.symbol_sets(), + ); + } else { + // Trace back any incoming edges to [Z = ...p (*) Y ...]. + let pred_nonterminal = &pred_item.production.nonterminal; + self.trace_graph.add_edge( + pred_nonterminal.clone(), + nonterminal.clone(), + pred_item.symbol_sets(), + ); + self.trace_epsilon_edges(item_state, pred_nonterminal); + } + } + } + } + } +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/shift/test.rs b/third_party/rust/lalrpop/src/lr1/trace/shift/test.rs index 6428cc50530a..8e34457f0dc6 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/shift/test.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/shift/test.rs @@ -1,80 +1,78 @@ -use grammar::repr::*; -use lr1::build_states; -use lr1::core::*; -use lr1::first::FirstSets; -use lr1::tls::Lr1Tls; -use string_cache::DefaultAtom as Atom; -use test_util::{expect_debug, normalized_grammar}; -use tls::Tls; - -use super::super::Tracer; - -fn nt(t: &str) -> NonterminalString { - NonterminalString(Atom::from(t)) -} - -#[test] -fn shift_backtrace_1() { - // This grammar yields a S/R conflict. Is it `(int -> int) -> int` - // or `int -> (int -> int)`? - - let _tls = Tls::test(); - let grammar = normalized_grammar( - r#" -grammar; -pub Ty: () = { - "int" => (), - "bool" => (), - "->" => (), -}; -"#, - ); - let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); - let first_sets = FirstSets::new(&grammar); - let err = build_states(&grammar, nt("Ty")).unwrap_err(); - let conflict = err.conflicts[0].clone(); - println!("conflict={:?}", conflict); - - // Gin up the LR0 item involved in the shift/reduce conflict: - // - // Ty = Ty (*) -> Ty (shift) - // - // from the item that we can reduce: - // - // Ty = Ty -> Ty (*) (reduce) - - assert!(conflict.production.symbols.len() == 3); - let item = Item::lr0(conflict.production, 1); - println!("item={:?}", item); - let tracer = Tracer::new(&first_sets, &err.states); - let graph = tracer.backtrace_shift(conflict.state, item); - expect_debug( - &graph, - r#" -[ - (Nonterminal(Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)), - (Nonterminal(Ty) -([Ty], Some("->"), [Ty])-> Item(Ty = Ty (*) "->" Ty)), - (Item(Ty = Ty "->" (*) Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)) -] -"# - .trim(), - ); - - let list: Vec<_> = graph - .lr0_examples(item) - .map(|example| example.paint_unstyled()) - .collect(); - expect_debug( - &list, - r#" -[ - [ - " Ty "->" Ty "->" Ty", - " │ └─Ty─────┤", - " └─Ty─────────────┘" - ] -] -"# - .trim(), - ); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::tls::Lr1Tls; +use test_util::{expect_debug, normalized_grammar}; +use tls::Tls; + +use super::super::Tracer; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +#[test] +fn shift_backtrace_1() { + // This grammar yields a S/R conflict. Is it `(int -> int) -> int` + // or `int -> (int -> int)`? + + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + + // Gin up the LR0 item involved in the shift/reduce conflict: + // + // Ty = Ty (*) -> Ty (shift) + // + // from the item that we can reduce: + // + // Ty = Ty -> Ty (*) (reduce) + + assert!(conflict.production.symbols.len() == 3); + let item = Item::lr0(conflict.production, 1); + println!("item={:?}", item); + let tracer = Tracer::new(&first_sets, &err.states); + let graph = tracer.backtrace_shift(conflict.state, item); + expect_debug( + &graph, + r#" +[ + (Nonterminal(Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty], Some("->"), [Ty])-> Item(Ty = Ty (*) "->" Ty)), + (Item(Ty = Ty "->" (*) Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + let list: Vec<_> = graph + .lr0_examples(item) + .map(|example| example.paint_unstyled()) + .collect(); + expect_debug( + &list, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " │ └─Ty─────┤", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/trace_graph/mod.rs b/third_party/rust/lalrpop/src/lr1/trace/trace_graph/mod.rs index 3cdcdecce802..652cab79ded3 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/trace_graph/mod.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/trace_graph/mod.rs @@ -1,456 +1,452 @@ -use collections::{map, Map}; -use grammar::repr::*; -use lr1::core::*; -use lr1::example::*; -use lr1::first::*; -use lr1::lookahead::*; -use petgraph::graph::{EdgeReference, Edges, NodeIndex}; -use petgraph::prelude::*; -use petgraph::{Directed, EdgeDirection, Graph}; -use std::fmt::{Debug, Error, Formatter}; - -#[cfg(test)] -mod test; - -/// Trace graphs are used to summarize how it is that we came to be in -/// a state where we can take some particular shift/reduce action; put -/// another way, how it is that we came to be in a state with some -/// particular LR(1) item. -/// -/// The nodes in the graph are each labeled with a TraceGraphNode and -/// hence take one of two forms: -/// -/// - TraceGraphNode::Item -- represents an LR0 item. These nodes are -/// used for the starting/end points in the graph only. Basically a -/// complete trace stretches from the start item to some end item, -/// and all intermediate nodes are nonterminals. -/// - TraceGraphNode::Nonterminal -- if this graph is for a shift, -/// then these represent items where the cursor is at the beginning: -/// `X = (*) ...`. If the graph is for a reduce, they represent -/// items where a reduce is possible without shifting any more -/// terminals (though further reductions may be needed): `X = -/// ... (*) ...s` where `FIRST(...s)` includes `\epsilon`. -/// -/// The edges in the graph are also important. They are labeled with -/// `SymbolSets` instances, meaning that each carries a (prefix, -/// cursor, and suffix) tuple. The label on an edge `A -> B` means -/// that transitioning from a state containing `A` to a state -/// containing `B` is possible if you: -/// -/// - shift the symbols in `prefix` -/// - `B` will produce the symbol in `cursor` -/// - shift the symbols in `suffix` after `B` is popped -pub struct TraceGraph<'grammar> { - // A -L-> B means: - // - // Transition from a state containing A to a state containing - // B by (pushing|popping) the symbols L. - // - // If this trace graph represents a shift backtrace, then the - // labels are symbols that are pushed. Otherwise they are labels - // that are popped. - graph: Graph, SymbolSets<'grammar>>, - indices: Map, NodeIndex>, -} - -#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] -pub enum TraceGraphNode<'grammar> { - Nonterminal(NonterminalString), - Item(LR0Item<'grammar>), -} - -impl<'grammar> TraceGraph<'grammar> { - pub fn new() -> Self { - TraceGraph { - graph: Graph::new(), - indices: map(), - } - } - - pub fn add_node(&mut self, node: T) -> NodeIndex - where - T: Into>, - { - let node = node.into(); - let graph = &mut self.graph; - *self - .indices - .entry(node.clone()) - .or_insert_with(|| graph.add_node(node)) - } - - pub fn add_edge(&mut self, from: F, to: T, labels: SymbolSets<'grammar>) - where - F: Into>, - T: Into>, - { - let from = self.add_node(from.into()); - let to = self.add_node(to.into()); - if !self - .graph - .edges_directed(from, EdgeDirection::Outgoing) - .any(|edge| edge.target() == to && *edge.weight() == labels) - { - self.graph.add_edge(from, to, labels); - } - } - - pub fn lr0_examples<'graph>( - &'graph self, - lr0_item: LR0Item<'grammar>, - ) -> PathEnumerator<'graph, 'grammar> { - PathEnumerator::new(self, lr0_item) - } - - pub fn lr1_examples<'trace>( - &'trace self, - first_sets: &'trace FirstSets, - item: &LR1Item<'grammar>, - ) -> FilteredPathEnumerator<'trace, 'grammar> { - FilteredPathEnumerator::new(first_sets, self, item.to_lr0(), item.lookahead.clone()) - } -} - -impl<'grammar> Into> for NonterminalString { - fn into(self) -> TraceGraphNode<'grammar> { - TraceGraphNode::Nonterminal(self) - } -} - -impl<'grammar, L: Lookahead> Into> for Item<'grammar, L> { - fn into(self) -> TraceGraphNode<'grammar> { - (&self).into() - } -} - -impl<'a, 'grammar, L: Lookahead> Into> for &'a Item<'grammar, L> { - fn into(self) -> TraceGraphNode<'grammar> { - TraceGraphNode::Item(self.to_lr0()) - } -} - -// This just exists to help with the `Debug` impl -struct TraceGraphEdge<'grammar> { - from: TraceGraphNode<'grammar>, - to: TraceGraphNode<'grammar>, - label: ( - &'grammar [Symbol], - Option<&'grammar Symbol>, - &'grammar [Symbol], - ), -} - -impl<'grammar> Debug for TraceGraphEdge<'grammar> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "({:?} -{:?}-> {:?})", self.from, self.label, self.to) - } -} - -impl<'grammar> Debug for TraceGraph<'grammar> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let mut s = fmt.debug_list(); - for (node, &index) in &self.indices { - for edge in self.graph.edges_directed(index, EdgeDirection::Outgoing) { - let label = edge.weight(); - s.entry(&TraceGraphEdge { - from: node.clone(), - to: self.graph[edge.target()].clone(), - label: (label.prefix, label.cursor, label.suffix), - }); - } - } - s.finish() - } -} - -/////////////////////////////////////////////////////////////////////////// -// PathEnumerator -// -// The path enumerater walks a trace graph searching for paths that -// start at a given item and terminate at another item. If such a path -// is found, you can then find the complete list of symbols by calling -// `symbols_and_cursor` and also get access to the state. - -pub struct PathEnumerator<'graph, 'grammar: 'graph> { - graph: &'graph TraceGraph<'grammar>, - stack: Vec>, -} - -struct EnumeratorState<'graph, 'grammar: 'graph> { - index: NodeIndex, - symbol_sets: SymbolSets<'grammar>, - edges: Edges<'graph, SymbolSets<'grammar>, Directed>, -} - -impl<'graph, 'grammar> PathEnumerator<'graph, 'grammar> { - fn new(graph: &'graph TraceGraph<'grammar>, lr0_item: LR0Item<'grammar>) -> Self { - let start_state = graph.indices[&TraceGraphNode::Item(lr0_item)]; - let mut enumerator = PathEnumerator { - graph: graph, - stack: vec![], - }; - let edges = enumerator.incoming_edges(start_state); - enumerator.stack.push(EnumeratorState { - index: start_state, - symbol_sets: SymbolSets::new(), - edges: edges, - }); - enumerator.find_next_trace(); - enumerator - } - - /// Advance to the next example. Returns false if there are no more - /// examples. - pub fn advance(&mut self) -> bool { - // If we have not yet exhausted all the examples, then the top - // of the stack should be the last target item that we - // found. Pop it off. - match self.stack.pop() { - Some(top_state) => { - assert!(match self.graph.graph[top_state.index] { - TraceGraphNode::Item(_) => true, - TraceGraphNode::Nonterminal(_) => false, - }); - - self.find_next_trace() - } - None => false, - } - } - - fn incoming_edges(&self, index: NodeIndex) -> Edges<'graph, SymbolSets<'grammar>, Directed> { - self.graph - .graph - .edges_directed(index, EdgeDirection::Incoming) - } - - /// This is the main operation, written in CPS style and hence it - /// can seem a bit confusing. The idea is that `find_next_trace` - /// is called when we are ready to consider the next child of - /// whatever is on the top of the stack. It simply withdraws - /// that next child (if any) and hands it to `push_next`. - fn find_next_trace(&mut self) -> bool { - if !self.stack.is_empty() { - let next_edge = { - let top_of_stack = self.stack.last_mut().unwrap(); - top_of_stack.edges.next() - }; - self.push_next_child_if_any(next_edge) - } else { - false - } - } - - /// Invoked with the next child (if any) of the node on the top of - /// the stack. - /// - /// If `next` is `Some`, we simply call `push_next_child`. - /// - /// If `next` is `None`, then the node on the top of - /// the stack *has* no next child, and so it is popped, and then - /// we call `find_next_trace` again to start with the next child - /// of the new top of the stack. - fn push_next_child_if_any( - &mut self, - next: Option>>, - ) -> bool { - if let Some(edge) = next { - let index = edge.source(); - let symbol_sets = *edge.weight(); - self.push_next_child(index, symbol_sets) - } else { - self.stack.pop(); - self.find_next_trace() - } - } - - /// Push the next child of the top of the stack onto the stack, - /// making the child the new top. - /// - /// If the child is an `Item` node, we have found the next trace, - /// and hence our search terminates. We push the symbols from this - /// item node into the symbols vector and then return true. - /// - /// Otherwise, we check whether this new node would cause a cycle. - /// If so, we do *not* push it, and instead just call - /// `find_next_trace` again to proceed to the next child of the - /// current top. - /// - /// Finally, if the new node would NOT cause a cycle, then we can - /// push it onto the stack so that it becomes the new top, and - /// call `find_next_trace` to start searching its children. - fn push_next_child(&mut self, index: NodeIndex, symbol_sets: SymbolSets<'grammar>) -> bool { - match self.graph.graph[index] { - TraceGraphNode::Item(_) => { - // If we reached an item like - // - // X = ...p (*) ...s - // - // then we are done, but we still need to push on the - // symbols `...p`. - let edges = self.incoming_edges(index); - self.stack.push(EnumeratorState { - index: index, - symbol_sets: symbol_sets, - edges: edges, - }); - return true; - } - TraceGraphNode::Nonterminal(_) => { - // If this node already appears on the stack, do not - // visit its children. - if !self.stack.iter().any(|state| state.index == index) { - let edges = self.incoming_edges(index); - self.stack.push(EnumeratorState { - index: index, - symbol_sets: symbol_sets, - edges: edges, - }); - } - self.find_next_trace() - } - } - } - - pub fn found_trace(&self) -> bool { - !self.stack.is_empty() - } - - /// Returns the 1-context for the current trace. In other words, - /// the set of tokens that may appear next in the input. If this - /// trace was derived from a shiftable item, this will always be - /// the terminal that was to be shifted; if derived from a reduce - /// item, this constitutes the set of lookaheads that will trigger - /// a reduce. - pub fn first0(&self, first_sets: &FirstSets) -> TokenSet { - assert!(self.found_trace()); - first_sets.first0( - self.stack[1] - .symbol_sets - .cursor - .into_iter() - .chain(self.stack.iter().flat_map(|s| s.symbol_sets.suffix)), - ) - } - - pub fn example(&self) -> Example { - assert!(self.found_trace()); - - let mut symbols = vec![]; - - symbols.extend( - self.stack - .iter() - .rev() - .flat_map(|s| s.symbol_sets.prefix) - .cloned() - .map(ExampleSymbol::Symbol), - ); - - let cursor = symbols.len(); - - match self.stack[1].symbol_sets.cursor { - Some(s) => symbols.push(ExampleSymbol::Symbol(s.clone())), - None => { - if self.stack[1].symbol_sets.prefix.is_empty() { - symbols.push(ExampleSymbol::Epsilon) - } else { - } - } - } - - symbols.extend( - self.stack - .iter() - .flat_map(|s| s.symbol_sets.suffix) - .cloned() - .map(ExampleSymbol::Symbol), - ); - - let mut cursors = (0, symbols.len()); - - let mut reductions: Vec<_> = self.stack[1..] - .iter() - .rev() - .map(|state| { - let nonterminal = match self.graph.graph[state.index] { - TraceGraphNode::Nonterminal(ref nonterminal) => nonterminal.clone(), - TraceGraphNode::Item(ref item) => item.production.nonterminal.clone(), - }; - let reduction = Reduction { - start: cursors.0, - end: cursors.1, - nonterminal: nonterminal, - }; - cursors.0 += state.symbol_sets.prefix.len(); - cursors.1 -= state.symbol_sets.suffix.len(); - reduction - }) - .collect(); - reductions.reverse(); - - Example { - symbols: symbols, - cursor: cursor, - reductions: reductions, - } - } -} - -impl<'graph, 'grammar> Iterator for PathEnumerator<'graph, 'grammar> { - type Item = Example; - - fn next(&mut self) -> Option { - if self.found_trace() { - let example = self.example(); - self.advance(); - Some(example) - } else { - None - } - } -} - -/////////////////////////////////////////////////////////////////////////// -// FilteredPathEnumerator -// -// Like the path enumerator, but tests for examples with some specific -// lookahead - -pub struct FilteredPathEnumerator<'graph, 'grammar: 'graph> { - base: PathEnumerator<'graph, 'grammar>, - first_sets: &'graph FirstSets, - lookahead: TokenSet, -} - -impl<'graph, 'grammar> FilteredPathEnumerator<'graph, 'grammar> { - fn new( - first_sets: &'graph FirstSets, - graph: &'graph TraceGraph<'grammar>, - lr0_item: LR0Item<'grammar>, - lookahead: TokenSet, - ) -> Self { - FilteredPathEnumerator { - base: PathEnumerator::new(graph, lr0_item), - first_sets: first_sets, - lookahead: lookahead, - } - } -} - -impl<'graph, 'grammar> Iterator for FilteredPathEnumerator<'graph, 'grammar> { - type Item = Example; - - fn next(&mut self) -> Option { - while self.base.found_trace() { - let firsts = self.base.first0(self.first_sets); - if firsts.is_intersecting(&self.lookahead) { - let example = self.base.example(); - self.base.advance(); - return Some(example); - } - self.base.advance(); - } - None - } -} +use collections::{map, Map}; +use lr1::core::*; +use lr1::first::*; +use lr1::lookahead::*; +use lr1::example::*; +use grammar::repr::*; +use petgraph::{Directed, EdgeDirection, Graph}; +use petgraph::graph::{EdgeReference, Edges, NodeIndex}; +use petgraph::prelude::*; +use std::fmt::{Debug, Error, Formatter}; + +#[cfg(test)] +mod test; + +/// Trace graphs are used to summarize how it is that we came to be in +/// a state where we can take some particular shift/reduce action; put +/// another way, how it is that we came to be in a state with some +/// particular LR(1) item. +/// +/// The nodes in the graph are each labeled with a TraceGraphNode and +/// hence take one of two forms: +/// +/// - TraceGraphNode::Item -- represents an LR0 item. These nodes are +/// used for the starting/end points in the graph only. Basically a +/// complete trace stretches from the start item to some end item, +/// and all intermediate nodes are nonterminals. +/// - TraceGraphNode::Nonterminal -- if this graph is for a shift, +/// then these represent items where the cursor is at the beginning: +/// `X = (*) ...`. If the graph is for a reduce, they represent +/// items where a reduce is possible without shifting any more +/// terminals (though further reductions may be needed): `X = +/// ... (*) ...s` where `FIRST(...s)` includes `\epsilon`. +/// +/// The edges in the graph are also important. They are labeled with +/// `SymbolSets` instances, meaning that each carries a (prefix, +/// cursor, and suffix) tuple. The label on an edge `A -> B` means +/// that transitioning from a state containing `A` to a state +/// containing `B` is possible if you: +/// +/// - shift the symbols in `prefix` +/// - `B` will produce the symbol in `cursor` +/// - shift the symbols in `suffix` after `B` is popped +pub struct TraceGraph<'grammar> { + // A -L-> B means: + // + // Transition from a state containing A to a state containing + // B by (pushing|popping) the symbols L. + // + // If this trace graph represents a shift backtrace, then the + // labels are symbols that are pushed. Otherwise they are labels + // that are popped. + graph: Graph, SymbolSets<'grammar>>, + indices: Map, NodeIndex>, +} + +#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub enum TraceGraphNode<'grammar> { + Nonterminal(NonterminalString), + Item(LR0Item<'grammar>), +} + +impl<'grammar> TraceGraph<'grammar> { + pub fn new() -> Self { + TraceGraph { + graph: Graph::new(), + indices: map(), + } + } + + pub fn add_node(&mut self, node: T) -> NodeIndex + where + T: Into>, + { + let node = node.into(); + let graph = &mut self.graph; + *self.indices + .entry(node.clone()) + .or_insert_with(|| graph.add_node(node)) + } + + pub fn add_edge(&mut self, from: F, to: T, labels: SymbolSets<'grammar>) + where + F: Into>, + T: Into>, + { + let from = self.add_node(from.into()); + let to = self.add_node(to.into()); + if !self.graph + .edges_directed(from, EdgeDirection::Outgoing) + .any(|edge| edge.target() == to && *edge.weight() == labels) + { + self.graph.add_edge(from, to, labels); + } + } + + pub fn lr0_examples<'graph>( + &'graph self, + lr0_item: LR0Item<'grammar>, + ) -> PathEnumerator<'graph, 'grammar> { + PathEnumerator::new(self, lr0_item) + } + + pub fn lr1_examples<'trace>( + &'trace self, + first_sets: &'trace FirstSets, + item: &LR1Item<'grammar>, + ) -> FilteredPathEnumerator<'trace, 'grammar> { + FilteredPathEnumerator::new(first_sets, self, item.to_lr0(), item.lookahead.clone()) + } +} + +impl<'grammar> Into> for NonterminalString { + fn into(self) -> TraceGraphNode<'grammar> { + TraceGraphNode::Nonterminal(self) + } +} + +impl<'grammar, L: Lookahead> Into> for Item<'grammar, L> { + fn into(self) -> TraceGraphNode<'grammar> { + (&self).into() + } +} + +impl<'a, 'grammar, L: Lookahead> Into> for &'a Item<'grammar, L> { + fn into(self) -> TraceGraphNode<'grammar> { + TraceGraphNode::Item(self.to_lr0()) + } +} + +// This just exists to help with the `Debug` impl +struct TraceGraphEdge<'grammar> { + from: TraceGraphNode<'grammar>, + to: TraceGraphNode<'grammar>, + label: ( + &'grammar [Symbol], + Option<&'grammar Symbol>, + &'grammar [Symbol], + ), +} + +impl<'grammar> Debug for TraceGraphEdge<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({:?} -{:?}-> {:?})", self.from, self.label, self.to) + } +} + +impl<'grammar> Debug for TraceGraph<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let mut s = fmt.debug_list(); + for (node, &index) in &self.indices { + for edge in self.graph.edges_directed(index, EdgeDirection::Outgoing) { + let label = edge.weight(); + s.entry(&TraceGraphEdge { + from: node.clone(), + to: self.graph[edge.target()].clone(), + label: (label.prefix, label.cursor, label.suffix), + }); + } + } + s.finish() + } +} + +/////////////////////////////////////////////////////////////////////////// +// PathEnumerator +// +// The path enumerater walks a trace graph searching for paths that +// start at a given item and terminate at another item. If such a path +// is found, you can then find the complete list of symbols by calling +// `symbols_and_cursor` and also get access to the state. + +pub struct PathEnumerator<'graph, 'grammar: 'graph> { + graph: &'graph TraceGraph<'grammar>, + stack: Vec>, +} + +struct EnumeratorState<'graph, 'grammar: 'graph> { + index: NodeIndex, + symbol_sets: SymbolSets<'grammar>, + edges: Edges<'graph, SymbolSets<'grammar>, Directed>, +} + +impl<'graph, 'grammar> PathEnumerator<'graph, 'grammar> { + fn new(graph: &'graph TraceGraph<'grammar>, lr0_item: LR0Item<'grammar>) -> Self { + let start_state = graph.indices[&TraceGraphNode::Item(lr0_item)]; + let mut enumerator = PathEnumerator { + graph: graph, + stack: vec![], + }; + let edges = enumerator.incoming_edges(start_state); + enumerator.stack.push(EnumeratorState { + index: start_state, + symbol_sets: SymbolSets::new(), + edges: edges, + }); + enumerator.find_next_trace(); + enumerator + } + + /// Advance to the next example. Returns false if there are no more + /// examples. + pub fn advance(&mut self) -> bool { + // If we have not yet exhausted all the examples, then the top + // of the stack should be the last target item that we + // found. Pop it off. + match self.stack.pop() { + Some(top_state) => { + assert!(match self.graph.graph[top_state.index] { + TraceGraphNode::Item(_) => true, + TraceGraphNode::Nonterminal(_) => false, + }); + + self.find_next_trace() + } + None => false, + } + } + + fn incoming_edges(&self, index: NodeIndex) -> Edges<'graph, SymbolSets<'grammar>, Directed> { + self.graph + .graph + .edges_directed(index, EdgeDirection::Incoming) + } + + /// This is the main operation, written in CPS style and hence it + /// can seem a bit confusing. The idea is that `find_next_trace` + /// is called when we are ready to consider the next child of + /// whatever is on the top of the stack. It simply withdraws + /// that next child (if any) and hands it to `push_next`. + fn find_next_trace(&mut self) -> bool { + if !self.stack.is_empty() { + let next_edge = { + let top_of_stack = self.stack.last_mut().unwrap(); + top_of_stack.edges.next() + }; + self.push_next_child_if_any(next_edge) + } else { + false + } + } + + /// Invoked with the next child (if any) of the node on the top of + /// the stack. + /// + /// If `next` is `Some`, we simply call `push_next_child`. + /// + /// If `next` is `None`, then the node on the top of + /// the stack *has* no next child, and so it is popped, and then + /// we call `find_next_trace` again to start with the next child + /// of the new top of the stack. + fn push_next_child_if_any( + &mut self, + next: Option>>, + ) -> bool { + if let Some(edge) = next { + let index = edge.source(); + let symbol_sets = *edge.weight(); + self.push_next_child(index, symbol_sets) + } else { + self.stack.pop(); + self.find_next_trace() + } + } + + /// Push the next child of the top of the stack onto the stack, + /// making the child the new top. + /// + /// If the child is an `Item` node, we have found the next trace, + /// and hence our search terminates. We push the symbols from this + /// item node into the symbols vector and then return true. + /// + /// Otherwise, we check whether this new node would cause a cycle. + /// If so, we do *not* push it, and instead just call + /// `find_next_trace` again to proceed to the next child of the + /// current top. + /// + /// Finally, if the new node would NOT cause a cycle, then we can + /// push it onto the stack so that it becomes the new top, and + /// call `find_next_trace` to start searching its children. + fn push_next_child(&mut self, index: NodeIndex, symbol_sets: SymbolSets<'grammar>) -> bool { + match self.graph.graph[index] { + TraceGraphNode::Item(_) => { + // If we reached an item like + // + // X = ...p (*) ...s + // + // then we are done, but we still need to push on the + // symbols `...p`. + let edges = self.incoming_edges(index); + self.stack.push(EnumeratorState { + index: index, + symbol_sets: symbol_sets, + edges: edges, + }); + return true; + } + TraceGraphNode::Nonterminal(_) => { + // If this node already appears on the stack, do not + // visit its children. + if !self.stack.iter().any(|state| state.index == index) { + let edges = self.incoming_edges(index); + self.stack.push(EnumeratorState { + index: index, + symbol_sets: symbol_sets, + edges: edges, + }); + } + self.find_next_trace() + } + } + } + + pub fn found_trace(&self) -> bool { + !self.stack.is_empty() + } + + /// Returns the 1-context for the current trace. In other words, + /// the set of tokens that may appear next in the input. If this + /// trace was derived from a shiftable item, this will always be + /// the terminal that was to be shifted; if derived from a reduce + /// item, this constitutes the set of lookaheads that will trigger + /// a reduce. + pub fn first0(&self, first_sets: &FirstSets) -> TokenSet { + assert!(self.found_trace()); + first_sets.first0( + self.stack[1] + .symbol_sets + .cursor + .into_iter() + .chain(self.stack.iter().flat_map(|s| s.symbol_sets.suffix)), + ) + } + + pub fn example(&self) -> Example { + assert!(self.found_trace()); + + let mut symbols = vec![]; + + symbols.extend( + self.stack + .iter() + .rev() + .flat_map(|s| s.symbol_sets.prefix) + .cloned() + .map(ExampleSymbol::Symbol), + ); + + let cursor = symbols.len(); + + match self.stack[1].symbol_sets.cursor { + Some(s) => symbols.push(ExampleSymbol::Symbol(s.clone())), + None => if self.stack[1].symbol_sets.prefix.is_empty() { + symbols.push(ExampleSymbol::Epsilon) + } else { + }, + } + + symbols.extend( + self.stack + .iter() + .flat_map(|s| s.symbol_sets.suffix) + .cloned() + .map(ExampleSymbol::Symbol), + ); + + let mut cursors = (0, symbols.len()); + + let mut reductions: Vec<_> = self.stack[1..] + .iter() + .rev() + .map(|state| { + let nonterminal = match self.graph.graph[state.index] { + TraceGraphNode::Nonterminal(ref nonterminal) => nonterminal.clone(), + TraceGraphNode::Item(ref item) => item.production.nonterminal.clone(), + }; + let reduction = Reduction { + start: cursors.0, + end: cursors.1, + nonterminal: nonterminal, + }; + cursors.0 += state.symbol_sets.prefix.len(); + cursors.1 -= state.symbol_sets.suffix.len(); + reduction + }) + .collect(); + reductions.reverse(); + + Example { + symbols: symbols, + cursor: cursor, + reductions: reductions, + } + } +} + +impl<'graph, 'grammar> Iterator for PathEnumerator<'graph, 'grammar> { + type Item = Example; + + fn next(&mut self) -> Option { + if self.found_trace() { + let example = self.example(); + self.advance(); + Some(example) + } else { + None + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// FilteredPathEnumerator +// +// Like the path enumerator, but tests for examples with some specific +// lookahead + +pub struct FilteredPathEnumerator<'graph, 'grammar: 'graph> { + base: PathEnumerator<'graph, 'grammar>, + first_sets: &'graph FirstSets, + lookahead: TokenSet, +} + +impl<'graph, 'grammar> FilteredPathEnumerator<'graph, 'grammar> { + fn new( + first_sets: &'graph FirstSets, + graph: &'graph TraceGraph<'grammar>, + lr0_item: LR0Item<'grammar>, + lookahead: TokenSet, + ) -> Self { + FilteredPathEnumerator { + base: PathEnumerator::new(graph, lr0_item), + first_sets: first_sets, + lookahead: lookahead, + } + } +} + +impl<'graph, 'grammar> Iterator for FilteredPathEnumerator<'graph, 'grammar> { + type Item = Example; + + fn next(&mut self) -> Option { + while self.base.found_trace() { + let firsts = self.base.first0(self.first_sets); + if firsts.is_intersecting(&self.lookahead) { + let example = self.base.example(); + self.base.advance(); + return Some(example); + } + self.base.advance(); + } + None + } +} diff --git a/third_party/rust/lalrpop/src/lr1/trace/trace_graph/test.rs b/third_party/rust/lalrpop/src/lr1/trace/trace_graph/test.rs index 9a4f7aedeb25..c1398065908a 100644 --- a/third_party/rust/lalrpop/src/lr1/trace/trace_graph/test.rs +++ b/third_party/rust/lalrpop/src/lr1/trace/trace_graph/test.rs @@ -1,164 +1,162 @@ -use grammar::repr::*; -use lr1::core::*; -use string_cache::DefaultAtom as Atom; -use test_util::expect_debug; -use tls::Tls; - -macro_rules! nt { - ($x:ident) => { - NonterminalString(Atom::from(stringify!($x))) - }; -} - -macro_rules! syms { - ($($x:ident),*) => { - vec![$(Symbol::Nonterminal(nt!($x))),*] - } -} - -macro_rules! production { - ($x:ident = $($y:ident)*) => { - Production { - nonterminal: nt!($x), - symbols: syms![$($y),*], - action: ActionFn::new(0), - span: Span(0, 0) - } - } -} - -use super::TraceGraph; - -#[test] -fn enumerator() { - let _tls = Tls::test(); - - // Build this graph: - // - // X = X0 (*) X1 - // ^ - // | - // {X0} - // | - // +-> X <-- Z = Z0 (*) X Z1 - // | - // Y = Y0 (*) X Y1 - // - // which enumerates out to: - // - // [Y0 X0 (*) X1 Y1] - // [Z0 X0 (*) X1 Z1] - - let productions = vec![ - production![X = X0 X1], - production![Y = Y0 X Y1], - production![Z = Z0 X Z1], - ]; - - let mut graph = TraceGraph::new(); - - let item0 = Item::lr0(&productions[0], 1); // X = X0 (*) X1 - graph.add_edge(nt!(X), item0, item0.symbol_sets()); - - let item1 = Item::lr0(&productions[1], 1); // Y = Y0 (*) X Y1 - graph.add_edge(item1, nt!(X), item1.symbol_sets()); - - let item2 = Item::lr0(&productions[2], 1); // Z = Z0 (*) X Z1 - graph.add_edge(item2, nt!(X), item2.symbol_sets()); - - let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 1)); - let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); - expect_debug( - &list, - r#" -[ - [ - " Z0 X0 X1 Z1", - " │ └─X─┘ │", - " └─Z───────┘" - ], - [ - " Y0 X0 X1 Y1", - " │ └─X─┘ │", - " └─Y───────┘" - ] -] -"# - .trim(), - ); -} - -#[test] -fn enumerator1() { - let _tls = Tls::test(); - - // Build this graph: - // - // W = W0 W1 (*) - // ^ - // {W0,W1} - // | - // W - // ^ - // {X0} - // | - // +-> X <-- Z = Z0 (*) X Z1 - // | - // Y = Y0 (*) X Y1 - // - // which enumerates out to: - // - // [Y0 X0 (*) X1 Y1] - // [Z0 X0 (*) X1 Z1] - - let productions = vec![ - production![W = W0 W1], - production![X = X0 W X1], // where X1 may be empty - production![Y = Y0 X Y1], - production![Z = Z0 X Z1], - ]; - - let mut graph = TraceGraph::new(); - - let item0 = Item::lr0(&productions[0], 2); // W = W0 W1 (*) - graph.add_edge(nt!(W), item0, item0.symbol_sets()); - - graph.add_edge( - nt!(X), - nt!(W), - SymbolSets { - prefix: &productions[1].symbols[..1], - cursor: Some(&productions[1].symbols[1]), - suffix: &productions[1].symbols[2..], - }, - ); - - let item1 = Item::lr0(&productions[2], 1); - graph.add_edge(item1, nt!(X), item1.symbol_sets()); - - let item2 = Item::lr0(&productions[3], 1); - graph.add_edge(item2, nt!(X), item2.symbol_sets()); - - let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 2)); - let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); - expect_debug( - &list, - r#" -[ - [ - " Z0 X0 W0 W1 X1 Z1", - " │ │ └─W─┘ │ │", - " │ └─X───────┘ │", - " └─Z─────────────┘" - ], - [ - " Y0 X0 W0 W1 X1 Y1", - " │ │ └─W─┘ │ │", - " │ └─X───────┘ │", - " └─Y─────────────┘" - ] -] -"# - .trim(), - ); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::core::*; +use test_util::expect_debug; +use tls::Tls; + +macro_rules! nt { + ($x:ident) => { + NonterminalString(Atom::from(stringify!($x))) + } +} + +macro_rules! syms { + ($($x:ident),*) => { + vec![$(Symbol::Nonterminal(nt!($x))),*] + } +} + +macro_rules! production { + ($x:ident = $($y:ident)*) => { + Production { + nonterminal: nt!($x), + symbols: syms![$($y),*], + action: ActionFn::new(0), + span: Span(0, 0) + } + } +} + +use super::TraceGraph; + +#[test] +fn enumerator() { + let _tls = Tls::test(); + + // Build this graph: + // + // X = X0 (*) X1 + // ^ + // | + // {X0} + // | + // +-> X <-- Z = Z0 (*) X Z1 + // | + // Y = Y0 (*) X Y1 + // + // which enumerates out to: + // + // [Y0 X0 (*) X1 Y1] + // [Z0 X0 (*) X1 Z1] + + let productions = vec![ + production![X = X0 X1], + production![Y = Y0 X Y1], + production![Z = Z0 X Z1], + ]; + + let mut graph = TraceGraph::new(); + + let item0 = Item::lr0(&productions[0], 1); // X = X0 (*) X1 + graph.add_edge(nt!(X), item0, item0.symbol_sets()); + + let item1 = Item::lr0(&productions[1], 1); // Y = Y0 (*) X Y1 + graph.add_edge(item1, nt!(X), item1.symbol_sets()); + + let item2 = Item::lr0(&productions[2], 1); // Z = Z0 (*) X Z1 + graph.add_edge(item2, nt!(X), item2.symbol_sets()); + + let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 1)); + let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); + expect_debug( + &list, + r#" +[ + [ + " Z0 X0 X1 Z1", + " │ └─X─┘ │", + " └─Z───────┘" + ], + [ + " Y0 X0 X1 Y1", + " │ └─X─┘ │", + " └─Y───────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn enumerator1() { + let _tls = Tls::test(); + + // Build this graph: + // + // W = W0 W1 (*) + // ^ + // {W0,W1} + // | + // W + // ^ + // {X0} + // | + // +-> X <-- Z = Z0 (*) X Z1 + // | + // Y = Y0 (*) X Y1 + // + // which enumerates out to: + // + // [Y0 X0 (*) X1 Y1] + // [Z0 X0 (*) X1 Z1] + + let productions = vec![ + production![W = W0 W1], + production![X = X0 W X1], // where X1 may be empty + production![Y = Y0 X Y1], + production![Z = Z0 X Z1], + ]; + + let mut graph = TraceGraph::new(); + + let item0 = Item::lr0(&productions[0], 2); // W = W0 W1 (*) + graph.add_edge(nt!(W), item0, item0.symbol_sets()); + + graph.add_edge( + nt!(X), + nt!(W), + SymbolSets { + prefix: &productions[1].symbols[..1], + cursor: Some(&productions[1].symbols[1]), + suffix: &productions[1].symbols[2..], + }, + ); + + let item1 = Item::lr0(&productions[2], 1); + graph.add_edge(item1, nt!(X), item1.symbol_sets()); + + let item2 = Item::lr0(&productions[3], 1); + graph.add_edge(item2, nt!(X), item2.symbol_sets()); + + let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 2)); + let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); + expect_debug( + &list, + r#" +[ + [ + " Z0 X0 W0 W1 X1 Z1", + " │ │ └─W─┘ │ │", + " │ └─X───────┘ │", + " └─Z─────────────┘" + ], + [ + " Y0 X0 W0 W1 X1 Y1", + " │ │ └─W─┘ │ │", + " │ └─X───────┘ │", + " └─Y─────────────┘" + ] +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop/src/main.rs b/third_party/rust/lalrpop/src/main.rs index aa9d1980d9ad..4ef4055648cf 100644 --- a/third_party/rust/lalrpop/src/main.rs +++ b/third_party/rust/lalrpop/src/main.rs @@ -1,199 +1,153 @@ -extern crate docopt; -extern crate lalrpop; -#[macro_use] -extern crate serde_derive; -extern crate serde; - -use docopt::Docopt; -use lalrpop::Configuration; -use std::env; -use std::io::{self, Write}; -use std::path::PathBuf; -use std::process; - -static VERSION: &'static str = env!("CARGO_PKG_VERSION"); - -fn main() { - main1().unwrap(); -} - -fn main1() -> io::Result<()> { - let mut stderr = std::io::stderr(); - let mut stdout = std::io::stdout(); - - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(env::args()).deserialize()) - .unwrap_or_else(|e| e.exit()); - - if args.flag_version { - try!(writeln!(stdout, "{}", VERSION)); - process::exit(0); - } - - let mut config = Configuration::new(); - - match args.flag_level.unwrap_or(LevelFlag::Info) { - LevelFlag::Quiet => config.log_quiet(), - LevelFlag::Info => config.log_info(), - LevelFlag::Verbose => config.log_verbose(), - LevelFlag::Debug => config.log_debug(), - }; - - if args.flag_force { - config.force_build(true); - } - - if args.flag_color { - config.always_use_colors(); - } - - if args.flag_comments { - config.emit_comments(true); - } - - if args.flag_no_whitespace { - config.emit_whitespace(false); - } - - if args.flag_report { - config.emit_report(true); - } - - if args.arg_inputs.len() == 0 { - try!(writeln!( - stderr, - "Error: no input files specified! Try --help for help." - )); - process::exit(1); - } - - if let Some(ref out_dir) = args.flag_out_dir { - config.set_out_dir(out_dir); - } - - if let Some(ref flag_features) = args.flag_features { - config.set_features(flag_features.split(',').map(String::from)); - } - - for arg in args.arg_inputs { - match config.process_file(&arg) { - Ok(()) => {} - Err(err) => { - try!(writeln!( - stderr, - "Error encountered processing `{}`: {}", - arg, err - )); - process::exit(1); - } - } - } - - Ok(()) -} - -const USAGE: &'static str = " -Usage: lalrpop [options] ... - lalrpop --help - lalrpop (-V | --version) - -Options: - -V, --version Print version. - -l, --level LEVEL Set the debug level. (Default: info) - Valid values: quiet, info, verbose, debug. - -o, --out-dir DIR Sets the directory in which to output the .rs file(s). - --features FEATURES Comma separated list of features for conditional compilation. - -f, --force Force execution, even if the .lalrpop file is older than the .rs file. - -c, --color Force colorful output, even if this is not a TTY. - --no-whitespace Removes redundant whitespace from the generated file. (Default: false) - --comments Enable comments in the generated code. - --report Generate report files. -"; - -#[derive(Debug, Deserialize)] -struct Args { - arg_inputs: Vec, - flag_out_dir: Option, - flag_features: Option, - flag_level: Option, - flag_force: bool, - flag_color: bool, - flag_comments: bool, - flag_no_whitespace: bool, - flag_report: bool, - flag_version: bool, -} - -#[derive(Debug, Deserialize)] -enum LevelFlag { - Quiet, - Info, - Verbose, - Debug, -} - -#[cfg(test)] -mod test { - use super::Args; - use super::USAGE; - use docopt::Docopt; - - #[test] - fn test_usage_help() { - let argv = || vec!["lalrpop", "--help"]; - let _: Args = Docopt::new(USAGE) - .and_then(|d| d.help(false).argv(argv().into_iter()).deserialize()) - .unwrap(); - } - - #[test] - fn test_usage_version() { - let argv = || vec!["lalrpop", "--version"]; - let _: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - } - - #[test] - fn test_usage_single_input() { - let argv = || vec!["lalrpop", "file.lalrpop"]; - let _: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - } - - #[test] - fn test_usage_multiple_inputs() { - let argv = || vec!["lalrpop", "file.lalrpop", "../file2.lalrpop"]; - let _: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - } - - #[test] - fn out_dir() { - let argv = || vec!["lalrpop", "--out-dir", "abc", "file.lalrpop"]; - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - assert_eq!(args.flag_out_dir, Some("abc".into())); - } - - #[test] - fn features() { - let argv = || vec!["lalrpop", "--features", "test,abc", "file.lalrpop"]; - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - assert_eq!(args.flag_features, Some("test,abc".to_string())); - } - - #[test] - fn emit_whitespace() { - let argv = || vec!["lalrpop", "--no-whitespace", "file.lalrpop"]; - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).deserialize()) - .unwrap(); - assert!(args.flag_no_whitespace, true); - } -} +extern crate docopt; +extern crate lalrpop; +#[macro_use] +extern crate serde_derive; +extern crate serde; + +use docopt::Docopt; +use lalrpop::Configuration; +use std::env; +use std::io::{self, Write}; +use std::process; + +static VERSION: &'static str = env!("CARGO_PKG_VERSION"); + +fn main() { + main1().unwrap(); +} + +fn main1() -> io::Result<()> { + let mut stderr = std::io::stderr(); + let mut stdout = std::io::stdout(); + + let args: Args = Docopt::new(USAGE) + .and_then(|d| d.argv(env::args()).deserialize()) + .unwrap_or_else(|e| e.exit()); + + if args.flag_version { + try!(writeln!(stdout, "{}", VERSION)); + process::exit(0); + } + + let mut config = Configuration::new(); + + match args.flag_level.unwrap_or(LevelFlag::Info) { + LevelFlag::Quiet => config.log_quiet(), + LevelFlag::Info => config.log_info(), + LevelFlag::Verbose => config.log_verbose(), + LevelFlag::Debug => config.log_debug(), + }; + + if args.flag_force { + config.force_build(true); + } + + if args.flag_color { + config.always_use_colors(); + } + + if args.flag_comments { + config.emit_comments(true); + } + + if args.flag_report { + config.emit_report(true); + } + + if args.arg_inputs.len() == 0 { + try!(writeln!( + stderr, + "Error: no input files specified! Try --help for help." + )); + process::exit(1); + } + + for arg in args.arg_inputs { + match config.process_file(&arg) { + Ok(()) => {} + Err(err) => { + try!(writeln!( + stderr, + "Error encountered processing `{}`: {}", + arg, err + )); + process::exit(1); + } + } + } + + Ok(()) +} + +const USAGE: &'static str = " +Usage: lalrpop [options] ... + lalrpop --help + lalrpop (-V | --version) + +Options: + -V, --version Print version. + -l, --level LEVEL Set the debug level. (Default: info) + Valid values: quiet, info, verbose, debug. + -f, --force Force execution, even if the .lalrpop file is older than the .rs file. + -c, --color Force colorful output, even if this is not a TTY. + --comments Enable comments in the generated code. + --report Generate report files. +"; + +#[derive(Debug, Deserialize)] +struct Args { + arg_inputs: Vec, + flag_level: Option, + flag_force: bool, + flag_color: bool, + flag_comments: bool, + flag_report: bool, + flag_version: bool, +} + +#[derive(Debug, Deserialize)] +enum LevelFlag { + Quiet, + Info, + Verbose, + Debug, +} + +#[cfg(test)] +mod test { + use docopt::Docopt; + use super::USAGE; + use super::Args; + + #[test] + fn test_usage_help() { + let argv = || vec!["lalrpop", "--help"]; + let _: Args = Docopt::new(USAGE) + .and_then(|d| d.help(false).argv(argv().into_iter()).deserialize()) + .unwrap(); + } + + #[test] + fn test_usage_version() { + let argv = || vec!["lalrpop", "--version"]; + let _: Args = Docopt::new(USAGE) + .and_then(|d| d.argv(argv().into_iter()).deserialize()) + .unwrap(); + } + + #[test] + fn test_usage_single_input() { + let argv = || vec!["lalrpop", "file.lalrpop"]; + let _: Args = Docopt::new(USAGE) + .and_then(|d| d.argv(argv().into_iter()).deserialize()) + .unwrap(); + } + + #[test] + fn test_usage_multiple_inputs() { + let argv = || vec!["lalrpop", "file.lalrpop", "../file2.lalrpop"]; + let _: Args = Docopt::new(USAGE) + .and_then(|d| d.argv(argv().into_iter()).deserialize()) + .unwrap(); + } +} diff --git a/third_party/rust/lalrpop/src/message/builder.rs b/third_party/rust/lalrpop/src/message/builder.rs index 60031ab31a33..c0c5b7c85a3c 100644 --- a/third_party/rust/lalrpop/src/message/builder.rs +++ b/third_party/rust/lalrpop/src/message/builder.rs @@ -1,309 +1,309 @@ -use grammar::parse_tree::Span; -use message::horiz::Horiz; -use message::indent::Indent; -use message::styled::Styled; -use message::text::Text; -use message::vert::Vert; -use message::wrap::Wrap; -use message::{Content, Message}; -use style::Style; - -pub struct MessageBuilder { - span: Span, - heading: Option>, - body: Option>, -} - -pub struct HeadingCharacter { - message: MessageBuilder, -} - -pub struct BodyCharacter { - message: MessageBuilder, -} - -impl MessageBuilder { - pub fn new(span: Span) -> Self { - MessageBuilder { - span: span, - heading: None, - body: None, - } - } - - pub fn heading(self) -> Builder { - Builder::new(HeadingCharacter { message: self }) - } - - pub fn body(self) -> Builder { - Builder::new(BodyCharacter { message: self }) - } - - pub fn end(self) -> Message { - Message::new( - self.span, - self.heading.expect("never defined a heading"), - self.body.expect("never defined a body"), - ) - } -} - -impl Character for HeadingCharacter { - type End = MessageBuilder; - - fn end(mut self, items: Vec>) -> MessageBuilder { - assert!( - self.message.heading.is_none(), - "already defined a heading for this message" - ); - self.message.heading = Some(Box::new(Vert::new(items, 1))); - self.message - } -} - -impl Character for BodyCharacter { - type End = MessageBuilder; - - fn end(mut self, items: Vec>) -> MessageBuilder { - assert!( - self.message.body.is_none(), - "already defined a body for this message" - ); - self.message.body = Some(Box::new(Vert::new(items, 2))); - self.message - } -} - -/////////////////////////////////////////////////////////////////////////// -// Inline builder: Useful for constructing little bits of content: for -// example, converting an Example into something renderable. Using an -// inline builder, if you push exactly one item, then when you call -// `end` that is what you get; otherwise, you get items laid out -// adjacent to one another horizontally (no spaces in between). - -pub struct InlineBuilder; - -impl InlineBuilder { - pub fn new() -> Builder { - Builder::new(InlineBuilder) - } -} - -impl Character for InlineBuilder { - type End = Box; - - fn end(self, mut items: Vec>) -> Box { - if items.len() == 1 { - items.pop().unwrap() - } else { - Box::new(Horiz::new(items, 1)) - } - } -} - -/////////////////////////////////////////////////////////////////////////// -// Builder -- generic helper for multi-part items - -/// The builder is used to construct multi-part items. It is intended -/// to be used in a "method-call chain" style. The base method is -/// called `push`, and it simply pushes a new child of the current -/// parent. -/// -/// Methods whose name like `begin_foo` are used to create a new -/// multi-part child; they return a fresh builder corresponding to the -/// child. When the child is completely constructed, call `end` to -/// finish the child builder and return to the parent builder. -/// -/// Methods whose name ends in "-ed", such as `styled`, post-process -/// the last item pushed. They will panic if invoked before any items -/// have been pushed. -/// -/// Example: -/// -/// ``` -/// let node = -/// InlineBuilder::new() -/// .begin_lines() // starts a child builder for adjacent lines -/// .text("foo") // add a text node "foo" to the child builder -/// .text("bar") // add a text node "bar" to the child builder -/// .end() // finish the lines builder, return to the parent -/// .end(); // finish the parent `InlineBuilder`, yielding up the -/// // `lines` child that was pushed (see `InlineBuilder` -/// // for more details) -/// ``` -pub struct Builder { - items: Vec>, - character: C, -} - -impl Builder { - fn new(character: C) -> Self { - Builder { - items: vec![], - character: character, - } - } - - pub fn push(mut self, item: I) -> Self - where - I: Into>, - { - self.items.push(item.into()); - self - } - - fn pop(&mut self) -> Option> { - self.items.pop() - } - - pub fn begin_vert(self, separate: usize) -> Builder> { - Builder::new(VertCharacter { - base: self, - separate: separate, - }) - } - - pub fn begin_lines(self) -> Builder> { - self.begin_vert(1) - } - - pub fn begin_paragraphs(self) -> Builder> { - self.begin_vert(2) - } - - pub fn begin_horiz(self, separate: usize) -> Builder> { - Builder::new(HorizCharacter { - base: self, - separate: separate, - }) - } - - // "item1item2" - pub fn begin_adjacent(self) -> Builder> { - self.begin_horiz(1) - } - - // "item1 item2" - pub fn begin_spaced(self) -> Builder> { - self.begin_horiz(2) - } - - pub fn begin_wrap(self) -> Builder> { - Builder::new(WrapCharacter { base: self }) - } - - pub fn styled(mut self, style: Style) -> Self { - let content = self.pop().expect("bold must be applied to an item"); - self.push(Box::new(Styled::new(style, content))) - } - - pub fn indented_by(mut self, amount: usize) -> Self { - let content = self.pop().expect("indent must be applied to an item"); - self.push(Box::new(Indent::new(amount, content))) - } - - pub fn indented(self) -> Self { - self.indented_by(2) - } - - pub fn text(self, text: T) -> Self { - self.push(Box::new(Text::new(text.to_string()))) - } - - /// Take the item just pushed and makes some text adjacent to it. - /// E.g. `builder.wrap().text("foo").adjacent_text(".").end()` - /// result in `"foo."` being printed without any wrapping in - /// between. - pub fn adjacent_text(mut self, prefix: T, suffix: U) -> Self { - let item = self.pop().expect("adjacent text must be added to an item"); - let prefix = prefix.to_string(); - let suffix = suffix.to_string(); - if !prefix.is_empty() && !suffix.is_empty() { - self.begin_adjacent() - .text(prefix) - .push(item) - .text(suffix) - .end() - } else if !suffix.is_empty() { - self.begin_adjacent().push(item).text(suffix).end() - } else if !prefix.is_empty() { - self.begin_adjacent().text(prefix).push(item).end() - } else { - self.push(item) - } - } - - pub fn verbatimed(self) -> Self { - self.adjacent_text("`", "`") - } - - pub fn punctuated(self, text: T) -> Self { - self.adjacent_text("", text) - } - - pub fn wrap_text(self, text: T) -> Self { - self.begin_wrap().text(text).end() - } - - pub fn end(self) -> C::End { - self.character.end(self.items) - } -} - -pub trait Character { - type End; - fn end(self, items: Vec>) -> Self::End; -} - -/////////////////////////////////////////////////////////////////////////// - -pub struct HorizCharacter { - base: Builder, - separate: usize, -} - -impl Character for HorizCharacter { - type End = Builder; - - fn end(self, items: Vec>) -> Builder { - self.base.push(Box::new(Horiz::new(items, self.separate))) - } -} - -/////////////////////////////////////////////////////////////////////////// - -pub struct VertCharacter { - base: Builder, - separate: usize, -} - -impl Character for VertCharacter { - type End = Builder; - - fn end(self, items: Vec>) -> Builder { - self.base.push(Box::new(Vert::new(items, self.separate))) - } -} - -/////////////////////////////////////////////////////////////////////////// - -pub struct WrapCharacter { - base: Builder, -} - -impl Character for WrapCharacter { - type End = Builder; - - fn end(self, items: Vec>) -> Builder { - self.base.push(Box::new(Wrap::new(items))) - } -} - -impl From> for Box -where - T: Content + 'static, -{ - fn from(b: Box) -> Box { - b - } -} +use grammar::parse_tree::Span; +use message::{Content, Message}; +use message::indent::Indent; +use message::horiz::Horiz; +use message::styled::Styled; +use message::text::Text; +use message::vert::Vert; +use message::wrap::Wrap; +use style::Style; + +pub struct MessageBuilder { + span: Span, + heading: Option>, + body: Option>, +} + +pub struct HeadingCharacter { + message: MessageBuilder, +} + +pub struct BodyCharacter { + message: MessageBuilder, +} + +impl MessageBuilder { + pub fn new(span: Span) -> Self { + MessageBuilder { + span: span, + heading: None, + body: None, + } + } + + pub fn heading(self) -> Builder { + Builder::new(HeadingCharacter { message: self }) + } + + pub fn body(self) -> Builder { + Builder::new(BodyCharacter { message: self }) + } + + pub fn end(self) -> Message { + Message::new( + self.span, + self.heading.expect("never defined a heading"), + self.body.expect("never defined a body"), + ) + } +} + +impl Character for HeadingCharacter { + type End = MessageBuilder; + + fn end(mut self, items: Vec>) -> MessageBuilder { + assert!( + self.message.heading.is_none(), + "already defined a heading for this message" + ); + self.message.heading = Some(Box::new(Vert::new(items, 1))); + self.message + } +} + +impl Character for BodyCharacter { + type End = MessageBuilder; + + fn end(mut self, items: Vec>) -> MessageBuilder { + assert!( + self.message.body.is_none(), + "already defined a body for this message" + ); + self.message.body = Some(Box::new(Vert::new(items, 2))); + self.message + } +} + +/////////////////////////////////////////////////////////////////////////// +// Inline builder: Useful for constructing little bits of content: for +// example, converting an Example into something renderable. Using an +// inline builder, if you push exactly one item, then when you call +// `end` that is what you get; otherwise, you get items laid out +// adjacent to one another horizontally (no spaces in between). + +pub struct InlineBuilder; + +impl InlineBuilder { + pub fn new() -> Builder { + Builder::new(InlineBuilder) + } +} + +impl Character for InlineBuilder { + type End = Box; + + fn end(self, mut items: Vec>) -> Box { + if items.len() == 1 { + items.pop().unwrap() + } else { + Box::new(Horiz::new(items, 1)) + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// Builder -- generic helper for multi-part items + +/// The builder is used to construct multi-part items. It is intended +/// to be used in a "method-call chain" style. The base method is +/// called `push`, and it simply pushes a new child of the current +/// parent. +/// +/// Methods whose name like `begin_foo` are used to create a new +/// multi-part child; they return a fresh builder corresponding to the +/// child. When the child is completely constructed, call `end` to +/// finish the child builder and return to the parent builder. +/// +/// Methods whose name ends in "-ed", such as `styled`, post-process +/// the last item pushed. They will panic if invoked before any items +/// have been pushed. +/// +/// Example: +/// +/// ``` +/// let node = +/// InlineBuilder::new() +/// .begin_lines() // starts a child builder for adjacent lines +/// .text("foo") // add a text node "foo" to the child builder +/// .text("bar") // add a text node "bar" to the child builder +/// .end() // finish the lines builder, return to the parent +/// .end(); // finish the parent `InlineBuilder`, yielding up the +/// // `lines` child that was pushed (see `InlineBuilder` +/// // for more details) +/// ``` +pub struct Builder { + items: Vec>, + character: C, +} + +impl Builder { + fn new(character: C) -> Self { + Builder { + items: vec![], + character: character, + } + } + + pub fn push(mut self, item: I) -> Self + where + I: Into>, + { + self.items.push(item.into()); + self + } + + fn pop(&mut self) -> Option> { + self.items.pop() + } + + pub fn begin_vert(self, separate: usize) -> Builder> { + Builder::new(VertCharacter { + base: self, + separate: separate, + }) + } + + pub fn begin_lines(self) -> Builder> { + self.begin_vert(1) + } + + pub fn begin_paragraphs(self) -> Builder> { + self.begin_vert(2) + } + + pub fn begin_horiz(self, separate: usize) -> Builder> { + Builder::new(HorizCharacter { + base: self, + separate: separate, + }) + } + + // "item1item2" + pub fn begin_adjacent(self) -> Builder> { + self.begin_horiz(1) + } + + // "item1 item2" + pub fn begin_spaced(self) -> Builder> { + self.begin_horiz(2) + } + + pub fn begin_wrap(self) -> Builder> { + Builder::new(WrapCharacter { base: self }) + } + + pub fn styled(mut self, style: Style) -> Self { + let content = self.pop().expect("bold must be applied to an item"); + self.push(Box::new(Styled::new(style, content))) + } + + pub fn indented_by(mut self, amount: usize) -> Self { + let content = self.pop().expect("indent must be applied to an item"); + self.push(Box::new(Indent::new(amount, content))) + } + + pub fn indented(self) -> Self { + self.indented_by(2) + } + + pub fn text(self, text: T) -> Self { + self.push(Box::new(Text::new(text.to_string()))) + } + + /// Take the item just pushed and makes some text adjacent to it. + /// E.g. `builder.wrap().text("foo").adjacent_text(".").end()` + /// result in `"foo."` being printed without any wrapping in + /// between. + pub fn adjacent_text(mut self, prefix: T, suffix: U) -> Self { + let item = self.pop().expect("adjacent text must be added to an item"); + let prefix = prefix.to_string(); + let suffix = suffix.to_string(); + if !prefix.is_empty() && !suffix.is_empty() { + self.begin_adjacent() + .text(prefix) + .push(item) + .text(suffix) + .end() + } else if !suffix.is_empty() { + self.begin_adjacent().push(item).text(suffix).end() + } else if !prefix.is_empty() { + self.begin_adjacent().text(prefix).push(item).end() + } else { + self.push(item) + } + } + + pub fn verbatimed(self) -> Self { + self.adjacent_text("`", "`") + } + + pub fn punctuated(self, text: T) -> Self { + self.adjacent_text("", text) + } + + pub fn wrap_text(self, text: T) -> Self { + self.begin_wrap().text(text).end() + } + + pub fn end(self) -> C::End { + self.character.end(self.items) + } +} + +pub trait Character { + type End; + fn end(self, items: Vec>) -> Self::End; +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct HorizCharacter { + base: Builder, + separate: usize, +} + +impl Character for HorizCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Horiz::new(items, self.separate))) + } +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct VertCharacter { + base: Builder, + separate: usize, +} + +impl Character for VertCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Vert::new(items, self.separate))) + } +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct WrapCharacter { + base: Builder, +} + +impl Character for WrapCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Wrap::new(items))) + } +} + +impl From> for Box +where + T: Content + 'static, +{ + fn from(b: Box) -> Box { + b + } +} diff --git a/third_party/rust/lalrpop/src/message/horiz.rs b/third_party/rust/lalrpop/src/message/horiz.rs index d5546fedca47..275fe1d06cf9 100644 --- a/third_party/rust/lalrpop/src/message/horiz.rs +++ b/third_party/rust/lalrpop/src/message/horiz.rs @@ -1,44 +1,44 @@ -use super::*; -use ascii_canvas::AsciiView; -use itertools::Itertools; - -#[derive(Debug)] -pub struct Horiz { - items: Vec>, - separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs -} - -impl Horiz { - pub fn new(items: Vec>, separate: usize) -> Self { - Horiz { - items: items, - separate: separate, - } - } -} - -impl Content for Horiz { - fn min_width(&self) -> usize { - self.items - .iter() - .map(|c| c.min_width()) - .intersperse(self.separate) - .fold(0, |a, b| a + b) - } - - fn emit(&self, view: &mut AsciiView) { - emit_horiz(view, &self.items, self.separate); - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.push(self); - } -} - -pub fn emit_horiz(view: &mut AsciiView, items: &[Box], separate: usize) { - let mut column = 0; - for item in items { - let (_, end_column) = item.emit_at(view, 0, column); - column = end_column + separate; - } -} +use ascii_canvas::AsciiView; +use itertools::Itertools; +use super::*; + +#[derive(Debug)] +pub struct Horiz { + items: Vec>, + separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs +} + +impl Horiz { + pub fn new(items: Vec>, separate: usize) -> Self { + Horiz { + items: items, + separate: separate, + } + } +} + +impl Content for Horiz { + fn min_width(&self) -> usize { + self.items + .iter() + .map(|c| c.min_width()) + .intersperse(self.separate) + .fold(0, |a, b| a + b) + } + + fn emit(&self, view: &mut AsciiView) { + emit_horiz(view, &self.items, self.separate); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +pub fn emit_horiz(view: &mut AsciiView, items: &[Box], separate: usize) { + let mut column = 0; + for item in items { + let (_, end_column) = item.emit_at(view, 0, column); + column = end_column + separate; + } +} diff --git a/third_party/rust/lalrpop/src/message/indent.rs b/third_party/rust/lalrpop/src/message/indent.rs index a4f4b102de6b..e3311d6544fd 100644 --- a/third_party/rust/lalrpop/src/message/indent.rs +++ b/third_party/rust/lalrpop/src/message/indent.rs @@ -1,32 +1,32 @@ -use super::*; -use ascii_canvas::AsciiView; - -#[derive(Debug)] -pub struct Indent { - amount: usize, - content: Box, -} - -impl Indent { - pub fn new(amount: usize, content: Box) -> Self { - Indent { - amount: amount, - content: content, - } - } -} - -impl Content for Indent { - fn min_width(&self) -> usize { - self.content.min_width() + self.amount - } - - fn emit(&self, view: &mut AsciiView) { - let mut subview = view.shift(0, self.amount); - self.content.emit(&mut subview); - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.push(self); - } -} +use ascii_canvas::AsciiView; +use super::*; + +#[derive(Debug)] +pub struct Indent { + amount: usize, + content: Box, +} + +impl Indent { + pub fn new(amount: usize, content: Box) -> Self { + Indent { + amount: amount, + content: content, + } + } +} + +impl Content for Indent { + fn min_width(&self) -> usize { + self.content.min_width() + self.amount + } + + fn emit(&self, view: &mut AsciiView) { + let mut subview = view.shift(0, self.amount); + self.content.emit(&mut subview); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} diff --git a/third_party/rust/lalrpop/src/message/message.rs b/third_party/rust/lalrpop/src/message/message.rs index 4ea495b655ba..1c5397c284b8 100644 --- a/third_party/rust/lalrpop/src/message/message.rs +++ b/third_party/rust/lalrpop/src/message/message.rs @@ -1,85 +1,84 @@ -use ascii_canvas::AsciiView; -use grammar::parse_tree::Span; -use message::Content; -use std::cmp; -use std::fmt::{Debug, Error, Formatter}; -use style::Style; -use tls::Tls; - -/// The top-level message display like this: -/// -/// ``` -/// : -/// -/// -/// ``` -/// -/// This is equivalent to a -/// -/// ``` -/// Vert[separate=2] { -/// Horiz[separate=1] { -/// Horiz[separate=0] { -/// Citation { span }, -/// Text { ":" }, -/// }, -/// , -/// }, -/// -/// } -/// ``` -pub struct Message { - span: Span, - heading: Box, - body: Box, -} - -impl Message { - pub fn new(span: Span, heading: Box, body: Box) -> Self { - Message { - span: span, - heading: heading, - body: body, - } - } -} - -impl Content for Message { - fn min_width(&self) -> usize { - let file_text = Tls::file_text(); - let span = file_text.span_str(self.span).chars().count(); - let heading = self.heading.min_width(); - let body = self.body.min_width(); - cmp::max(span + heading + 2, body + 2) - } - - fn emit(&self, view: &mut AsciiView) { - let session = Tls::session(); - let file_text = Tls::file_text(); - - let span = file_text.span_str(self.span); - view.write_chars(0, 0, span.chars(), Style::new()); - let count = span.chars().count(); - view.write_chars(0, count, ":".chars(), Style::new()); - - let (row, _) = self - .heading - .emit_at(&mut view.styled(session.heading), 0, count + 2); - - self.body.emit_at(view, row + 2, 2); - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.push(self); - } -} - -impl Debug for Message { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - fmt.debug_struct("Message") - .field("span", &self.span) - .field("heading", &self.heading) - .field("body", &self.body) - .finish() - } -} +use ascii_canvas::AsciiView; +use grammar::parse_tree::Span; +use message::Content; +use std::cmp; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use tls::Tls; + +/// The top-level message display like this: +/// +/// ``` +/// : +/// +/// +/// ``` +/// +/// This is equivalent to a +/// +/// ``` +/// Vert[separate=2] { +/// Horiz[separate=1] { +/// Horiz[separate=0] { +/// Citation { span }, +/// Text { ":" }, +/// }, +/// , +/// }, +/// +/// } +/// ``` +pub struct Message { + span: Span, + heading: Box, + body: Box, +} + +impl Message { + pub fn new(span: Span, heading: Box, body: Box) -> Self { + Message { + span: span, + heading: heading, + body: body, + } + } +} + +impl Content for Message { + fn min_width(&self) -> usize { + let file_text = Tls::file_text(); + let span = file_text.span_str(self.span).chars().count(); + let heading = self.heading.min_width(); + let body = self.body.min_width(); + cmp::max(span + heading + 2, body + 2) + } + + fn emit(&self, view: &mut AsciiView) { + let session = Tls::session(); + let file_text = Tls::file_text(); + + let span = file_text.span_str(self.span); + view.write_chars(0, 0, span.chars(), Style::new()); + let count = span.chars().count(); + view.write_chars(0, count, ":".chars(), Style::new()); + + let (row, _) = self.heading + .emit_at(&mut view.styled(session.heading), 0, count + 2); + + self.body.emit_at(view, row + 2, 2); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +impl Debug for Message { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + fmt.debug_struct("Message") + .field("span", &self.span) + .field("heading", &self.heading) + .field("body", &self.body) + .finish() + } +} diff --git a/third_party/rust/lalrpop/src/message/mod.rs b/third_party/rust/lalrpop/src/message/mod.rs index e4c99ec00405..5ddc21c02f1f 100644 --- a/third_party/rust/lalrpop/src/message/mod.rs +++ b/third_party/rust/lalrpop/src/message/mod.rs @@ -1,79 +1,79 @@ -use ascii_canvas::{AsciiCanvas, AsciiView}; - -use std::cmp; -use std::fmt::Debug; - -pub mod builder; -pub mod horiz; -pub mod indent; -pub mod message; -pub mod styled; -#[cfg(test)] -mod test; -pub mod text; -pub mod vert; -pub mod wrap; - -/// Content which can be rendered. -pub trait Content: Debug { - fn min_width(&self) -> usize; - - fn emit(&self, view: &mut AsciiView); - - /// Creates a canvas at least `min_width` in width (it may be - /// larger if the content requires that) and fills it with the - /// current content. Returns the canvas. Typically `min_width` - /// would be 80 or the width of the current terminal. - fn emit_to_canvas(&self, min_width: usize) -> AsciiCanvas { - let computed_min = self.min_width(); - let min_width = cmp::max(min_width, computed_min); - debug!( - "emit_to_canvas: min_width={} computed_min={} self={:#?}", - min_width, computed_min, self - ); - let mut canvas = AsciiCanvas::new(0, min_width); - self.emit(&mut canvas); - canvas - } - - /// Emit at a particular upper-left corner, returning the - /// lower-right corner that was emitted. - fn emit_at(&self, view: &mut AsciiView, row: usize, column: usize) -> (usize, usize) { - debug!( - "emit_at({},{}) self={:?} min_width={:?}", - row, - column, - self, - self.min_width() - ); - let mut shifted_view = view.shift(row, column); - self.emit(&mut shifted_view); - let (r, c) = shifted_view.close(); - (r, c) - } - - /// When items are enclosed into a wrap, this method deconstructs - /// them into their indivisible components. - fn into_wrap_items(self: Box, wrap_items: &mut Vec>); -} - -/// Helper function: convert `content` into wrap items and then map -/// those with `op`, appending the final result into `wrap_items`. -/// Useful for "modifier" content items like `Styled` that do not -/// affect wrapping. -fn into_wrap_items_map(content: Box, wrap_items: &mut Vec>, op: OP) -where - OP: FnMut(Box) -> C, - C: Content + 'static, -{ - let mut subvector = vec![]; - content.into_wrap_items(&mut subvector); - wrap_items.extend( - subvector - .into_iter() - .map(op) - .map(|item| Box::new(item) as Box), - ); -} - -pub use self::message::Message; +use ascii_canvas::{AsciiCanvas, AsciiView}; + +use std::cmp; +use std::fmt::Debug; + +pub mod builder; +pub mod horiz; +pub mod message; +pub mod indent; +pub mod styled; +#[cfg(test)] +mod test; +pub mod text; +pub mod vert; +pub mod wrap; + +/// Content which can be rendered. +pub trait Content: Debug { + fn min_width(&self) -> usize; + + fn emit(&self, view: &mut AsciiView); + + /// Creates a canvas at least `min_width` in width (it may be + /// larger if the content requires that) and fills it with the + /// current content. Returns the canvas. Typically `min_width` + /// would be 80 or the width of the current terminal. + fn emit_to_canvas(&self, min_width: usize) -> AsciiCanvas { + let computed_min = self.min_width(); + let min_width = cmp::max(min_width, computed_min); + debug!( + "emit_to_canvas: min_width={} computed_min={} self={:#?}", + min_width, computed_min, self + ); + let mut canvas = AsciiCanvas::new(0, min_width); + self.emit(&mut canvas); + canvas + } + + /// Emit at a particular upper-left corner, returning the + /// lower-right corner that was emitted. + fn emit_at(&self, view: &mut AsciiView, row: usize, column: usize) -> (usize, usize) { + debug!( + "emit_at({},{}) self={:?} min_width={:?}", + row, + column, + self, + self.min_width() + ); + let mut shifted_view = view.shift(row, column); + self.emit(&mut shifted_view); + let (r, c) = shifted_view.close(); + (r, c) + } + + /// When items are enclosed into a wrap, this method deconstructs + /// them into their indivisible components. + fn into_wrap_items(self: Box, wrap_items: &mut Vec>); +} + +/// Helper function: convert `content` into wrap items and then map +/// those with `op`, appending the final result into `wrap_items`. +/// Useful for "modifier" content items like `Styled` that do not +/// affect wrapping. +fn into_wrap_items_map(content: Box, wrap_items: &mut Vec>, op: OP) +where + OP: FnMut(Box) -> C, + C: Content + 'static, +{ + let mut subvector = vec![]; + content.into_wrap_items(&mut subvector); + wrap_items.extend( + subvector + .into_iter() + .map(op) + .map(|item| Box::new(item) as Box), + ); +} + +pub use self::message::Message; diff --git a/third_party/rust/lalrpop/src/message/styled.rs b/third_party/rust/lalrpop/src/message/styled.rs index fc73c0f1fe47..9bef07687704 100644 --- a/third_party/rust/lalrpop/src/message/styled.rs +++ b/third_party/rust/lalrpop/src/message/styled.rs @@ -1,41 +1,41 @@ -use super::*; -use ascii_canvas::AsciiView; -use std::fmt::{Debug, Error, Formatter}; -use style::Style; - -pub struct Styled { - style: Style, - content: Box, -} - -impl Styled { - pub fn new(style: Style, content: Box) -> Self { - Styled { - style: style, - content: content, - } - } -} - -impl Content for Styled { - fn min_width(&self) -> usize { - self.content.min_width() - } - - fn emit(&self, view: &mut AsciiView) { - self.content.emit(&mut view.styled(self.style)) - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - let style = self.style; - super::into_wrap_items_map(self.content, wrap_items, |item| Styled::new(style, item)) - } -} - -impl Debug for Styled { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - fmt.debug_struct("Styled") - .field("content", &self.content) - .finish() - } -} +use ascii_canvas::AsciiView; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use super::*; + +pub struct Styled { + style: Style, + content: Box, +} + +impl Styled { + pub fn new(style: Style, content: Box) -> Self { + Styled { + style: style, + content: content, + } + } +} + +impl Content for Styled { + fn min_width(&self) -> usize { + self.content.min_width() + } + + fn emit(&self, view: &mut AsciiView) { + self.content.emit(&mut view.styled(self.style)) + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + let style = self.style; + super::into_wrap_items_map(self.content, wrap_items, |item| Styled::new(style, item)) + } +} + +impl Debug for Styled { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + fmt.debug_struct("Styled") + .field("content", &self.content) + .finish() + } +} diff --git a/third_party/rust/lalrpop/src/message/test.rs b/third_party/rust/lalrpop/src/message/test.rs index 7ae51b8aaabb..118d8469e1ba 100644 --- a/third_party/rust/lalrpop/src/message/test.rs +++ b/third_party/rust/lalrpop/src/message/test.rs @@ -1,151 +1,142 @@ -use ascii_canvas::AsciiCanvas; -use grammar::parse_tree::Span; -use message::builder::MessageBuilder; -use test_util::expect_debug; -use tls::Tls; - -use super::*; - -fn install_tls() -> Tls { - Tls::test_string( - r#"foo -bar -baz -"#, - ) -} - -#[test] -fn hello_world() { - let _tls = install_tls(); - let msg = MessageBuilder::new(Span(0, 2)) - .heading() - .text("Hello, world!") - .end() - .body() - .begin_wrap() - .text( - "This is a very, very, very, very long sentence. \ - OK, not THAT long!", - ) - .end() - .indented_by(4) - .end() - .end(); - let min_width = msg.min_width(); - let mut canvas = AsciiCanvas::new(0, min_width); - msg.emit(&mut canvas); - expect_debug( - &canvas.to_strings(), - r#" -[ - "tmp.txt:1:1: 1:2: Hello, world!", - "", - " This is a very, very,", - " very, very long sentence.", - " OK, not THAT long!" -] -"# - .trim(), - ); -} - -/// Test a case where the body in the message is longer than the -/// header (which used to mess up the `min_width` computation). -#[test] -fn long_body() { - let _tls = install_tls(); - let msg = MessageBuilder::new(Span(0, 2)) - .heading() - .text("Hello, world!") - .end() - .body() - .text( - "This is a very, very, very, very long sentence. \ - OK, not THAT long!", - ) - .end() - .end(); - let min_width = msg.min_width(); - let mut canvas = AsciiCanvas::new(0, min_width); - msg.emit(&mut canvas); - expect_debug( - &canvas.to_strings(), - r#" -[ - "tmp.txt:1:1: 1:2: Hello, world!", - "", - " This is a very, very, very, very long sentence. OK, not THAT long!" -] -"# - .trim(), - ); -} - -#[test] -fn paragraphs() { - let _tls = install_tls(); - let msg = MessageBuilder::new(Span(0, 2)) - .heading() - .text("Hello, world!") - .end() // heading - .body() - .begin_paragraphs() - .begin_wrap() - .text( - "This is the first paragraph. It contains a lot of really interesting \ - information that the reader will no doubt peruse with care.", - ) - .end() - .begin_wrap() - .text( - "This is the second paragraph. It contains even more really interesting \ - information that the reader will no doubt skip over with wild abandon.", - ) - .end() - .begin_wrap() - .text( - "This is the final paragraph. The reader won't even spare this one \ - a second glance, despite it containing just waht they need to know \ - to solve their problem and to derive greater pleasure from life. \ - The secret: All you need is love! Dum da da dum.", - ) - .end() - .end() - .end() - .end(); - let min_width = msg.min_width(); - let mut canvas = AsciiCanvas::new(0, min_width); - msg.emit(&mut canvas); - expect_debug( - &canvas.to_strings(), - r#" -[ - "tmp.txt:1:1: 1:2: Hello, world!", - "", - " This is the first paragraph.", - " It contains a lot of really", - " interesting information that", - " the reader will no doubt", - " peruse with care.", - "", - " This is the second paragraph.", - " It contains even more really", - " interesting information that", - " the reader will no doubt skip", - " over with wild abandon.", - "", - " This is the final paragraph.", - " The reader won't even spare", - " this one a second glance,", - " despite it containing just", - " waht they need to know to", - " solve their problem and to", - " derive greater pleasure from", - " life. The secret: All you", - " need is love! Dum da da dum." -] -"# - .trim(), - ); -} +use ascii_canvas::AsciiCanvas; +use grammar::parse_tree::Span; +use message::builder::MessageBuilder; +use test_util::expect_debug; +use tls::Tls; + +use super::*; + +fn install_tls() -> Tls { + Tls::test_string( + r#"foo +bar +baz +"#, + ) +} + +#[test] +fn hello_world() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() + .body() + .begin_wrap() + .text( + "This is a very, very, very, very long sentence. \ + OK, not THAT long!", + ) + .end() + .indented_by(4) + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is a very, very,", + " very, very long sentence.", + " OK, not THAT long!" +] +"#.trim(), + ); +} + +/// Test a case where the body in the message is longer than the +/// header (which used to mess up the `min_width` computation). +#[test] +fn long_body() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() + .body() + .text( + "This is a very, very, very, very long sentence. \ + OK, not THAT long!", + ) + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is a very, very, very, very long sentence. OK, not THAT long!" +] +"#.trim(), + ); +} + +#[test] +fn paragraphs() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() // heading + .body() + .begin_paragraphs() + .begin_wrap() + .text("This is the first paragraph. It contains a lot of really interesting \ + information that the reader will no doubt peruse with care.") + .end() + .begin_wrap() + .text("This is the second paragraph. It contains even more really interesting \ + information that the reader will no doubt skip over with wild abandon.") + .end() + .begin_wrap() + .text("This is the final paragraph. The reader won't even spare this one \ + a second glance, despite it containing just waht they need to know \ + to solve their problem and to derive greater pleasure from life. \ + The secret: All you need is love! Dum da da dum.") + .end() + .end() + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is the first paragraph.", + " It contains a lot of really", + " interesting information that", + " the reader will no doubt", + " peruse with care.", + "", + " This is the second paragraph.", + " It contains even more really", + " interesting information that", + " the reader will no doubt skip", + " over with wild abandon.", + "", + " This is the final paragraph.", + " The reader won't even spare", + " this one a second glance,", + " despite it containing just", + " waht they need to know to", + " solve their problem and to", + " derive greater pleasure from", + " life. The secret: All you", + " need is love! Dum da da dum." +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop/src/message/text.rs b/third_party/rust/lalrpop/src/message/text.rs index 90e8de964685..b807444057af 100644 --- a/third_party/rust/lalrpop/src/message/text.rs +++ b/third_party/rust/lalrpop/src/message/text.rs @@ -1,37 +1,37 @@ -use ascii_canvas::AsciiView; -use style::Style; - -use super::*; - -/// Text to be display. This will be flowed appropriately depending on -/// the container; e.g., in a Horiz, it will be one unit, but in a -/// Wrap, it will be broken up word by word. -#[derive(Debug)] -pub struct Text { - text: String, -} - -impl Text { - pub fn new(text: String) -> Self { - Text { text: text } - } -} - -impl Content for Text { - fn min_width(&self) -> usize { - self.text.chars().count() - } - - fn emit(&self, view: &mut AsciiView) { - view.write_chars(0, 0, self.text.chars(), Style::new()) - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.extend( - self.text - .split_whitespace() - .map(|word| Text::new(word.to_string())) - .map(|item| Box::new(item) as Box), - ); - } -} +use ascii_canvas::AsciiView; +use style::Style; + +use super::*; + +/// Text to be display. This will be flowed appropriately depending on +/// the container; e.g., in a Horiz, it will be one unit, but in a +/// Wrap, it will be broken up word by word. +#[derive(Debug)] +pub struct Text { + text: String, +} + +impl Text { + pub fn new(text: String) -> Self { + Text { text: text } + } +} + +impl Content for Text { + fn min_width(&self) -> usize { + self.text.chars().count() + } + + fn emit(&self, view: &mut AsciiView) { + view.write_chars(0, 0, self.text.chars(), Style::new()) + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.extend( + self.text + .split_whitespace() + .map(|word| Text::new(word.to_string())) + .map(|item| Box::new(item) as Box), + ); + } +} diff --git a/third_party/rust/lalrpop/src/message/vert.rs b/third_party/rust/lalrpop/src/message/vert.rs index 1e0523664323..a470bdcec808 100644 --- a/third_party/rust/lalrpop/src/message/vert.rs +++ b/third_party/rust/lalrpop/src/message/vert.rs @@ -1,39 +1,39 @@ -use super::*; -use ascii_canvas::AsciiView; - -#[derive(Debug)] -pub struct Vert { - items: Vec>, - separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs -} - -impl Vert { - pub fn new(items: Vec>, separate: usize) -> Self { - Vert { - items: items, - separate: separate, - } - } -} - -impl Content for Vert { - fn min_width(&self) -> usize { - self.items.iter().map(|c| c.min_width()).max().unwrap() - } - - fn emit(&self, view: &mut AsciiView) { - emit_vert(view, &self.items, self.separate); - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.push(self); - } -} - -pub fn emit_vert(view: &mut AsciiView, items: &[Box], separate: usize) { - let mut row = 0; - for item in items { - let (end_row, _) = item.emit_at(view, row, 0); - row = end_row + separate; - } -} +use ascii_canvas::AsciiView; +use super::*; + +#[derive(Debug)] +pub struct Vert { + items: Vec>, + separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs +} + +impl Vert { + pub fn new(items: Vec>, separate: usize) -> Self { + Vert { + items: items, + separate: separate, + } + } +} + +impl Content for Vert { + fn min_width(&self) -> usize { + self.items.iter().map(|c| c.min_width()).max().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + emit_vert(view, &self.items, self.separate); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +pub fn emit_vert(view: &mut AsciiView, items: &[Box], separate: usize) { + let mut row = 0; + for item in items { + let (end_row, _) = item.emit_at(view, row, 0); + row = end_row + separate; + } +} diff --git a/third_party/rust/lalrpop/src/message/wrap.rs b/third_party/rust/lalrpop/src/message/wrap.rs index 38fae65882e0..11984119f598 100644 --- a/third_party/rust/lalrpop/src/message/wrap.rs +++ b/third_party/rust/lalrpop/src/message/wrap.rs @@ -1,54 +1,54 @@ -use super::*; -use ascii_canvas::AsciiView; -use std::cmp; - -#[derive(Debug)] -pub struct Wrap { - items: Vec>, -} - -impl Wrap { - pub fn new(items: Vec>) -> Self { - let mut wrap_items = vec![]; - for item in items { - item.into_wrap_items(&mut wrap_items); - } - Wrap { items: wrap_items } - } -} - -impl Content for Wrap { - fn min_width(&self) -> usize { - self.items.iter().map(|c| c.min_width()).max().unwrap() - } - - fn emit(&self, view: &mut AsciiView) { - let columns = view.columns(); - let mut row = 0; // current row - let mut height = 1; // max height of anything in this row - let mut column = 0; // current column in this row - - for item in &self.items { - let len = item.min_width(); - - // If we don't have enough space for this content, - // then move to the next line. - if column + len > columns { - column = 0; - row += height; - height = 1; - } - - assert!(column + len <= columns); - - let (c_row, c_column) = item.emit_at(view, row, column); - assert!(c_column >= column); - column = c_column + 2; - height = cmp::max(c_row - row + 1, height); - } - } - - fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { - wrap_items.extend(self.items); // `items` are already subdivided - } -} +use ascii_canvas::AsciiView; +use std::cmp; +use super::*; + +#[derive(Debug)] +pub struct Wrap { + items: Vec>, +} + +impl Wrap { + pub fn new(items: Vec>) -> Self { + let mut wrap_items = vec![]; + for item in items { + item.into_wrap_items(&mut wrap_items); + } + Wrap { items: wrap_items } + } +} + +impl Content for Wrap { + fn min_width(&self) -> usize { + self.items.iter().map(|c| c.min_width()).max().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + let columns = view.columns(); + let mut row = 0; // current row + let mut height = 1; // max height of anything in this row + let mut column = 0; // current column in this row + + for item in &self.items { + let len = item.min_width(); + + // If we don't have enough space for this content, + // then move to the next line. + if column + len > columns { + column = 0; + row += height; + height = 1; + } + + assert!(column + len <= columns); + + let (c_row, c_column) = item.emit_at(view, row, column); + assert!(c_column >= column); + column = c_column + 2; + height = cmp::max(c_row - row + 1, height); + } + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.extend(self.items); // `items` are already subdivided + } +} diff --git a/third_party/rust/lalrpop/src/normalize/inline/graph/mod.rs b/third_party/rust/lalrpop/src/normalize/inline/graph/mod.rs index ffc5f45c4893..10d768f0f2eb 100644 --- a/third_party/rust/lalrpop/src/normalize/inline/graph/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/inline/graph/mod.rs @@ -1,120 +1,119 @@ -#![allow(dead_code)] - -use collections::{map, Map}; -use grammar::consts::INLINE; -use grammar::repr::*; -use normalize::{NormError, NormResult}; -use petgraph::graph::{Graph, NodeIndex}; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -/// Computes the proper order to inline the various nonterminals in -/// `grammar`. Reports an error if there is an inline -/// cycle. Otherwise, yields an ordering such that we inline X before -/// Y if Y references X. I actually think it doesn't matter what -/// order we do the inlining, really, but this order seems better -/// somehow. :) (That is, inline into something before we inline it.) -pub fn inline_order(grammar: &Grammar) -> NormResult> { - let mut graph = NonterminalGraph::new(grammar); - graph.create_nodes(); - graph.add_edges(); - graph.inline_order() -} - -struct NonterminalGraph<'grammar> { - grammar: &'grammar Grammar, - graph: Graph, - nonterminal_map: Map, -} - -#[derive(Copy, Clone)] -enum WalkState { - NotVisited, - Visiting, - Visited, -} - -impl<'grammar> NonterminalGraph<'grammar> { - fn new(grammar: &'grammar Grammar) -> NonterminalGraph<'grammar> { - NonterminalGraph { - grammar: grammar, - graph: Graph::new(), - nonterminal_map: map(), - } - } - - fn create_nodes(&mut self) { - let inline = Atom::from(INLINE); - for (name, data) in &self.grammar.nonterminals { - if data.annotations.iter().any(|a| a.id == inline) { - let index = self.graph.add_node(name.clone()); - self.nonterminal_map.insert(name.clone(), index); - } - } - } - - fn add_edges(&mut self) { - for production in self - .grammar - .nonterminals - .values() - .flat_map(|d| &d.productions) - { - let from_index = match self.nonterminal_map.get(&production.nonterminal) { - Some(&index) => index, - None => continue, // this is not an inlined nonterminal - }; - - for symbol in &production.symbols { - match *symbol { - Symbol::Nonterminal(ref to) => { - if let Some(&to_index) = self.nonterminal_map.get(to) { - self.graph.add_edge(from_index, to_index, ()); - } - } - Symbol::Terminal(_) => {} - } - } - } - } - - fn inline_order(&self) -> NormResult> { - let mut states = vec![WalkState::NotVisited; self.graph.node_count()]; - let mut result = vec![]; - for node in self.nonterminal_map.values().cloned() { - try!(self.walk(&mut states, &mut result, node)); - } - Ok(result) - } - - fn walk( - &self, - states: &mut Vec, - result: &mut Vec, - source: NodeIndex, - ) -> NormResult<()> { - let nt = self.graph.node_weight(source).unwrap(); - - match states[source.index()] { - WalkState::NotVisited => { - states[source.index()] = WalkState::Visiting; - for target in self.graph.neighbors(source) { - try!(self.walk(states, result, target)); - } - states[source.index()] = WalkState::Visited; - result.push(nt.clone()); - Ok(()) - } - WalkState::Visited => Ok(()), - WalkState::Visiting => { - return_err!( - self.grammar.nonterminals[&nt].span, - "cyclic inline directive: `{}` would have to be inlined into itself", - nt - ); - } - } - } -} +#![allow(dead_code)] + +use string_cache::DefaultAtom as Atom; +use normalize::{NormError, NormResult}; +use petgraph::graph::{Graph, NodeIndex}; +use grammar::consts::INLINE; +use grammar::repr::*; +use collections::{map, Map}; + +#[cfg(test)] +mod test; + +/// Computes the proper order to inline the various nonterminals in +/// `grammar`. Reports an error if there is an inline +/// cycle. Otherwise, yields an ordering such that we inline X before +/// Y if Y references X. I actually think it doesn't matter what +/// order we do the inlining, really, but this order seems better +/// somehow. :) (That is, inline into something before we inline it.) +pub fn inline_order(grammar: &Grammar) -> NormResult> { + let mut graph = NonterminalGraph::new(grammar); + graph.create_nodes(); + graph.add_edges(); + graph.inline_order() +} + +struct NonterminalGraph<'grammar> { + grammar: &'grammar Grammar, + graph: Graph, + nonterminal_map: Map, +} + +#[derive(Copy, Clone)] +enum WalkState { + NotVisited, + Visiting, + Visited, +} + +impl<'grammar> NonterminalGraph<'grammar> { + fn new(grammar: &'grammar Grammar) -> NonterminalGraph<'grammar> { + NonterminalGraph { + grammar: grammar, + graph: Graph::new(), + nonterminal_map: map(), + } + } + + fn create_nodes(&mut self) { + let inline = Atom::from(INLINE); + for (name, data) in &self.grammar.nonterminals { + if data.annotations.iter().any(|a| a.id == inline) { + let index = self.graph.add_node(name.clone()); + self.nonterminal_map.insert(name.clone(), index); + } + } + } + + fn add_edges(&mut self) { + for production in self.grammar + .nonterminals + .values() + .flat_map(|d| &d.productions) + { + let from_index = match self.nonterminal_map.get(&production.nonterminal) { + Some(&index) => index, + None => continue, // this is not an inlined nonterminal + }; + + for symbol in &production.symbols { + match *symbol { + Symbol::Nonterminal(ref to) => { + if let Some(&to_index) = self.nonterminal_map.get(to) { + self.graph.add_edge(from_index, to_index, ()); + } + } + Symbol::Terminal(_) => {} + } + } + } + } + + fn inline_order(&self) -> NormResult> { + let mut states = vec![WalkState::NotVisited; self.graph.node_count()]; + let mut result = vec![]; + for node in self.nonterminal_map.values().cloned() { + try!(self.walk(&mut states, &mut result, node)); + } + Ok(result) + } + + fn walk( + &self, + states: &mut Vec, + result: &mut Vec, + source: NodeIndex, + ) -> NormResult<()> { + let nt = self.graph.node_weight(source).unwrap(); + + match states[source.index()] { + WalkState::NotVisited => { + states[source.index()] = WalkState::Visiting; + for target in self.graph.neighbors(source) { + try!(self.walk(states, result, target)); + } + states[source.index()] = WalkState::Visited; + result.push(nt.clone()); + Ok(()) + } + WalkState::Visited => Ok(()), + WalkState::Visiting => { + return_err!( + self.grammar.nonterminals[&nt].span, + "cyclic inline directive: `{}` would have to be inlined into itself", + nt + ); + } + } + } +} diff --git a/third_party/rust/lalrpop/src/normalize/inline/graph/test.rs b/third_party/rust/lalrpop/src/normalize/inline/graph/test.rs index 75a8574a2c36..a2952702b7c5 100644 --- a/third_party/rust/lalrpop/src/normalize/inline/graph/test.rs +++ b/third_party/rust/lalrpop/src/normalize/inline/graph/test.rs @@ -1,55 +1,52 @@ -use super::inline_order; -use grammar::repr::NonterminalString; -use normalize::lower_helper; -use parser; -use session::Session; -use string_cache::DefaultAtom as Atom; - -#[test] -fn test_inline_self_cycle() { - let grammar = parser::parse_grammar( - r#" - grammar; - extern { } - #[inline] A: () = A; -"#, - ) - .unwrap(); - let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); - assert!(inline_order(&grammar).is_err()); -} - -#[test] -fn test_inline_cycle_3() { - let grammar = parser::parse_grammar( - r#" - grammar; - extern { } - #[inline] A: () = B; - #[inline] B: () = C; - #[inline] C: () = A; -"#, - ) - .unwrap(); - let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); - assert!(inline_order(&grammar).is_err()); -} - -#[test] -fn test_inline_order() { - // because C references A, we inline A first. - let grammar = parser::parse_grammar( - r#" - grammar; - extern { } - #[inline] A: () = B; - B: () = C; - #[inline] C: () = A; -"#, - ) - .unwrap(); - let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); - let a = NonterminalString(Atom::from("A")); - let c = NonterminalString(Atom::from("C")); - assert_eq!(inline_order(&grammar).unwrap(), vec![a, c]); -} +use string_cache::DefaultAtom as Atom; +use grammar::repr::NonterminalString; +use normalize::lower_helper; +use parser; +use session::Session; +use super::inline_order; + +#[test] +fn test_inline_self_cycle() { + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + assert!(inline_order(&grammar).is_err()); +} + +#[test] +fn test_inline_cycle_3() { + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = B; + #[inline] B: () = C; + #[inline] C: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + assert!(inline_order(&grammar).is_err()); +} + +#[test] +fn test_inline_order() { + // because C references A, we inline A first. + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = B; + B: () = C; + #[inline] C: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + let a = NonterminalString(Atom::from("A")); + let c = NonterminalString(Atom::from("C")); + assert_eq!(inline_order(&grammar).unwrap(), vec![a, c]); +} diff --git a/third_party/rust/lalrpop/src/normalize/inline/mod.rs b/third_party/rust/lalrpop/src/normalize/inline/mod.rs index 91b4c8a83ba1..d0a032e86771 100644 --- a/third_party/rust/lalrpop/src/normalize/inline/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/inline/mod.rs @@ -1,157 +1,156 @@ -/*! - * Inlining of nonterminals - */ - -use grammar::repr::*; -use normalize::NormResult; - -mod graph; - -#[cfg(test)] -mod test; - -pub fn inline(mut grammar: Grammar) -> NormResult { - let order = try!(graph::inline_order(&grammar)); - for nt in order { - inline_nt(&mut grammar, &nt); - } - Ok(grammar) -} - -fn inline_nt(grammar: &mut Grammar, inline_nt: &NonterminalString) { - let inline_productions: Vec<_> = grammar.productions_for(inline_nt).iter().cloned().collect(); - for (_, data) in &mut grammar.nonterminals { - let mut new_productions = vec![]; - let mut new_action_fn_defns = vec![]; - - for into_production in &data.productions { - if !into_production - .symbols - .contains(&Symbol::Nonterminal(inline_nt.clone())) - { - new_productions.push(into_production.clone()); - continue; - } - - let mut inliner = Inliner { - action_fn_defns: &grammar.action_fn_defns, - inline_nonterminal: inline_nt.clone(), - into_production: into_production, - inline_fallible: 0, - inline_productions: &inline_productions, - new_symbols: vec![], - new_productions: &mut new_productions, - new_action_fn_defns: &mut new_action_fn_defns, - }; - - inliner.inline(&into_production.symbols); - } - - data.productions = new_productions; - grammar.action_fn_defns.extend(new_action_fn_defns); - } -} - -struct Inliner<'a> { - /// Action fn defns - action_fn_defns: &'a [ActionFnDefn], - - /// The nonterminal `A` being inlined - inline_nonterminal: NonterminalString, - - /// The full set of productions `A = B C D | E F G` for the - /// nonterminal `A` being inlined - inline_productions: &'a [Production], - - /// Number of actions that we have inlined for `A` so far which - /// have been fallible. IOW, if we are inlining `A` into `X = Y A - /// A Z`, and in the first instance of `A` we used a fallible - /// action, but the second we used an infallible one, count would - /// be 1. - inline_fallible: u32, - - /// The `X = Y A Z` being inlined into - into_production: &'a Production, - - /// The list of symbols we building up for the new production. - /// For example, this would (eventually) contain `Y B C D Z`, - /// given our running example. - new_symbols: Vec, - - /// The output vector of all productions for `X` that we have created - new_productions: &'a mut Vec, - - /// Vector of all action fn defns from the grammar. - new_action_fn_defns: &'a mut Vec, -} - -impl<'a> Inliner<'a> { - fn inline(&mut self, into_symbols: &[Symbol]) { - if into_symbols.is_empty() { - // create an action fn for the result of inlining - let into_action = self.into_production.action; - let into_fallible = self.action_fn_defns[into_action.index()].fallible; - let into_ret_type = self.action_fn_defns[into_action.index()].ret_type.clone(); - let inline_fallible = self.inline_fallible != 0; - let index = self.action_fn_defns.len() + self.new_action_fn_defns.len(); - let action_fn = ActionFn::new(index); - let inline_defn = InlineActionFnDefn { - action: into_action, - symbols: self.new_symbols.clone(), - }; - self.new_action_fn_defns.push(ActionFnDefn { - fallible: into_fallible || inline_fallible, - ret_type: into_ret_type, - kind: ActionFnDefnKind::Inline(inline_defn), - }); - let prod_symbols: Vec = self - .new_symbols - .iter() - .flat_map(|sym| match *sym { - InlinedSymbol::Original(ref s) => vec![s.clone()], - InlinedSymbol::Inlined(_, ref s) => s.clone(), - }) - .collect(); - self.new_productions.push(Production { - nonterminal: self.into_production.nonterminal.clone(), - span: self.into_production.span, - symbols: prod_symbols, - action: action_fn, - }); - } else { - let next_symbol = &into_symbols[0]; - match *next_symbol { - Symbol::Nonterminal(ref n) if *n == self.inline_nonterminal => { - // Replace the current symbol with each of the - // `inline_productions` in turn. - for inline_production in self.inline_productions { - // If this production is fallible, increment - // count of fallible actions. - let inline_action = inline_production.action; - let fallible = self.action_fn_defns[inline_action.index()].fallible; - self.inline_fallible += fallible as u32; - - // Push the symbols of the production inline. - self.new_symbols.push(InlinedSymbol::Inlined( - inline_production.action, - inline_production.symbols.clone(), - )); - - // Inline remaining symbols: - self.inline(&into_symbols[1..]); - - // Reset state after we have inlined remaining symbols: - self.new_symbols.pop(); - self.inline_fallible -= fallible as u32; - } - } - _ => { - self.new_symbols - .push(InlinedSymbol::Original(next_symbol.clone())); - self.inline(&into_symbols[1..]); - self.new_symbols.pop(); - } - } - } - } -} +/*! + * Inlining of nonterminals + */ + +use grammar::repr::*; +use normalize::NormResult; + +mod graph; + +#[cfg(test)] +mod test; + +pub fn inline(mut grammar: Grammar) -> NormResult { + let order = try!(graph::inline_order(&grammar)); + for nt in order { + inline_nt(&mut grammar, &nt); + } + Ok(grammar) +} + +fn inline_nt(grammar: &mut Grammar, inline_nt: &NonterminalString) { + let inline_productions: Vec<_> = grammar.productions_for(inline_nt).iter().cloned().collect(); + for (_, data) in &mut grammar.nonterminals { + let mut new_productions = vec![]; + let mut new_action_fn_defns = vec![]; + + for into_production in &data.productions { + if !into_production + .symbols + .contains(&Symbol::Nonterminal(inline_nt.clone())) + { + new_productions.push(into_production.clone()); + continue; + } + + let mut inliner = Inliner { + action_fn_defns: &grammar.action_fn_defns, + inline_nonterminal: inline_nt.clone(), + into_production: into_production, + inline_fallible: 0, + inline_productions: &inline_productions, + new_symbols: vec![], + new_productions: &mut new_productions, + new_action_fn_defns: &mut new_action_fn_defns, + }; + + inliner.inline(&into_production.symbols); + } + + data.productions = new_productions; + grammar.action_fn_defns.extend(new_action_fn_defns); + } +} + +struct Inliner<'a> { + /// Action fn defns + action_fn_defns: &'a [ActionFnDefn], + + /// The nonterminal `A` being inlined + inline_nonterminal: NonterminalString, + + /// The full set of productions `A = B C D | E F G` for the + /// nonterminal `A` being inlined + inline_productions: &'a [Production], + + /// Number of actions that we have inlined for `A` so far which + /// have been fallible. IOW, if we are inlining `A` into `X = Y A + /// A Z`, and in the first instance of `A` we used a fallible + /// action, but the second we used an infallible one, count would + /// be 1. + inline_fallible: u32, + + /// The `X = Y A Z` being inlined into + into_production: &'a Production, + + /// The list of symbols we building up for the new production. + /// For example, this would (eventually) contain `Y B C D Z`, + /// given our running example. + new_symbols: Vec, + + /// The output vector of all productions for `X` that we have created + new_productions: &'a mut Vec, + + /// Vector of all action fn defns from the grammar. + new_action_fn_defns: &'a mut Vec, +} + +impl<'a> Inliner<'a> { + fn inline(&mut self, into_symbols: &[Symbol]) { + if into_symbols.is_empty() { + // create an action fn for the result of inlining + let into_action = self.into_production.action; + let into_fallible = self.action_fn_defns[into_action.index()].fallible; + let into_ret_type = self.action_fn_defns[into_action.index()].ret_type.clone(); + let inline_fallible = self.inline_fallible != 0; + let index = self.action_fn_defns.len() + self.new_action_fn_defns.len(); + let action_fn = ActionFn::new(index); + let inline_defn = InlineActionFnDefn { + action: into_action, + symbols: self.new_symbols.clone(), + }; + self.new_action_fn_defns.push(ActionFnDefn { + fallible: into_fallible || inline_fallible, + ret_type: into_ret_type, + kind: ActionFnDefnKind::Inline(inline_defn), + }); + let prod_symbols: Vec = self.new_symbols + .iter() + .flat_map(|sym| match *sym { + InlinedSymbol::Original(ref s) => vec![s.clone()], + InlinedSymbol::Inlined(_, ref s) => s.clone(), + }) + .collect(); + self.new_productions.push(Production { + nonterminal: self.into_production.nonterminal.clone(), + span: self.into_production.span, + symbols: prod_symbols, + action: action_fn, + }); + } else { + let next_symbol = &into_symbols[0]; + match *next_symbol { + Symbol::Nonterminal(ref n) if *n == self.inline_nonterminal => { + // Replace the current symbol with each of the + // `inline_productions` in turn. + for inline_production in self.inline_productions { + // If this production is fallible, increment + // count of fallible actions. + let inline_action = inline_production.action; + let fallible = self.action_fn_defns[inline_action.index()].fallible; + self.inline_fallible += fallible as u32; + + // Push the symbols of the production inline. + self.new_symbols.push(InlinedSymbol::Inlined( + inline_production.action, + inline_production.symbols.clone(), + )); + + // Inline remaining symbols: + self.inline(&into_symbols[1..]); + + // Reset state after we have inlined remaining symbols: + self.new_symbols.pop(); + self.inline_fallible -= fallible as u32; + } + } + _ => { + self.new_symbols + .push(InlinedSymbol::Original(next_symbol.clone())); + self.inline(&into_symbols[1..]); + self.new_symbols.pop(); + } + } + } + } +} diff --git a/third_party/rust/lalrpop/src/normalize/inline/test.rs b/third_party/rust/lalrpop/src/normalize/inline/test.rs index 430df474b21f..3a6b121e8d62 100644 --- a/third_party/rust/lalrpop/src/normalize/inline/test.rs +++ b/third_party/rust/lalrpop/src/normalize/inline/test.rs @@ -1,104 +1,102 @@ -use grammar::parse_tree::NonterminalString; -use grammar::repr::Grammar; -use normalize::{self, NormResult}; -use parser; -use session::Session; -use string_cache::DefaultAtom as Atom; - -use super::inline; - -fn inlined_grammar(text: &str) -> NormResult { - let g = parser::parse_grammar(text).unwrap(); - let g = normalize::lower_helper(&Session::test(), g, true).unwrap(); - inline(g) -} - -#[test] -fn sri() { - // This grammar gets a shift-reduce conflict because if the input - // is "&" (*) "L", then we see two possibilities, and we must decide - // between them: - // - // "&" (*) "L" E - // | | | - // +-------+--| - // | - // E - // - // or - // - // "&" (*) "L" - // | | - // | OPT_L E - // | | | - // +---+---+----+ - // | - // E - // - // to some extent this may be a false conflict, in that inlined - // rules would address it, but it's an interesting one for - // producing a useful error message. - - let grammar = inlined_grammar( - r#" - grammar; - - E: () = { - "L", - "&" OPT_L E - }; - - #[inline] OPT_L: () = { - (), - "L" - }; - "#, - ) - .unwrap(); - - let nt = NonterminalString(Atom::from("E")); - - // After inlining, we expect: - // - // E = "L" - // E = "&" E - // E = "&" "L" E - // - // Note that the `()` also gets inlined. - let e_productions = grammar.productions_for(&nt); - assert_eq!(e_productions.len(), 3); - assert_eq!(format!("{:?}", e_productions[0].symbols), r#"["L"]"#); - assert_eq!(format!("{:?}", e_productions[1].symbols), r#"["&", E]"#); - assert_eq!( - format!("{:?}", e_productions[2].symbols), - r#"["&", "L", E]"# - ); -} - -#[test] -fn issue_55() { - let grammar = inlined_grammar( - r#" -grammar; - -pub E: () = { - "X" "{" "}" => () -}; - -AT: () = { - "type" ";" => () -}; - -ET: () = { - "enum" "{" "}" => () -}; - "#, - ) - .unwrap(); - let nt = NonterminalString(Atom::from("E")); - - // The problem in issue #55 was that we would inline both `AT*` - // the same way, so we ended up with `E = X { ET }` and `E = X { - // AT+ ET AT+ }` but not `E = X { AT+ ET }` or `E = X { ET AT+ }`. - assert!(grammar.productions_for(&nt).len() == 4); -} +use grammar::parse_tree::NonterminalString; +use grammar::repr::Grammar; +use string_cache::DefaultAtom as Atom; +use normalize::{self, NormResult}; +use parser; +use session::Session; + +use super::inline; + +fn inlined_grammar(text: &str) -> NormResult { + let g = parser::parse_grammar(text).unwrap(); + let g = normalize::lower_helper(&Session::test(), g, true).unwrap(); + inline(g) +} + +#[test] +fn sri() { + // This grammar gets a shift-reduce conflict because if the input + // is "&" (*) "L", then we see two possibilities, and we must decide + // between them: + // + // "&" (*) "L" E + // | | | + // +-------+--| + // | + // E + // + // or + // + // "&" (*) "L" + // | | + // | OPT_L E + // | | | + // +---+---+----+ + // | + // E + // + // to some extent this may be a false conflict, in that inlined + // rules would address it, but it's an interesting one for + // producing a useful error message. + + let grammar = inlined_grammar( + r#" + grammar; + + E: () = { + "L", + "&" OPT_L E + }; + + #[inline] OPT_L: () = { + (), + "L" + }; + "#, + ).unwrap(); + + let nt = NonterminalString(Atom::from("E")); + + // After inlining, we expect: + // + // E = "L" + // E = "&" E + // E = "&" "L" E + // + // Note that the `()` also gets inlined. + let e_productions = grammar.productions_for(&nt); + assert_eq!(e_productions.len(), 3); + assert_eq!(format!("{:?}", e_productions[0].symbols), r#"["L"]"#); + assert_eq!(format!("{:?}", e_productions[1].symbols), r#"["&", E]"#); + assert_eq!( + format!("{:?}", e_productions[2].symbols), + r#"["&", "L", E]"# + ); +} + +#[test] +fn issue_55() { + let grammar = inlined_grammar( + r#" +grammar; + +pub E: () = { + "X" "{" "}" => () +}; + +AT: () = { + "type" ";" => () +}; + +ET: () = { + "enum" "{" "}" => () +}; + "#, + ).unwrap(); + let nt = NonterminalString(Atom::from("E")); + + // The problem in issue #55 was that we would inline both `AT*` + // the same way, so we ended up with `E = X { ET }` and `E = X { + // AT+ ET AT+ }` but not `E = X { AT+ ET }` or `E = X { ET AT+ }`. + assert!(grammar.productions_for(&nt).len() == 4); +} diff --git a/third_party/rust/lalrpop/src/normalize/lower/mod.rs b/third_party/rust/lalrpop/src/normalize/lower/mod.rs index b10b1420e998..d11f1e180439 100644 --- a/third_party/rust/lalrpop/src/normalize/lower/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/lower/mod.rs @@ -1,479 +1,459 @@ -//! Lower -//! - -use collections::{map, Map}; -use grammar::consts::*; -use grammar::parse_tree as pt; -use grammar::parse_tree::{read_algorithm, InternToken, NonterminalString, Path, TerminalString}; -use grammar::pattern::{Pattern, PatternKind}; -use grammar::repr as r; -use normalize::norm_util::{self, Symbols}; -use normalize::NormResult; -use session::Session; -use string_cache::DefaultAtom as Atom; - -pub fn lower(session: &Session, grammar: pt::Grammar, types: r::Types) -> NormResult { - let state = LowerState::new(session, types, &grammar); - state.lower(grammar) -} - -struct LowerState<'s> { - session: &'s Session, - prefix: String, - action_fn_defns: Vec, - nonterminals: Map, - conversions: Vec<(TerminalString, Pattern)>, - intern_token: Option, - types: r::Types, - uses_error_recovery: bool, -} - -impl<'s> LowerState<'s> { - fn new(session: &'s Session, types: r::Types, grammar: &pt::Grammar) -> Self { - LowerState { - session: session, - prefix: grammar.prefix.clone(), - action_fn_defns: vec![], - nonterminals: map(), - conversions: vec![], - types: types, - intern_token: None, - uses_error_recovery: false, - } - } - - fn lower(mut self, grammar: pt::Grammar) -> NormResult { - let start_symbols = self.synthesize_start_symbols(&grammar); - - let mut uses = vec![]; - let mut token_span = None; - let internal_token_path = Path { - absolute: false, - ids: vec![Atom::from("Token")], - }; - - for item in grammar.items { - match item { - pt::GrammarItem::Use(data) => { - uses.push(data); - } - - pt::GrammarItem::MatchToken(_) => { - // The declarations in the match token are handled - // fully by the `token_check` when it constructs the - // `InternToken` -- there is nothing left to do here. - } - - pt::GrammarItem::InternToken(data) => { - token_span = Some(grammar.span); - let span = grammar.span; - let input_str = r::TypeRepr::Ref { - lifetime: Some(Atom::from(INPUT_LIFETIME)), - mutable: false, - referent: Box::new(r::TypeRepr::Nominal(r::NominalTypeRepr { - path: r::Path::str(), - types: vec![], - })), - }; - self.conversions - .extend(data.match_entries.iter().enumerate().map( - |(index, match_entry)| { - let pattern = Pattern { - span: span, - kind: PatternKind::TupleStruct( - internal_token_path.clone(), - vec![ - Pattern { - span: span, - kind: PatternKind::Usize(index), - }, - Pattern { - span: span, - kind: PatternKind::Choose(input_str.clone()), - }, - ], - ), - }; - - (match_entry.user_name.clone(), pattern) - }, - )); - self.intern_token = Some(data); - } - - pt::GrammarItem::ExternToken(data) => { - if let Some(enum_token) = data.enum_token { - token_span = Some(enum_token.type_span); - self.conversions - .extend(enum_token.conversions.iter().map(|conversion| { - ( - conversion.from.clone(), - conversion.to.map(&mut |t| t.type_repr()), - ) - })); - } - } - - pt::GrammarItem::Nonterminal(nt) => { - let nt_name = &nt.name; - let productions: Vec<_> = nt - .alternatives - .into_iter() - .map(|alt| { - let nt_type = self.types.nonterminal_type(nt_name).clone(); - let symbols = self.symbols(&alt.expr.symbols); - let action = self.action_kind(nt_type, &alt.expr, &symbols, alt.action); - r::Production { - nonterminal: nt_name.clone(), - span: alt.span, - symbols: symbols, - action: action, - } - }) - .collect(); - self.nonterminals.insert( - nt_name.clone(), - r::NonterminalData { - name: nt_name.clone(), - visibility: nt.visibility.clone(), - annotations: nt.annotations, - span: nt.span, - productions: productions, - }, - ); - } - } - } - - let parameters = grammar - .parameters - .iter() - .map(|p| r::Parameter { - name: p.name.clone(), - ty: p.ty.type_repr(), - }) - .collect(); - - let where_clauses = grammar - .where_clauses - .iter() - .map(|wc| wc.map(pt::TypeRef::type_repr)) - .collect(); - - let mut algorithm = r::Algorithm::default(); - - // FIXME Error recovery only works for parse tables so temporarily only generate parse tables for - // testing - if self.session.unit_test && !self.uses_error_recovery { - algorithm.codegen = r::LrCodeGeneration::TestAll; - } - - read_algorithm(&grammar.annotations, &mut algorithm); - - let mut all_terminals: Vec<_> = self - .conversions - .iter() - .map(|c| c.0.clone()) - .chain(if self.uses_error_recovery { - Some(TerminalString::Error) - } else { - None - }) - .collect(); - all_terminals.sort(); - - let terminal_bits: Map<_, _> = all_terminals.iter().cloned().zip(0..).collect(); - - Ok(r::Grammar { - uses_error_recovery: self.uses_error_recovery, - prefix: self.prefix, - start_nonterminals: start_symbols, - uses: uses, - action_fn_defns: self.action_fn_defns, - nonterminals: self.nonterminals, - conversions: self.conversions.into_iter().collect(), - types: self.types, - token_span: token_span.unwrap(), - type_parameters: grammar.type_parameters, - parameters: parameters, - where_clauses: where_clauses, - algorithm: algorithm, - intern_token: self.intern_token, - terminals: r::TerminalSet { - all: all_terminals, - bits: terminal_bits, - }, - module_attributes: grammar.module_attributes, - }) - } - - fn synthesize_start_symbols( - &mut self, - grammar: &pt::Grammar, - ) -> Map { - let session = self.session; - grammar - .items - .iter() - .filter_map(|item| item.as_nonterminal()) - .filter(|nt| nt.visibility.is_pub()) - .filter(|nt| cfg_active(session, nt)) - .map(|nt| { - // create a synthetic symbol `__Foo` for each public symbol `Foo` - // with a rule like: - // - // __Foo = Foo; - let fake_name = - pt::NonterminalString(Atom::from(format!("{}{}", self.prefix, nt.name))); - let nt_type = self.types.nonterminal_type(&nt.name).clone(); - self.types.add_type(fake_name.clone(), nt_type.clone()); - let expr = pt::ExprSymbol { - symbols: vec![pt::Symbol::new( - nt.span, - pt::SymbolKind::Nonterminal(fake_name.clone()), - )], - }; - let symbols = vec![r::Symbol::Nonterminal(nt.name.clone())]; - let action_fn = self.action_fn(nt_type, false, &expr, &symbols, None); - let production = r::Production { - nonterminal: fake_name.clone(), - symbols: symbols, - action: action_fn, - span: nt.span, - }; - self.nonterminals.insert( - fake_name.clone(), - r::NonterminalData { - name: fake_name.clone(), - visibility: nt.visibility.clone(), - annotations: vec![], - span: nt.span, - productions: vec![production], - }, - ); - (nt.name.clone(), fake_name) - }) - .collect() - } - - fn action_kind( - &mut self, - nt_type: r::TypeRepr, - expr: &pt::ExprSymbol, - symbols: &[r::Symbol], - action: Option, - ) -> r::ActionFn { - match action { - Some(pt::ActionKind::Lookahead) => self.lookahead_action_fn(), - Some(pt::ActionKind::Lookbehind) => self.lookbehind_action_fn(), - Some(pt::ActionKind::User(string)) => { - self.action_fn(nt_type, false, &expr, &symbols, Some(string)) - } - Some(pt::ActionKind::Fallible(string)) => { - self.action_fn(nt_type, true, &expr, &symbols, Some(string)) - } - None => self.action_fn(nt_type, false, &expr, &symbols, None), - } - } - - fn lookahead_action_fn(&mut self) -> r::ActionFn { - let action_fn_defn = r::ActionFnDefn { - fallible: false, - ret_type: self.types.terminal_loc_type(), - kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookahead), - }; - - self.add_action_fn(action_fn_defn) - } - - fn lookbehind_action_fn(&mut self) -> r::ActionFn { - let action_fn_defn = r::ActionFnDefn { - fallible: false, - ret_type: self.types.terminal_loc_type(), - kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookbehind), - }; - - self.add_action_fn(action_fn_defn) - } - - fn action_fn( - &mut self, - nt_type: r::TypeRepr, - fallible: bool, - expr: &pt::ExprSymbol, - symbols: &[r::Symbol], - action: Option, - ) -> r::ActionFn { - let action = match action { - Some(s) => s, - None => { - // If the user declared a type `()`, or we inferred - // it, then there is only one possible action that - // will type-check (`()`), so supply that. Otherwise, - // default is to include all selected items. - if nt_type.is_unit() { - format!("()") - } else { - format!("(<>)") - } - } - }; - - // Note that the action fn takes ALL of the symbols in `expr` - // as arguments, and some of them are simply dropped based on - // the user's selections. - - // The set of argument types is thus the type of all symbols: - let arg_types: Vec = - symbols.iter().map(|s| s.ty(&self.types)).cloned().collect(); - - let action_fn_defn = match norm_util::analyze_expr(expr) { - Symbols::Named(names) => { - // if there are named symbols, we want to give the - // arguments the names that the user gave them: - let arg_patterns = patterns( - names - .iter() - .map(|&(index, ref name, _)| (index, name.clone())), - symbols.len(), - ); - - let action = { - match norm_util::check_between_braces(&action) { - norm_util::Presence::None => action, - norm_util::Presence::Normal => { - let name_str: String = { - let name_strs: Vec<_> = names - .iter() - .map(|&(_, ref name, _)| name.as_ref()) - .collect(); - name_strs.join(", ") - }; - action.replace("<>", &name_str) - } - norm_util::Presence::InCurlyBrackets => { - let name_str = { - let name_strs: Vec<_> = names - .iter() - .map(|&(_, ref name, _)| format!("{0}:{0}", &*name)) - .collect(); - name_strs.join(", ") - }; - action.replace("<>", &name_str) - } - } - }; - - r::ActionFnDefn { - fallible: fallible, - ret_type: nt_type, - kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { - arg_patterns: arg_patterns, - arg_types: arg_types, - code: action, - }), - } - } - Symbols::Anon(indices) => { - let names: Vec<_> = (0..indices.len()).map(|i| self.fresh_name(i)).collect(); - let arg_patterns = patterns( - indices - .iter() - .map(|&(index, _)| index) - .zip(names.iter().cloned()), - symbols.len(), - ); - let name_str = { - let name_strs: Vec<_> = names.iter().map(|n| n.as_ref()).collect(); - name_strs.join(", ") - }; - let action = action.replace("<>", &name_str); - r::ActionFnDefn { - fallible: fallible, - ret_type: nt_type, - kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { - arg_patterns: arg_patterns, - arg_types: arg_types, - code: action, - }), - } - } - }; - - self.add_action_fn(action_fn_defn) - } - - fn add_action_fn(&mut self, action_fn_defn: r::ActionFnDefn) -> r::ActionFn { - let index = r::ActionFn::new(self.action_fn_defns.len()); - self.action_fn_defns.push(action_fn_defn); - index - } - - fn symbols(&mut self, symbols: &[pt::Symbol]) -> Vec { - symbols.iter().map(|sym| self.symbol(sym)).collect() - } - - fn symbol(&mut self, symbol: &pt::Symbol) -> r::Symbol { - match symbol.kind { - pt::SymbolKind::Terminal(ref id) => r::Symbol::Terminal(id.clone()), - pt::SymbolKind::Nonterminal(ref id) => r::Symbol::Nonterminal(id.clone()), - pt::SymbolKind::Choose(ref s) | pt::SymbolKind::Name(_, ref s) => self.symbol(s), - pt::SymbolKind::Error => { - self.uses_error_recovery = true; - r::Symbol::Terminal(TerminalString::Error) - } - - pt::SymbolKind::Macro(..) - | pt::SymbolKind::Repeat(..) - | pt::SymbolKind::Expr(..) - | pt::SymbolKind::AmbiguousId(_) - | pt::SymbolKind::Lookahead - | pt::SymbolKind::Lookbehind => unreachable!( - "symbol `{}` should have been normalized away by now", - symbol - ), - } - } - - fn fresh_name(&self, i: usize) -> Atom { - Atom::from(format!("{}{}", self.prefix, i)) - } -} - -fn patterns(mut chosen: I, num_args: usize) -> Vec -where - I: Iterator, -{ - let blank = Atom::from("_"); - - let mut next_chosen = chosen.next(); - - let result = (0..num_args) - .map(|index| match next_chosen.clone() { - Some((chosen_index, ref chosen_name)) if chosen_index == index => { - next_chosen = chosen.next(); - chosen_name.clone() - } - _ => blank.clone(), - }) - .collect(); - - debug_assert!(next_chosen.is_none()); - - result -} - -fn cfg_active(session: &Session, nt: &pt::NonterminalData) -> bool { - let cfg_atom = Atom::from(CFG); - nt.annotations - .iter() - .filter(|ann| ann.id == cfg_atom) - .all(|ann| { - ann.arg.as_ref().map_or(false, |&(_, ref feature)| { - session - .features - .as_ref() - .map_or(false, |features| features.contains(feature)) - }) - }) -} +//! Lower +//! + +use string_cache::DefaultAtom as Atom; +use normalize::NormResult; +use normalize::norm_util::{self, Symbols}; +use grammar::consts::*; +use grammar::pattern::{Pattern, PatternKind}; +use grammar::parse_tree as pt; +use grammar::parse_tree::{read_algorithm, InternToken, NonterminalString, Path, TerminalString}; +use grammar::repr as r; +use session::Session; +use collections::{map, Map}; + +pub fn lower(session: &Session, grammar: pt::Grammar, types: r::Types) -> NormResult { + let state = LowerState::new(session, types, &grammar); + state.lower(grammar) +} + +struct LowerState<'s> { + session: &'s Session, + prefix: String, + action_fn_defns: Vec, + nonterminals: Map, + conversions: Vec<(TerminalString, Pattern)>, + intern_token: Option, + types: r::Types, + uses_error_recovery: bool, +} + +impl<'s> LowerState<'s> { + fn new(session: &'s Session, types: r::Types, grammar: &pt::Grammar) -> Self { + LowerState { + session: session, + prefix: grammar.prefix.clone(), + action_fn_defns: vec![], + nonterminals: map(), + conversions: vec![], + types: types, + intern_token: None, + uses_error_recovery: false, + } + } + + fn lower(mut self, grammar: pt::Grammar) -> NormResult { + let start_symbols = self.synthesize_start_symbols(&grammar); + + let mut uses = vec![]; + let mut token_span = None; + let internal_token_path = Path { + absolute: false, + ids: vec![Atom::from("Token")], + }; + + for item in grammar.items { + match item { + pt::GrammarItem::Use(data) => { + uses.push(data); + } + + pt::GrammarItem::MatchToken(_) => { + // The declarations in the match token are handled + // fully by the `token_check` when it constructs the + // `InternToken` -- there is nothing left to do here. + } + + pt::GrammarItem::InternToken(data) => { + token_span = Some(grammar.span); + let span = grammar.span; + let input_str = r::TypeRepr::Ref { + lifetime: Some(Atom::from(INPUT_LIFETIME)), + mutable: false, + referent: Box::new(r::TypeRepr::Nominal(r::NominalTypeRepr { + path: r::Path::str(), + types: vec![], + })), + }; + self.conversions + .extend(data.match_entries.iter().enumerate().map( + |(index, match_entry)| { + let pattern = Pattern { + span: span, + kind: PatternKind::TupleStruct( + internal_token_path.clone(), + vec![ + Pattern { + span: span, + kind: PatternKind::Usize(index), + }, + Pattern { + span: span, + kind: PatternKind::Choose(input_str.clone()), + }, + ], + ), + }; + + (match_entry.user_name.clone(), pattern) + }, + )); + self.intern_token = Some(data); + } + + pt::GrammarItem::ExternToken(data) => { + if let Some(enum_token) = data.enum_token { + token_span = Some(enum_token.type_span); + self.conversions + .extend(enum_token.conversions.iter().map(|conversion| { + ( + conversion.from.clone(), + conversion.to.map(&mut |t| t.type_repr()), + ) + })); + } + } + + pt::GrammarItem::Nonterminal(nt) => { + let nt_name = &nt.name; + let productions: Vec<_> = nt.alternatives + .into_iter() + .map(|alt| { + let nt_type = self.types.nonterminal_type(nt_name).clone(); + let symbols = self.symbols(&alt.expr.symbols); + let action = self.action_kind(nt_type, &alt.expr, &symbols, alt.action); + r::Production { + nonterminal: nt_name.clone(), + span: alt.span, + symbols: symbols, + action: action, + } + }) + .collect(); + self.nonterminals.insert( + nt_name.clone(), + r::NonterminalData { + name: nt_name.clone(), + visibility: nt.visibility.clone(), + annotations: nt.annotations, + span: nt.span, + productions: productions, + }, + ); + } + } + } + + let parameters = grammar + .parameters + .iter() + .map(|p| r::Parameter { + name: p.name.clone(), + ty: p.ty.type_repr(), + }) + .collect(); + + let where_clauses = grammar + .where_clauses + .iter() + .map(|wc| wc.map(pt::TypeRef::type_repr)) + .collect(); + + let mut algorithm = r::Algorithm::default(); + + // FIXME Error recovery only works for parse tables so temporarily only generate parse tables for + // testing + if self.session.unit_test && !self.uses_error_recovery { + algorithm.codegen = r::LrCodeGeneration::TestAll; + } + + read_algorithm(&grammar.annotations, &mut algorithm); + + let mut all_terminals: Vec<_> = self.conversions + .iter() + .map(|c| c.0.clone()) + .chain(if self.uses_error_recovery { + Some(TerminalString::Error) + } else { + None + }) + .collect(); + all_terminals.sort(); + + let terminal_bits: Map<_, _> = all_terminals.iter().cloned().zip(0..).collect(); + + Ok(r::Grammar { + uses_error_recovery: self.uses_error_recovery, + prefix: self.prefix, + start_nonterminals: start_symbols, + uses: uses, + action_fn_defns: self.action_fn_defns, + nonterminals: self.nonterminals, + conversions: self.conversions.into_iter().collect(), + types: self.types, + token_span: token_span.unwrap(), + type_parameters: grammar.type_parameters, + parameters: parameters, + where_clauses: where_clauses, + algorithm: algorithm, + intern_token: self.intern_token, + terminals: r::TerminalSet { + all: all_terminals, + bits: terminal_bits, + }, + module_attributes: grammar.module_attributes, + }) + } + + fn synthesize_start_symbols( + &mut self, + grammar: &pt::Grammar, + ) -> Map { + grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .filter(|nt| nt.visibility.is_pub()) + .map(|nt| { + // create a synthetic symbol `__Foo` for each public symbol `Foo` + // with a rule like: + // + // __Foo = Foo; + let fake_name = + pt::NonterminalString(Atom::from(format!("{}{}", self.prefix, nt.name))); + let nt_type = self.types.nonterminal_type(&nt.name).clone(); + self.types.add_type(fake_name.clone(), nt_type.clone()); + let expr = pt::ExprSymbol { + symbols: vec![ + pt::Symbol::new(nt.span, pt::SymbolKind::Nonterminal(fake_name.clone())), + ], + }; + let symbols = vec![r::Symbol::Nonterminal(nt.name.clone())]; + let action_fn = self.action_fn(nt_type, false, &expr, &symbols, None); + let production = r::Production { + nonterminal: fake_name.clone(), + symbols: symbols, + action: action_fn, + span: nt.span, + }; + self.nonterminals.insert( + fake_name.clone(), + r::NonterminalData { + name: fake_name.clone(), + visibility: nt.visibility.clone(), + annotations: vec![], + span: nt.span, + productions: vec![production], + }, + ); + (nt.name.clone(), fake_name) + }) + .collect() + } + + fn action_kind( + &mut self, + nt_type: r::TypeRepr, + expr: &pt::ExprSymbol, + symbols: &[r::Symbol], + action: Option, + ) -> r::ActionFn { + match action { + Some(pt::ActionKind::Lookahead) => self.lookahead_action_fn(), + Some(pt::ActionKind::Lookbehind) => self.lookbehind_action_fn(), + Some(pt::ActionKind::User(string)) => { + self.action_fn(nt_type, false, &expr, &symbols, Some(string)) + } + Some(pt::ActionKind::Fallible(string)) => { + self.action_fn(nt_type, true, &expr, &symbols, Some(string)) + } + None => self.action_fn(nt_type, false, &expr, &symbols, None), + } + } + + fn lookahead_action_fn(&mut self) -> r::ActionFn { + let action_fn_defn = r::ActionFnDefn { + fallible: false, + ret_type: self.types.terminal_loc_type(), + kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookahead), + }; + + self.add_action_fn(action_fn_defn) + } + + fn lookbehind_action_fn(&mut self) -> r::ActionFn { + let action_fn_defn = r::ActionFnDefn { + fallible: false, + ret_type: self.types.terminal_loc_type(), + kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookbehind), + }; + + self.add_action_fn(action_fn_defn) + } + + fn action_fn( + &mut self, + nt_type: r::TypeRepr, + fallible: bool, + expr: &pt::ExprSymbol, + symbols: &[r::Symbol], + action: Option, + ) -> r::ActionFn { + let action = match action { + Some(s) => s, + None => { + // If the user declared a type `()`, or we inferred + // it, then there is only one possible action that + // will type-check (`()`), so supply that. Otherwise, + // default is to include all selected items. + if nt_type.is_unit() { + format!("()") + } else { + format!("(<>)") + } + } + }; + + // Note that the action fn takes ALL of the symbols in `expr` + // as arguments, and some of them are simply dropped based on + // the user's selections. + + // The set of argument types is thus the type of all symbols: + let arg_types: Vec = + symbols.iter().map(|s| s.ty(&self.types)).cloned().collect(); + + let action_fn_defn = match norm_util::analyze_expr(expr) { + Symbols::Named(names) => { + // if there are named symbols, we want to give the + // arguments the names that the user gave them: + let arg_patterns = patterns( + names + .iter() + .map(|&(index, ref name, _)| (index, name.clone())), + symbols.len(), + ); + + let action = { + match norm_util::check_between_braces(&action) { + norm_util::Presence::None => action, + norm_util::Presence::Normal => { + let name_str: String = { + let name_strs: Vec<_> = names + .iter() + .map(|&(_, ref name, _)| name.as_ref()) + .collect(); + name_strs.join(", ") + }; + action.replace("<>", &name_str) + } + norm_util::Presence::InCurlyBrackets => { + let name_str = { + let name_strs: Vec<_> = names + .iter() + .map(|&(_, ref name, _)| format!("{0}:{0}", &*name)) + .collect(); + name_strs.join(", ") + }; + action.replace("<>", &name_str) + } + } + }; + + r::ActionFnDefn { + fallible: fallible, + ret_type: nt_type, + kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { + arg_patterns: arg_patterns, + arg_types: arg_types, + code: action, + }), + } + } + Symbols::Anon(indices) => { + let names: Vec<_> = (0..indices.len()).map(|i| self.fresh_name(i)).collect(); + let arg_patterns = patterns( + indices + .iter() + .map(|&(index, _)| index) + .zip(names.iter().cloned()), + symbols.len(), + ); + let name_str = { + let name_strs: Vec<_> = names.iter().map(|n| n.as_ref()).collect(); + name_strs.join(", ") + }; + let action = action.replace("<>", &name_str); + r::ActionFnDefn { + fallible: fallible, + ret_type: nt_type, + kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { + arg_patterns: arg_patterns, + arg_types: arg_types, + code: action, + }), + } + } + }; + + self.add_action_fn(action_fn_defn) + } + + fn add_action_fn(&mut self, action_fn_defn: r::ActionFnDefn) -> r::ActionFn { + let index = r::ActionFn::new(self.action_fn_defns.len()); + self.action_fn_defns.push(action_fn_defn); + index + } + + fn symbols(&mut self, symbols: &[pt::Symbol]) -> Vec { + symbols.iter().map(|sym| self.symbol(sym)).collect() + } + + fn symbol(&mut self, symbol: &pt::Symbol) -> r::Symbol { + match symbol.kind { + pt::SymbolKind::Terminal(ref id) => r::Symbol::Terminal(id.clone()), + pt::SymbolKind::Nonterminal(ref id) => r::Symbol::Nonterminal(id.clone()), + pt::SymbolKind::Choose(ref s) | pt::SymbolKind::Name(_, ref s) => self.symbol(s), + pt::SymbolKind::Error => { + self.uses_error_recovery = true; + r::Symbol::Terminal(TerminalString::Error) + } + + pt::SymbolKind::Macro(..) + | pt::SymbolKind::Repeat(..) + | pt::SymbolKind::Expr(..) + | pt::SymbolKind::AmbiguousId(_) + | pt::SymbolKind::Lookahead + | pt::SymbolKind::Lookbehind => unreachable!( + "symbol `{}` should have been normalized away by now", + symbol + ), + } + } + + fn fresh_name(&self, i: usize) -> Atom { + Atom::from(format!("{}{}", self.prefix, i)) + } +} + +fn patterns(mut chosen: I, num_args: usize) -> Vec +where + I: Iterator, +{ + let blank = Atom::from("_"); + + let mut next_chosen = chosen.next(); + + let result = (0..num_args) + .map(|index| match next_chosen.clone() { + Some((chosen_index, ref chosen_name)) if chosen_index == index => { + next_chosen = chosen.next(); + chosen_name.clone() + } + _ => blank.clone(), + }) + .collect(); + + debug_assert!(next_chosen.is_none()); + + result +} diff --git a/third_party/rust/lalrpop/src/normalize/macro_expand/mod.rs b/third_party/rust/lalrpop/src/normalize/macro_expand/mod.rs index 24d943576877..6d58cab07da4 100644 --- a/third_party/rust/lalrpop/src/normalize/macro_expand/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/macro_expand/mod.rs @@ -1,601 +1,603 @@ -use grammar::consts::INLINE; -use grammar::parse_tree::{ - ActionKind, Alternative, Annotation, Condition, ConditionOp, ExprSymbol, Grammar, GrammarItem, - MacroSymbol, NonterminalData, NonterminalString, Path, RepeatOp, RepeatSymbol, Span, Symbol, - SymbolKind, TerminalLiteral, TerminalString, TypeRef, Visibility, -}; -use normalize::norm_util::{self, Symbols}; -use normalize::resolve; -use normalize::{NormError, NormResult}; -use regex::Regex; -use std::collections::{HashMap, HashSet}; -use std::mem; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -pub fn expand_macros(input: Grammar) -> NormResult { - let input = try!(resolve::resolve(input)); - - let items = input.items; - - let (macro_defs, mut items): (Vec<_>, Vec<_>) = - items.into_iter().partition(|mi| mi.is_macro_def()); - - let macro_defs: HashMap<_, _> = macro_defs - .into_iter() - .map(|md| match md { - GrammarItem::Nonterminal(ref data) => (data.name.clone(), data.clone()), - _ => unreachable!(), - }) - .collect(); - - let mut expander = MacroExpander::new(macro_defs); - try!(expander.expand(&mut items)); - - Ok(Grammar { - items: items, - ..input - }) -} - -struct MacroExpander { - macro_defs: HashMap, - expansion_set: HashSet, - expansion_stack: Vec, -} - -impl MacroExpander { - fn new(macro_defs: HashMap) -> MacroExpander { - MacroExpander { - macro_defs: macro_defs, - expansion_stack: Vec::new(), - expansion_set: HashSet::new(), - } - } - - fn expand(&mut self, items: &mut Vec) -> NormResult<()> { - let mut counter = 0; - loop { - // Find any macro uses in items added since last round and - // replace them in place with the expanded version: - for item in &mut items[counter..] { - self.replace_item(item); - } - counter = items.len(); - - // No more expansion to do. - if self.expansion_stack.is_empty() { - return Ok(()); - } - - // Drain expansion stack: - while let Some(sym) = self.expansion_stack.pop() { - match sym.kind { - SymbolKind::Macro(msym) => { - items.push(try!(self.expand_macro_symbol(sym.span, msym))) - } - SymbolKind::Expr(expr) => { - items.push(try!(self.expand_expr_symbol(sym.span, expr))) - } - SymbolKind::Repeat(repeat) => { - items.push(try!(self.expand_repeat_symbol(sym.span, *repeat))) - } - SymbolKind::Lookahead => items.push(try!(self.expand_lookaround_symbol( - sym.span, - "@L", - ActionKind::Lookahead - ))), - SymbolKind::Lookbehind => items.push(try!(self.expand_lookaround_symbol( - sym.span, - "@R", - ActionKind::Lookbehind - ))), - _ => assert!(false, "don't know how to expand `{:?}`", sym), - } - } - } - } - - fn replace_item(&mut self, item: &mut GrammarItem) { - match *item { - GrammarItem::MatchToken(..) => {} - GrammarItem::ExternToken(..) => {} - GrammarItem::InternToken(..) => {} - GrammarItem::Use(..) => {} - GrammarItem::Nonterminal(ref mut data) => { - // Should not encounter macro definitions here, - // they've already been siphoned off. - assert!(!data.is_macro_def()); - - for alternative in &mut data.alternatives { - self.replace_symbols(&mut alternative.expr.symbols); - } - } - } - } - - fn replace_symbols(&mut self, symbols: &mut [Symbol]) { - for symbol in symbols { - self.replace_symbol(symbol); - } - } - - fn replace_symbol(&mut self, symbol: &mut Symbol) { - match symbol.kind { - SymbolKind::AmbiguousId(ref id) => { - panic!("ambiguous id `{}` encountered after name resolution", id) - } - SymbolKind::Macro(ref mut m) => { - for sym in &mut m.args { - self.replace_symbol(sym); - } - } - SymbolKind::Expr(ref mut expr) => { - self.replace_symbols(&mut expr.symbols); - } - SymbolKind::Repeat(ref mut repeat) => { - self.replace_symbol(&mut repeat.symbol); - } - SymbolKind::Terminal(_) | SymbolKind::Nonterminal(_) | SymbolKind::Error => { - return; - } - SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { - self.replace_symbol(sym); - return; - } - SymbolKind::Lookahead | SymbolKind::Lookbehind => {} - } - - // only symbols we intend to expand fallthrough to here - - let key = NonterminalString(Atom::from(symbol.canonical_form())); - let replacement = Symbol { - span: symbol.span, - kind: SymbolKind::Nonterminal(key.clone()), - }; - let to_expand = mem::replace(symbol, replacement); - if self.expansion_set.insert(key) { - self.expansion_stack.push(to_expand); - } - } - - /////////////////////////////////////////////////////////////////////////// - // Macro expansion - - fn expand_macro_symbol(&mut self, span: Span, msym: MacroSymbol) -> NormResult { - let msym_name = NonterminalString(Atom::from(msym.canonical_form())); - - let mdef = match self.macro_defs.get(&msym.name) { - Some(v) => v, - None => return_err!(span, "no macro definition found for `{}`", msym.name), - }; - - if mdef.args.len() != msym.args.len() { - return_err!( - span, - "expected {} arguments to `{}` but found {}", - mdef.args.len(), - msym.name, - msym.args.len() - ); - } - - let args: HashMap = mdef - .args - .iter() - .cloned() - .zip(msym.args.into_iter().map(|s| s.kind)) - .collect(); - - let type_decl = mdef - .type_decl - .as_ref() - .map(|tr| self.macro_expand_type_ref(&args, tr)); - - // due to the use of `try!`, it's a bit awkward to write this with an iterator - let mut alternatives: Vec = vec![]; - - for alternative in &mdef.alternatives { - if !try!(self.evaluate_cond(&args, &alternative.condition)) { - continue; - } - alternatives.push(Alternative { - span: span, - expr: self.macro_expand_expr_symbol(&args, &alternative.expr), - condition: None, - action: alternative.action.clone(), - }); - } - - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: mdef.visibility.clone(), - span: span, - name: msym_name, - annotations: mdef.annotations.clone(), - args: vec![], - type_decl: type_decl, - alternatives: alternatives, - })) - } - - fn macro_expand_type_refs( - &self, - args: &HashMap, - type_refs: &[TypeRef], - ) -> Vec { - type_refs - .iter() - .map(|tr| self.macro_expand_type_ref(args, tr)) - .collect() - } - - fn macro_expand_type_ref( - &self, - args: &HashMap, - type_ref: &TypeRef, - ) -> TypeRef { - match *type_ref { - TypeRef::Tuple(ref trs) => TypeRef::Tuple(self.macro_expand_type_refs(args, trs)), - TypeRef::Nominal { - ref path, - ref types, - } => TypeRef::Nominal { - path: path.clone(), - types: self.macro_expand_type_refs(args, types), - }, - TypeRef::Lifetime(ref id) => TypeRef::Lifetime(id.clone()), - TypeRef::OfSymbol(ref sym) => TypeRef::OfSymbol(sym.clone()), - TypeRef::Ref { - ref lifetime, - mutable, - ref referent, - } => TypeRef::Ref { - lifetime: lifetime.clone(), - mutable: mutable, - referent: Box::new(self.macro_expand_type_ref(args, referent)), - }, - TypeRef::Id(ref id) => match args.get(&NonterminalString(id.clone())) { - Some(sym) => TypeRef::OfSymbol(sym.clone()), - None => TypeRef::Nominal { - path: Path::from_id(id.clone()), - types: vec![], - }, - }, - } - } - - fn evaluate_cond( - &self, - args: &HashMap, - opt_cond: &Option, - ) -> NormResult { - if let Some(ref c) = *opt_cond { - match args[&c.lhs] { - SymbolKind::Terminal(TerminalString::Literal(TerminalLiteral::Quoted(ref lhs))) => { - match c.op { - ConditionOp::Equals => Ok(lhs == &c.rhs), - ConditionOp::NotEquals => Ok(lhs != &c.rhs), - ConditionOp::Match => self.re_match(c.span, lhs, &c.rhs), - ConditionOp::NotMatch => Ok(!try!(self.re_match(c.span, lhs, &c.rhs))), - } - } - ref lhs => { - return_err!( - c.span, - "invalid condition LHS `{}`, expected a string literal, not `{}`", - c.lhs, - lhs - ); - } - } - } else { - Ok(true) - } - } - - fn re_match(&self, span: Span, lhs: &Atom, regex: &Atom) -> NormResult { - let re = match Regex::new(®ex) { - Ok(re) => re, - Err(err) => return_err!(span, "invalid regular expression `{}`: {}", regex, err), - }; - Ok(re.is_match(&lhs)) - } - - fn macro_expand_symbols( - &self, - args: &HashMap, - expr: &[Symbol], - ) -> Vec { - expr.iter() - .map(|s| self.macro_expand_symbol(args, s)) - .collect() - } - - fn macro_expand_expr_symbol( - &self, - args: &HashMap, - expr: &ExprSymbol, - ) -> ExprSymbol { - ExprSymbol { - symbols: self.macro_expand_symbols(args, &expr.symbols), - } - } - - fn macro_expand_symbol( - &self, - args: &HashMap, - symbol: &Symbol, - ) -> Symbol { - let kind = match symbol.kind { - SymbolKind::Expr(ref expr) => { - SymbolKind::Expr(self.macro_expand_expr_symbol(args, expr)) - } - SymbolKind::Terminal(ref id) => SymbolKind::Terminal(id.clone()), - SymbolKind::Nonterminal(ref id) => match args.get(id) { - Some(sym) => sym.clone(), - None => SymbolKind::Nonterminal(id.clone()), - }, - SymbolKind::Macro(ref msym) => SymbolKind::Macro(MacroSymbol { - name: msym.name.clone(), - args: self.macro_expand_symbols(args, &msym.args), - }), - SymbolKind::Repeat(ref r) => SymbolKind::Repeat(Box::new(RepeatSymbol { - op: r.op, - symbol: self.macro_expand_symbol(args, &r.symbol), - })), - SymbolKind::Choose(ref sym) => { - SymbolKind::Choose(Box::new(self.macro_expand_symbol(args, sym))) - } - SymbolKind::Name(ref id, ref sym) => { - SymbolKind::Name(id.clone(), Box::new(self.macro_expand_symbol(args, sym))) - } - SymbolKind::Lookahead => SymbolKind::Lookahead, - SymbolKind::Lookbehind => SymbolKind::Lookbehind, - SymbolKind::Error => SymbolKind::Error, - SymbolKind::AmbiguousId(ref id) => { - panic!("ambiguous id `{}` encountered after name resolution", id) - } - }; - - Symbol { - span: symbol.span, - kind: kind, - } - } - - /////////////////////////////////////////////////////////////////////////// - // Expr expansion - - fn expand_expr_symbol(&mut self, span: Span, expr: ExprSymbol) -> NormResult { - let name = NonterminalString(Atom::from(expr.canonical_form())); - - let ty_ref = - match norm_util::analyze_expr(&expr) { - Symbols::Named(names) => { - let (_, ref ex_id, ex_sym) = names[0]; - return_err!( - span, - "named symbols like `{}:{}` are only allowed at the top-level of a nonterminal", - ex_id, ex_sym) - } - Symbols::Anon(syms) => maybe_tuple( - syms.into_iter() - .map(|(_, s)| TypeRef::OfSymbol(s.kind.clone())) - .collect(), - ), - }; - - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: Visibility::Priv, - span: span, - name: name, - annotations: inline(span), - args: vec![], - type_decl: Some(ty_ref), - alternatives: vec![Alternative { - span: span, - expr: expr, - condition: None, - action: action("(<>)"), - }], - })) - } - - /////////////////////////////////////////////////////////////////////////// - // Expr expansion - - fn expand_repeat_symbol( - &mut self, - span: Span, - repeat: RepeatSymbol, - ) -> NormResult { - let name = NonterminalString(Atom::from(repeat.canonical_form())); - let v = Atom::from("v"); - let e = Atom::from("e"); - - let base_symbol_ty = TypeRef::OfSymbol(repeat.symbol.kind.clone()); - - match repeat.op { - RepeatOp::Star => { - let path = Path::vec(); - let ty_ref = TypeRef::Nominal { - path: path, - types: vec![base_symbol_ty], - }; - - let plus_repeat = Box::new(RepeatSymbol { - op: RepeatOp::Plus, - symbol: repeat.symbol.clone(), - }); - - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: Visibility::Priv, - span: span, - name: name, - annotations: inline(span), - args: vec![], - type_decl: Some(ty_ref), - alternatives: vec![ - // X* = - Alternative { - span: span, - expr: ExprSymbol { symbols: vec![] }, - condition: None, - action: action("vec![]"), - }, - // X* = - Alternative { - span: span, - expr: ExprSymbol { - symbols: vec![Symbol::new( - span, - SymbolKind::Name( - v, - Box::new(Symbol::new( - span, - SymbolKind::Repeat(plus_repeat), - )), - ), - )], - }, - condition: None, - action: action("v"), - }, - ], - })) - } - - RepeatOp::Plus => { - let path = Path::vec(); - let ty_ref = TypeRef::Nominal { - path: path, - types: vec![base_symbol_ty], - }; - - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: Visibility::Priv, - span: span, - name: name.clone(), - annotations: vec![], - args: vec![], - type_decl: Some(ty_ref), - alternatives: vec![ - // X+ = X - Alternative { - span: span, - expr: ExprSymbol { - symbols: vec![repeat.symbol.clone()], - }, - condition: None, - action: action("vec![<>]"), - }, - // X+ = - Alternative { - span: span, - expr: ExprSymbol { - symbols: vec![ - Symbol::new( - span, - SymbolKind::Name( - v, - Box::new(Symbol::new( - span, - SymbolKind::Nonterminal(name), - )), - ), - ), - Symbol::new( - span, - SymbolKind::Name(e, Box::new(repeat.symbol.clone())), - ), - ], - }, - condition: None, - action: action("{ let mut v = v; v.push(e); v }"), - }, - ], - })) - } - - RepeatOp::Question => { - let path = Path::option(); - let ty_ref = TypeRef::Nominal { - path: path, - types: vec![base_symbol_ty], - }; - - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: Visibility::Priv, - span: span, - name: name, - annotations: inline(span), - args: vec![], - type_decl: Some(ty_ref), - alternatives: vec![ - // X? = X => Some(<>) - Alternative { - span: span, - expr: ExprSymbol { - symbols: vec![repeat.symbol.clone()], - }, - condition: None, - action: action("Some(<>)"), - }, - // X? = { => None; } - Alternative { - span: span, - expr: ExprSymbol { symbols: vec![] }, - condition: None, - action: action("None"), - }, - ], - })) - } - } - } - - fn expand_lookaround_symbol( - &mut self, - span: Span, - name: &str, - action: ActionKind, - ) -> NormResult { - let name = NonterminalString(Atom::from(name)); - Ok(GrammarItem::Nonterminal(NonterminalData { - visibility: Visibility::Priv, - span: span, - name: name, - annotations: inline(span), - args: vec![], - type_decl: None, - alternatives: vec![Alternative { - span: span, - expr: ExprSymbol { symbols: vec![] }, - condition: None, - action: Some(action), - }], - })) - } -} - -fn maybe_tuple(v: Vec) -> TypeRef { - if v.len() == 1 { - v.into_iter().next().unwrap() - } else { - TypeRef::Tuple(v) - } -} - -fn action(s: &str) -> Option { - Some(ActionKind::User(s.to_string())) -} - -fn inline(span: Span) -> Vec { - vec![Annotation { - id_span: span, - id: Atom::from(INLINE), - arg: None, - }] -} +use std::collections::{HashMap, HashSet}; +use string_cache::DefaultAtom as Atom; +use grammar::consts::INLINE; +use grammar::parse_tree::{ActionKind, Alternative, Annotation, Condition, ConditionOp, ExprSymbol, + Grammar, GrammarItem, MacroSymbol, NonterminalData, NonterminalString, + Path, RepeatOp, RepeatSymbol, Span, Symbol, SymbolKind, TerminalLiteral, + TerminalString, TypeRef, Visibility}; +use normalize::resolve; +use normalize::{NormError, NormResult}; +use normalize::norm_util::{self, Symbols}; +use regex::Regex; +use std::mem; + +#[cfg(test)] +mod test; + +pub fn expand_macros(input: Grammar) -> NormResult { + let input = try!(resolve::resolve(input)); + + let items = input.items; + + let (macro_defs, mut items): (Vec<_>, Vec<_>) = + items.into_iter().partition(|mi| mi.is_macro_def()); + + let macro_defs: HashMap<_, _> = macro_defs + .into_iter() + .map(|md| match md { + GrammarItem::Nonterminal(ref data) => (data.name.clone(), data.clone()), + _ => unreachable!(), + }) + .collect(); + + let mut expander = MacroExpander::new(macro_defs); + try!(expander.expand(&mut items)); + + Ok(Grammar { + items: items, + ..input + }) +} + +struct MacroExpander { + macro_defs: HashMap, + expansion_set: HashSet, + expansion_stack: Vec, +} + +impl MacroExpander { + fn new(macro_defs: HashMap) -> MacroExpander { + MacroExpander { + macro_defs: macro_defs, + expansion_stack: Vec::new(), + expansion_set: HashSet::new(), + } + } + + fn expand(&mut self, items: &mut Vec) -> NormResult<()> { + let mut counter = 0; + loop { + // Find any macro uses in items added since last round and + // replace them in place with the expanded version: + for item in &mut items[counter..] { + self.replace_item(item); + } + counter = items.len(); + + // No more expansion to do. + if self.expansion_stack.is_empty() { + return Ok(()); + } + + // Drain expansion stack: + while let Some(sym) = self.expansion_stack.pop() { + match sym.kind { + SymbolKind::Macro(msym) => { + items.push(try!(self.expand_macro_symbol(sym.span, msym))) + } + SymbolKind::Expr(expr) => { + items.push(try!(self.expand_expr_symbol(sym.span, expr))) + } + SymbolKind::Repeat(repeat) => { + items.push(try!(self.expand_repeat_symbol(sym.span, *repeat))) + } + SymbolKind::Lookahead => items.push(try!(self.expand_lookaround_symbol( + sym.span, + "@L", + ActionKind::Lookahead + ))), + SymbolKind::Lookbehind => items.push(try!(self.expand_lookaround_symbol( + sym.span, + "@R", + ActionKind::Lookbehind + ))), + _ => assert!(false, "don't know how to expand `{:?}`", sym), + } + } + } + } + + fn replace_item(&mut self, item: &mut GrammarItem) { + match *item { + GrammarItem::MatchToken(..) => {} + GrammarItem::ExternToken(..) => {} + GrammarItem::InternToken(..) => {} + GrammarItem::Use(..) => {} + GrammarItem::Nonterminal(ref mut data) => { + // Should not encounter macro definitions here, + // they've already been siphoned off. + assert!(!data.is_macro_def()); + + for alternative in &mut data.alternatives { + self.replace_symbols(&mut alternative.expr.symbols); + } + } + } + } + + fn replace_symbols(&mut self, symbols: &mut [Symbol]) { + for symbol in symbols { + self.replace_symbol(symbol); + } + } + + fn replace_symbol(&mut self, symbol: &mut Symbol) { + match symbol.kind { + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + SymbolKind::Macro(ref mut m) => for sym in &mut m.args { + self.replace_symbol(sym); + }, + SymbolKind::Expr(ref mut expr) => { + self.replace_symbols(&mut expr.symbols); + } + SymbolKind::Repeat(ref mut repeat) => { + self.replace_symbol(&mut repeat.symbol); + } + SymbolKind::Terminal(_) | SymbolKind::Nonterminal(_) | SymbolKind::Error => { + return; + } + SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { + self.replace_symbol(sym); + return; + } + SymbolKind::Lookahead | SymbolKind::Lookbehind => {} + } + + // only symbols we intend to expand fallthrough to here + + let key = NonterminalString(Atom::from(symbol.canonical_form())); + let replacement = Symbol { + span: symbol.span, + kind: SymbolKind::Nonterminal(key.clone()), + }; + let to_expand = mem::replace(symbol, replacement); + if self.expansion_set.insert(key) { + self.expansion_stack.push(to_expand); + } + } + + /////////////////////////////////////////////////////////////////////////// + // Macro expansion + + fn expand_macro_symbol(&mut self, span: Span, msym: MacroSymbol) -> NormResult { + let msym_name = NonterminalString(Atom::from(msym.canonical_form())); + + let mdef = match self.macro_defs.get(&msym.name) { + Some(v) => v, + None => return_err!(span, "no macro definition found for `{}`", msym.name), + }; + + if mdef.args.len() != msym.args.len() { + return_err!( + span, + "expected {} arguments to `{}` but found {}", + mdef.args.len(), + msym.name, + msym.args.len() + ); + } + + let args: HashMap = mdef.args + .iter() + .cloned() + .zip(msym.args.into_iter().map(|s| s.kind)) + .collect(); + + let type_decl = mdef.type_decl + .as_ref() + .map(|tr| self.macro_expand_type_ref(&args, tr)); + + // due to the use of `try!`, it's a bit awkward to write this with an iterator + let mut alternatives: Vec = vec![]; + + for alternative in &mdef.alternatives { + if !try!(self.evaluate_cond(&args, &alternative.condition)) { + continue; + } + alternatives.push(Alternative { + span: span, + expr: self.macro_expand_expr_symbol(&args, &alternative.expr), + condition: None, + action: alternative.action.clone(), + }); + } + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: mdef.visibility.clone(), + span: span, + name: msym_name, + annotations: mdef.annotations.clone(), + args: vec![], + type_decl: type_decl, + alternatives: alternatives, + })) + } + + fn macro_expand_type_refs( + &self, + args: &HashMap, + type_refs: &[TypeRef], + ) -> Vec { + type_refs + .iter() + .map(|tr| self.macro_expand_type_ref(args, tr)) + .collect() + } + + fn macro_expand_type_ref( + &self, + args: &HashMap, + type_ref: &TypeRef, + ) -> TypeRef { + match *type_ref { + TypeRef::Tuple(ref trs) => TypeRef::Tuple(self.macro_expand_type_refs(args, trs)), + TypeRef::Nominal { + ref path, + ref types, + } => TypeRef::Nominal { + path: path.clone(), + types: self.macro_expand_type_refs(args, types), + }, + TypeRef::Lifetime(ref id) => TypeRef::Lifetime(id.clone()), + TypeRef::OfSymbol(ref sym) => TypeRef::OfSymbol(sym.clone()), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => TypeRef::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(self.macro_expand_type_ref(args, referent)), + }, + TypeRef::Id(ref id) => match args.get(&NonterminalString(id.clone())) { + Some(sym) => TypeRef::OfSymbol(sym.clone()), + None => TypeRef::Nominal { + path: Path::from_id(id.clone()), + types: vec![], + }, + }, + } + } + + fn evaluate_cond( + &self, + args: &HashMap, + opt_cond: &Option, + ) -> NormResult { + if let Some(ref c) = *opt_cond { + match args[&c.lhs] { + SymbolKind::Terminal(TerminalString::Literal(TerminalLiteral::Quoted(ref lhs))) => { + match c.op { + ConditionOp::Equals => Ok(lhs == &c.rhs), + ConditionOp::NotEquals => Ok(lhs != &c.rhs), + ConditionOp::Match => self.re_match(c.span, lhs, &c.rhs), + ConditionOp::NotMatch => Ok(!try!(self.re_match(c.span, lhs, &c.rhs))), + } + } + ref lhs => { + return_err!( + c.span, + "invalid condition LHS `{}`, expected a string literal, not `{}`", + c.lhs, + lhs + ); + } + } + } else { + Ok(true) + } + } + + fn re_match(&self, span: Span, lhs: &Atom, regex: &Atom) -> NormResult { + let re = match Regex::new(®ex) { + Ok(re) => re, + Err(err) => return_err!(span, "invalid regular expression `{}`: {}", regex, err), + }; + Ok(re.is_match(&lhs)) + } + + fn macro_expand_symbols( + &self, + args: &HashMap, + expr: &[Symbol], + ) -> Vec { + expr.iter() + .map(|s| self.macro_expand_symbol(args, s)) + .collect() + } + + fn macro_expand_expr_symbol( + &self, + args: &HashMap, + expr: &ExprSymbol, + ) -> ExprSymbol { + ExprSymbol { + symbols: self.macro_expand_symbols(args, &expr.symbols), + } + } + + fn macro_expand_symbol( + &self, + args: &HashMap, + symbol: &Symbol, + ) -> Symbol { + let kind = match symbol.kind { + SymbolKind::Expr(ref expr) => { + SymbolKind::Expr(self.macro_expand_expr_symbol(args, expr)) + } + SymbolKind::Terminal(ref id) => SymbolKind::Terminal(id.clone()), + SymbolKind::Nonterminal(ref id) => match args.get(id) { + Some(sym) => sym.clone(), + None => SymbolKind::Nonterminal(id.clone()), + }, + SymbolKind::Macro(ref msym) => SymbolKind::Macro(MacroSymbol { + name: msym.name.clone(), + args: self.macro_expand_symbols(args, &msym.args), + }), + SymbolKind::Repeat(ref r) => SymbolKind::Repeat(Box::new(RepeatSymbol { + op: r.op, + symbol: self.macro_expand_symbol(args, &r.symbol), + })), + SymbolKind::Choose(ref sym) => { + SymbolKind::Choose(Box::new(self.macro_expand_symbol(args, sym))) + } + SymbolKind::Name(ref id, ref sym) => { + SymbolKind::Name(id.clone(), Box::new(self.macro_expand_symbol(args, sym))) + } + SymbolKind::Lookahead => SymbolKind::Lookahead, + SymbolKind::Lookbehind => SymbolKind::Lookbehind, + SymbolKind::Error => SymbolKind::Error, + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + }; + + Symbol { + span: symbol.span, + kind: kind, + } + } + + /////////////////////////////////////////////////////////////////////////// + // Expr expansion + + fn expand_expr_symbol(&mut self, span: Span, expr: ExprSymbol) -> NormResult { + let name = NonterminalString(Atom::from(expr.canonical_form())); + + let ty_ref = + match norm_util::analyze_expr(&expr) { + Symbols::Named(names) => { + let (_, ref ex_id, ex_sym) = names[0]; + return_err!( + span, + "named symbols like `{}:{}` are only allowed at the top-level of a nonterminal", + ex_id, ex_sym) + } + Symbols::Anon(syms) => maybe_tuple( + syms.into_iter() + .map(|(_, s)| TypeRef::OfSymbol(s.kind.clone())) + .collect(), + ), + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + Alternative { + span: span, + expr: expr, + condition: None, + action: action("(<>)"), + }, + ], + })) + } + + /////////////////////////////////////////////////////////////////////////// + // Expr expansion + + fn expand_repeat_symbol( + &mut self, + span: Span, + repeat: RepeatSymbol, + ) -> NormResult { + let name = NonterminalString(Atom::from(repeat.canonical_form())); + let v = Atom::from("v"); + let e = Atom::from("e"); + + let base_symbol_ty = TypeRef::OfSymbol(repeat.symbol.kind.clone()); + + match repeat.op { + RepeatOp::Star => { + let path = Path::vec(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + let plus_repeat = Box::new(RepeatSymbol { + op: RepeatOp::Plus, + symbol: repeat.symbol.clone(), + }); + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X* = + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: action("vec![]"), + }, + // X* = + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![ + Symbol::new( + span, + SymbolKind::Name( + v, + Box::new(Symbol::new( + span, + SymbolKind::Repeat(plus_repeat), + )), + ), + ), + ], + }, + condition: None, + action: action("v"), + }, + ], + })) + } + + RepeatOp::Plus => { + let path = Path::vec(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name.clone(), + annotations: vec![], + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X+ = X + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![repeat.symbol.clone()], + }, + condition: None, + action: action("vec![<>]"), + }, + // X+ = + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![ + Symbol::new( + span, + SymbolKind::Name( + v, + Box::new(Symbol::new( + span, + SymbolKind::Nonterminal(name), + )), + ), + ), + Symbol::new( + span, + SymbolKind::Name(e, Box::new(repeat.symbol.clone())), + ), + ], + }, + condition: None, + action: action("{ let mut v = v; v.push(e); v }"), + }, + ], + })) + } + + RepeatOp::Question => { + let path = Path::option(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X? = X => Some(<>) + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![repeat.symbol.clone()], + }, + condition: None, + action: action("Some(<>)"), + }, + // X? = { => None; } + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: action("None"), + }, + ], + })) + } + } + } + + fn expand_lookaround_symbol( + &mut self, + span: Span, + name: &str, + action: ActionKind, + ) -> NormResult { + let name = NonterminalString(Atom::from(name)); + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: None, + alternatives: vec![ + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: Some(action), + }, + ], + })) + } +} + +fn maybe_tuple(v: Vec) -> TypeRef { + if v.len() == 1 { + v.into_iter().next().unwrap() + } else { + TypeRef::Tuple(v) + } +} + +fn action(s: &str) -> Option { + Some(ActionKind::User(s.to_string())) +} + +fn inline(span: Span) -> Vec { + vec![ + Annotation { + id_span: span, + id: Atom::from(INLINE), + }, + ] +} diff --git a/third_party/rust/lalrpop/src/normalize/macro_expand/test.rs b/third_party/rust/lalrpop/src/normalize/macro_expand/test.rs index 5d85444a7e29..9de44e5c2ce0 100644 --- a/third_party/rust/lalrpop/src/normalize/macro_expand/test.rs +++ b/third_party/rust/lalrpop/src/normalize/macro_expand/test.rs @@ -1,118 +1,112 @@ -use parser; -use test_util::compare; - -use super::expand_macros; - -#[test] -fn test_comma() { - let grammar = parser::parse_grammar( - r#" -grammar; - Comma: Vec = - ",")*> => - v.into_iter().chain(e.into_iter()).collect(); - - Ids = Comma<"Id">; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - - let expected = parser::parse_grammar( - r##" -grammar; - Ids = `Comma<"Id">`; - - `Comma<"Id">`: Vec<#"Id"#> = - ",")*`> => v.into_iter().chain(e.into_iter()).collect(); - - #[inline] - `"Id"?`: ::std::option::Option<#"Id"#> = { - "Id" => Some(<>), - => None - }; - - #[inline] - `(<"Id"> ",")*`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { - => vec![], - ",")+`> => v, - }; - - #[inline] - `(<"Id"> ",")`: #"Id"# = { - <"Id"> "," => (<>), - }; - - `(<"Id"> ",")+`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { - `(<"Id"> ",")` => vec![<>], - ",")+`> ",")`> => { let mut v = v; v.push(e); v }, - }; -"##, - ) - .unwrap(); - - compare(actual, expected); -} - -#[test] -fn test_if_match() { - let grammar = parser::parse_grammar( - r#" -grammar; - Expr = { - "A" if E == "A*C", - "B" if E ~~ "^A*C$", - "C" if E != "A*C", - "D" if E !~ "^A*C$" - }; - - Expr1 = Expr<"A*C">; - Expr2 = Expr<"AAC">; - Expr3 = Expr<"ABC">; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - - let expected = parser::parse_grammar( - r#" -grammar; - Expr1 = `Expr<"A*C">`; - Expr2 = `Expr<"AAC">`; - Expr3 = `Expr<"ABC">`; - - `Expr<"ABC">` = { "C", "D" }; - `Expr<"AAC">` = { "B", "C" }; - `Expr<"A*C">` = { "A", "D" }; -"#, - ) - .unwrap(); - - compare(actual, expected); -} - -#[test] -fn test_lookahead() { - let grammar = parser::parse_grammar( - r#" - grammar; - Expr = @L; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - - let expected = parser::parse_grammar( - r#" - grammar; - Expr = `@L`; - #[inline] `@L` = =>@L; -"#, - ) - .unwrap(); - - compare(actual, expected); -} +use parser; +use test_util::compare; + +use super::expand_macros; + +#[test] +fn test_comma() { + let grammar = parser::parse_grammar( + r#" +grammar; + Comma: Vec = + ",")*> => + v.into_iter().chain(e.into_iter()).collect(); + + Ids = Comma<"Id">; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r##" +grammar; + Ids = `Comma<"Id">`; + + `Comma<"Id">`: Vec<#"Id"#> = + ",")*`> => v.into_iter().chain(e.into_iter()).collect(); + + #[inline] + `"Id"?`: ::std::option::Option<#"Id"#> = { + "Id" => Some(<>), + => None + }; + + #[inline] + `(<"Id"> ",")*`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { + => vec![], + ",")+`> => v, + }; + + #[inline] + `(<"Id"> ",")`: #"Id"# = { + <"Id"> "," => (<>), + }; + + `(<"Id"> ",")+`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { + `(<"Id"> ",")` => vec![<>], + ",")+`> ",")`> => { let mut v = v; v.push(e); v }, + }; +"##, + ).unwrap(); + + compare(actual, expected); +} + +#[test] +fn test_if_match() { + let grammar = parser::parse_grammar( + r#" +grammar; + Expr = { + "A" if E == "A*C", + "B" if E ~~ "^A*C$", + "C" if E != "A*C", + "D" if E !~ "^A*C$" + }; + + Expr1 = Expr<"A*C">; + Expr2 = Expr<"AAC">; + Expr3 = Expr<"ABC">; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r#" +grammar; + Expr1 = `Expr<"A*C">`; + Expr2 = `Expr<"AAC">`; + Expr3 = `Expr<"ABC">`; + + `Expr<"ABC">` = { "C", "D" }; + `Expr<"AAC">` = { "B", "C" }; + `Expr<"A*C">` = { "A", "D" }; +"#, + ).unwrap(); + + compare(actual, expected); +} + +#[test] +fn test_lookahead() { + let grammar = parser::parse_grammar( + r#" + grammar; + Expr = @L; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r#" + grammar; + Expr = `@L`; + #[inline] `@L` = =>@L; +"#, + ).unwrap(); + + compare(actual, expected); +} diff --git a/third_party/rust/lalrpop/src/normalize/mod.rs b/third_party/rust/lalrpop/src/normalize/mod.rs index 75257891fb3f..42ead7cd5b87 100644 --- a/third_party/rust/lalrpop/src/normalize/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/mod.rs @@ -1,119 +1,119 @@ -/*! - * Normalization processes a parse tree until it is in suitable form to - * be converted to the more canonical form. This is done as a series of - * passes, each contained in their own module below. - */ - -use grammar::parse_tree as pt; -use grammar::repr as r; -use session::Session; - -pub type NormResult = Result; - -#[derive(Clone, Debug)] -pub struct NormError { - pub message: String, - pub span: pt::Span, -} - -macro_rules! return_err { - ($span: expr, $($args:expr),+) => { - return Err(NormError { - message: format!($($args),+), - span: $span - }); - } -} - -pub fn normalize(session: &Session, grammar: pt::Grammar) -> NormResult { - normalize_helper(session, grammar, true) -} - -/// for unit tests, it is convenient to skip the validation step, and supply a dummy session -#[cfg(test)] -pub fn normalize_without_validating(grammar: pt::Grammar) -> NormResult { - normalize_helper(&Session::new(), grammar, false) -} - -fn normalize_helper( - session: &Session, - grammar: pt::Grammar, - validate: bool, -) -> NormResult { - let grammar = try!(lower_helper(session, grammar, validate)); - let grammar = profile!(session, "Inlining", try!(inline::inline(grammar))); - Ok(grammar) -} - -fn lower_helper(session: &Session, grammar: pt::Grammar, validate: bool) -> NormResult { - profile!( - session, - "Grammar validation", - if validate { - try!(prevalidate::validate(&grammar)); - } - ); - let grammar = profile!( - session, - "Grammar resolution", - try!(resolve::resolve(grammar)) - ); - let grammar = profile!( - session, - "Macro expansion", - try!(macro_expand::expand_macros(grammar)) - ); - let grammar = profile!(session, "Token check", try!(token_check::validate(grammar))); - let types = profile!(session, "Infer types", try!(tyinfer::infer_types(&grammar))); - let grammar = profile!( - session, - "Lowering", - try!(lower::lower(session, grammar, types)) - ); - Ok(grammar) -} - -// These are executed *IN ORDER*: - -// Check most safety conditions. -mod prevalidate; - -// Resolve identifiers into terminals/nonterminals etc. -mod resolve; - -// Expands macros and expressions -// -// X = ...1 Comma (X Y Z) ...2 -// -// to -// -// X = ...1 `Comma` `(X Y Z)` ...2 -// `Comma_X`: Vec<> = ...; -// `(X Y Z)` = X Y Z; -// -// AFTER THIS POINT: No more macros, macro references, guarded -// alternatives, repeats, or expr symbols, though type indirections -// may occur. -mod macro_expand; - -// Check if there is an extern token and all terminals have have a -// conversion; if no extern token, synthesize an intern token. -mod token_check; - -// Computes types where the user omitted them (or from macro -// byproducts). -// -// AFTER THIS POINT: there is a separate `repr::Types` table -// providing all nonterminals with an explicit type. -mod tyinfer; - -// Lowers the parse tree to the repr notation. -mod lower; - -// Inline nonterminals that have requested it. -mod inline; - -/////////////////////////////////////////////////////////////////////////// -// Shared routines - -mod norm_util; +/*! + * Normalization processes a parse tree until it is in suitable form to + * be converted to the more canonical form. This is done as a series of + * passes, each contained in their own module below. + */ + +use grammar::parse_tree as pt; +use grammar::repr as r; +use session::Session; + +pub type NormResult = Result; + +#[derive(Clone, Debug)] +pub struct NormError { + pub message: String, + pub span: pt::Span, +} + +macro_rules! return_err { + ($span: expr, $($args:expr),+) => { + return Err(NormError { + message: format!($($args),+), + span: $span + }); + } +} + +pub fn normalize(session: &Session, grammar: pt::Grammar) -> NormResult { + normalize_helper(session, grammar, true) +} + +/// for unit tests, it is convenient to skip the validation step, and supply a dummy session +#[cfg(test)] +pub fn normalize_without_validating(grammar: pt::Grammar) -> NormResult { + normalize_helper(&Session::new(), grammar, false) +} + +fn normalize_helper( + session: &Session, + grammar: pt::Grammar, + validate: bool, +) -> NormResult { + let grammar = try!(lower_helper(session, grammar, validate)); + let grammar = profile!(session, "Inlining", try!(inline::inline(grammar))); + Ok(grammar) +} + +fn lower_helper(session: &Session, grammar: pt::Grammar, validate: bool) -> NormResult { + profile!( + session, + "Grammar validation", + if validate { + try!(prevalidate::validate(&grammar)); + } + ); + let grammar = profile!( + session, + "Grammar resolution", + try!(resolve::resolve(grammar)) + ); + let grammar = profile!( + session, + "Macro expansion", + try!(macro_expand::expand_macros(grammar)) + ); + let grammar = profile!(session, "Token check", try!(token_check::validate(grammar))); + let types = profile!(session, "Infer types", try!(tyinfer::infer_types(&grammar))); + let grammar = profile!( + session, + "Lowering", + try!(lower::lower(session, grammar, types)) + ); + Ok(grammar) +} + +// These are executed *IN ORDER*: + +// Check most safety conditions. +mod prevalidate; + +// Resolve identifiers into terminals/nonterminals etc. +mod resolve; + +// Expands macros and expressions +// +// X = ...1 Comma (X Y Z) ...2 +// +// to +// +// X = ...1 `Comma` `(X Y Z)` ...2 +// `Comma_X`: Vec<> = ...; +// `(X Y Z)` = X Y Z; +// +// AFTER THIS POINT: No more macros, macro references, guarded +// alternatives, repeats, or expr symbols, though type indirections +// may occur. +mod macro_expand; + +// Check if there is an extern token and all terminals have have a +// conversion; if no extern token, synthesize an intern token. +mod token_check; + +// Computes types where the user omitted them (or from macro +// byproducts). +// +// AFTER THIS POINT: there is a separate `repr::Types` table +// providing all nonterminals with an explicit type. +mod tyinfer; + +// Lowers the parse tree to the repr notation. +mod lower; + +// Inline nonterminals that have requested it. +mod inline; + +/////////////////////////////////////////////////////////////////////////// +// Shared routines + +mod norm_util; diff --git a/third_party/rust/lalrpop/src/normalize/norm_util.rs b/third_party/rust/lalrpop/src/normalize/norm_util.rs index b0fe935c2c23..ba4b46515ee4 100644 --- a/third_party/rust/lalrpop/src/normalize/norm_util.rs +++ b/third_party/rust/lalrpop/src/normalize/norm_util.rs @@ -1,136 +1,134 @@ -use grammar::parse_tree::{ActionKind, Alternative, ExprSymbol, Symbol, SymbolKind}; -use string_cache::DefaultAtom as Atom; - -#[derive(Debug)] -pub enum AlternativeAction<'a> { - User(&'a ActionKind), - Default(Symbols<'a>), -} - -#[derive(Debug)] -pub enum Symbols<'a> { - Named(Vec<(usize, Atom, &'a Symbol)>), - Anon(Vec<(usize, &'a Symbol)>), -} - -pub fn analyze_action<'a>(alt: &'a Alternative) -> AlternativeAction<'a> { - // We can't infer types for alternatives with actions - if let Some(ref code) = alt.action { - return AlternativeAction::User(code); - } - - AlternativeAction::Default(analyze_expr(&alt.expr)) -} - -pub fn analyze_expr<'a>(expr: &'a ExprSymbol) -> Symbols<'a> { - // First look for named symbols. - let named_symbols: Vec<_> = expr - .symbols - .iter() - .enumerate() - .filter_map(|(idx, sym)| match sym.kind { - SymbolKind::Name(ref id, ref sub) => Some((idx, id.clone(), &**sub)), - _ => None, - }) - .collect(); - if !named_symbols.is_empty() { - return Symbols::Named(named_symbols); - } - - // Otherwise, make a tuple of the items they chose with `<>`. - let chosen_symbol_types: Vec<_> = expr - .symbols - .iter() - .enumerate() - .filter_map(|(idx, sym)| match sym.kind { - SymbolKind::Choose(ref sub) => Some((idx, &**sub)), - _ => None, - }) - .collect(); - if !chosen_symbol_types.is_empty() { - return Symbols::Anon(chosen_symbol_types); - } - - // If they didn't choose anything with `<>`, make a tuple of everything. - Symbols::Anon(expr.symbols.iter().enumerate().collect()) -} - -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum Presence { - None, - InCurlyBrackets, - Normal, -} - -impl Presence { - pub fn is_in_curly_brackets(&self) -> bool { - *self == Presence::InCurlyBrackets - } -} - -pub fn check_between_braces(action: &str) -> Presence { - if let Some(funky_index) = action.find("<>") { - let (before, after) = { - let (before, after) = action.split_at(funky_index); - (before.trim(), after[2..].trim()) - }; - - let last_before = before.chars().last(); - let next_after = after.chars().next(); - if let (Some('{'), Some('}')) = (last_before, next_after) { - Presence::InCurlyBrackets - } else { - Presence::Normal - } - } else { - Presence::None - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn detecting_normal_funky_expression() { - assert_eq!(Presence::Normal, check_between_braces("<>")); - assert_eq!(Presence::Normal, check_between_braces("ble <> blaa")); - assert_eq!(Presence::Normal, check_between_braces("ble <> } b")); - assert_eq!(Presence::Normal, check_between_braces("bl{ e <> } b")); - assert_eq!(Presence::Normal, check_between_braces("bl{ e <>} b")); - assert_eq!(Presence::Normal, check_between_braces("bl{ e <> e } b")); - assert_eq!(Presence::Normal, check_between_braces("bl{ <> e } b")); - assert_eq!(Presence::Normal, check_between_braces("bl{<> e } b")); - assert_eq!(Presence::Normal, check_between_braces("bl{<>")); - assert_eq!(Presence::Normal, check_between_braces("<>}")); - } - - #[test] - fn detecting_nopresence_of_funky_expression() { - assert_eq!(Presence::None, check_between_braces("< >")); - assert_eq!(Presence::None, check_between_braces("ble blaa")); - } - - #[test] - fn detecting_incurlybrackets_funky_expression() { - assert_eq!(Presence::InCurlyBrackets, check_between_braces("{<>}")); - assert_eq!( - Presence::InCurlyBrackets, - check_between_braces("ble{<> }blaa") - ); - assert_eq!( - Presence::InCurlyBrackets, - check_between_braces("ble{ <> } b") - ); - assert_eq!( - Presence::InCurlyBrackets, - check_between_braces("bl{ <>} b") - ); - assert_eq!(Presence::InCurlyBrackets, check_between_braces("bl{<>} b")); - assert_eq!( - Presence::InCurlyBrackets, - check_between_braces("bl{<> } b") - ); - } - -} +use string_cache::DefaultAtom as Atom; +use grammar::parse_tree::{ActionKind, Alternative, ExprSymbol, Symbol, SymbolKind}; + +#[derive(Debug)] +pub enum AlternativeAction<'a> { + User(&'a ActionKind), + Default(Symbols<'a>), +} + +#[derive(Debug)] +pub enum Symbols<'a> { + Named(Vec<(usize, Atom, &'a Symbol)>), + Anon(Vec<(usize, &'a Symbol)>), +} + +pub fn analyze_action<'a>(alt: &'a Alternative) -> AlternativeAction<'a> { + // We can't infer types for alternatives with actions + if let Some(ref code) = alt.action { + return AlternativeAction::User(code); + } + + AlternativeAction::Default(analyze_expr(&alt.expr)) +} + +pub fn analyze_expr<'a>(expr: &'a ExprSymbol) -> Symbols<'a> { + // First look for named symbols. + let named_symbols: Vec<_> = expr.symbols + .iter() + .enumerate() + .filter_map(|(idx, sym)| match sym.kind { + SymbolKind::Name(ref id, ref sub) => Some((idx, id.clone(), &**sub)), + _ => None, + }) + .collect(); + if !named_symbols.is_empty() { + return Symbols::Named(named_symbols); + } + + // Otherwise, make a tuple of the items they chose with `<>`. + let chosen_symbol_types: Vec<_> = expr.symbols + .iter() + .enumerate() + .filter_map(|(idx, sym)| match sym.kind { + SymbolKind::Choose(ref sub) => Some((idx, &**sub)), + _ => None, + }) + .collect(); + if !chosen_symbol_types.is_empty() { + return Symbols::Anon(chosen_symbol_types); + } + + // If they didn't choose anything with `<>`, make a tuple of everything. + Symbols::Anon(expr.symbols.iter().enumerate().collect()) +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum Presence { + None, + InCurlyBrackets, + Normal, +} + +impl Presence { + pub fn is_in_curly_brackets(&self) -> bool { + *self == Presence::InCurlyBrackets + } +} + +pub fn check_between_braces(action: &str) -> Presence { + if let Some(funky_index) = action.find("<>") { + let (before, after) = { + let (before, after) = action.split_at(funky_index); + (before.trim(), after[2..].trim()) + }; + + let last_before = before.chars().last(); + let next_after = after.chars().next(); + if let (Some('{'), Some('}')) = (last_before, next_after) { + Presence::InCurlyBrackets + } else { + Presence::Normal + } + } else { + Presence::None + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn detecting_normal_funky_expression() { + assert_eq!(Presence::Normal, check_between_braces("<>")); + assert_eq!(Presence::Normal, check_between_braces("ble <> blaa")); + assert_eq!(Presence::Normal, check_between_braces("ble <> } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <> } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <>} b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ <> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{<> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{<>")); + assert_eq!(Presence::Normal, check_between_braces("<>}")); + } + + #[test] + fn detecting_nopresence_of_funky_expression() { + assert_eq!(Presence::None, check_between_braces("< >")); + assert_eq!(Presence::None, check_between_braces("ble blaa")); + } + + #[test] + fn detecting_incurlybrackets_funky_expression() { + assert_eq!(Presence::InCurlyBrackets, check_between_braces("{<>}")); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("ble{<> }blaa") + ); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("ble{ <> } b") + ); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("bl{ <>} b") + ); + assert_eq!(Presence::InCurlyBrackets, check_between_braces("bl{<>} b")); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("bl{<> } b") + ); + } + +} diff --git a/third_party/rust/lalrpop/src/normalize/prevalidate/mod.rs b/third_party/rust/lalrpop/src/normalize/prevalidate/mod.rs index dc5ff5532028..7f69fc831787 100644 --- a/third_party/rust/lalrpop/src/normalize/prevalidate/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/prevalidate/mod.rs @@ -1,314 +1,296 @@ -//! Validate checks some basic safety conditions. - -use super::norm_util::{self, Symbols}; -use super::{NormError, NormResult}; - -use collections::{set, Multimap}; -use grammar::consts::*; -use grammar::parse_tree::*; -use grammar::repr as r; -use string_cache::DefaultAtom as Atom; -use util::Sep; - -#[cfg(test)] -mod test; - -pub fn validate(grammar: &Grammar) -> NormResult<()> { - let match_token: Option<&MatchToken> = grammar - .items - .iter() - .filter_map(|item| item.as_match_token()) - .next(); - - let extern_token: Option<&ExternToken> = grammar - .items - .iter() - .filter_map(|item| item.as_extern_token()) - .next(); - - let validator = Validator { - grammar: grammar, - match_token: match_token, - extern_token: extern_token, - }; - - validator.validate() -} - -struct Validator<'grammar> { - grammar: &'grammar Grammar, - match_token: Option<&'grammar MatchToken>, - extern_token: Option<&'grammar ExternToken>, -} - -impl<'grammar> Validator<'grammar> { - fn validate(&self) -> NormResult<()> { - let allowed_names = vec![ - Atom::from(LALR), - Atom::from(TABLE_DRIVEN), - Atom::from(RECURSIVE_ASCENT), - Atom::from(TEST_ALL), - ]; - for annotation in &self.grammar.annotations { - if !allowed_names.contains(&annotation.id) { - return_err!( - annotation.id_span, - "unrecognized annotation `{}`", - annotation.id - ); - } - } - - for item in &self.grammar.items { - match *item { - GrammarItem::Use(..) => {} - - GrammarItem::MatchToken(ref data) => { - if data.span != self.match_token.unwrap().span { - return_err!(data.span, "multiple match definitions are not permitted"); - } - - // Only error if a custom lexer is specified, having a custom types is ok - if let Some(d) = self.extern_token { - if d.enum_token.is_some() { - return_err!( - d.span, - "extern (with custom tokens) and match definitions are mutually exclusive"); - } - } - - // Ensure that the catch all is final item of final block - for (contents_idx, match_contents) in data.contents.iter().enumerate() { - for (item_idx, item) in match_contents.items.iter().enumerate() { - if item.is_catch_all() - && (contents_idx != &data.contents.len() - 1 - || item_idx != &match_contents.items.len() - 1) - { - return_err!(item.span(), "Catch all must be final item"); - } else { - println!("ok"); - } - } - } - } - - GrammarItem::ExternToken(ref data) => { - if data.span != self.extern_token.unwrap().span { - return_err!(data.span, "multiple extern definitions are not permitted"); - } - - // Only error if a custom lexer is specified, having a custom types is ok - if let Some(d) = self.match_token { - if data.enum_token.is_some() { - return_err!( - d.span, - "match and extern (with custom tokens) definitions are mutually exclusive"); - } - } - - let allowed_names = vec![Atom::from(LOCATION), Atom::from(ERROR)]; - let mut new_names = set(); - for associated_type in &data.associated_types { - if !allowed_names.contains(&associated_type.type_name) { - return_err!( - associated_type.type_span, - "associated type `{}` not recognized, \ - try one of the following: {}", - associated_type.type_name, - Sep(", ", &allowed_names) - ); - } else if !new_names.insert(associated_type.type_name.clone()) { - return_err!( - associated_type.type_span, - "associated type `{}` already specified", - associated_type.type_name - ); - } - } - } - GrammarItem::Nonterminal(ref data) => { - if data.visibility.is_pub() && !data.args.is_empty() { - return_err!(data.span, "macros cannot be marked public"); - } - let inline_annotation = Atom::from(INLINE); - let cfg_annotation = Atom::from(CFG); - let known_annotations = [inline_annotation.clone(), cfg_annotation.clone()]; - let mut found_annotations = set(); - for annotation in &data.annotations { - if !known_annotations.contains(&annotation.id) { - return_err!( - annotation.id_span, - "unrecognized annotation `{}`", - annotation.id - ); - } else if !found_annotations.insert(annotation.id.clone()) { - return_err!( - annotation.id_span, - "duplicate annotation `{}`", - annotation.id - ); - } else if annotation.id == inline_annotation && data.visibility.is_pub() { - return_err!( - annotation.id_span, - "public items cannot be marked #[inline]" - ); - } else if annotation.id == cfg_annotation { - if data.visibility.is_pub() { - match annotation.arg { - Some((ref name, _)) if name == "feature" => (), - _ => return_err!( - annotation.id_span, - r#"`cfg` annotations must have a `feature = "my_feature" argument"# - ), - } - } else { - return_err!( - annotation.id_span, - "private items cannot be marked #[cfg]" - ); - } - } - } - - for alternative in &data.alternatives { - try!(self.validate_alternative(alternative)); - } - } - GrammarItem::InternToken(..) => {} - } - } - Ok(()) - } - - fn validate_alternative(&self, alternative: &Alternative) -> NormResult<()> { - try!(self.validate_expr(&alternative.expr)); - - match norm_util::analyze_expr(&alternative.expr) { - Symbols::Named(syms) => { - if alternative.action.is_none() { - let sym = syms.iter().map(|&(_, _, sym)| sym).next().unwrap(); - return_err!( - sym.span, - "named symbols (like `{}`) require a custom action", - sym - ); - } - } - Symbols::Anon(_) => { - let empty_string = "".to_string(); - let action = { - match alternative.action { - Some(ActionKind::User(ref action)) => action, - Some(ActionKind::Fallible(ref action)) => action, - _ => &empty_string, - } - }; - if norm_util::check_between_braces(action).is_in_curly_brackets() { - return_err!( - alternative.span, - "Using `<>` between curly braces (e.g., `{{<>}}`) only works when your parsed values have been given names (e.g., ``, not just ``)"); - } - } - } - - Ok(()) - } - - fn validate_expr(&self, expr: &ExprSymbol) -> NormResult<()> { - for symbol in &expr.symbols { - try!(self.validate_symbol(symbol)); - } - - let chosen: Vec<&Symbol> = expr - .symbols - .iter() - .filter(|sym| match sym.kind { - SymbolKind::Choose(_) => true, - _ => false, - }) - .collect(); - - let named: Multimap> = expr - .symbols - .iter() - .filter_map(|sym| match sym.kind { - SymbolKind::Name(ref nt, _) => Some((nt.clone(), sym)), - _ => None, - }) - .collect(); - - if !chosen.is_empty() && !named.is_empty() { - return_err!( - chosen[0].span, - "anonymous symbols like this one cannot be combined with \ - named symbols like `{}`", - named.into_iter().next().unwrap().1[0] - ); - } - - for (name, syms) in named.into_iter() { - if syms.len() > 1 { - return_err!( - syms[1].span, - "multiple symbols named `{}` are not permitted", - name - ); - } - } - - Ok(()) - } - - fn validate_symbol(&self, symbol: &Symbol) -> NormResult<()> { - match symbol.kind { - SymbolKind::Expr(ref expr) => { - try!(self.validate_expr(expr)); - } - SymbolKind::AmbiguousId(_) => { /* see resolve */ } - SymbolKind::Terminal(_) => { /* see postvalidate! */ } - SymbolKind::Nonterminal(_) => { /* see resolve */ } - SymbolKind::Error => { - let mut algorithm = r::Algorithm::default(); - read_algorithm(&self.grammar.annotations, &mut algorithm); - if algorithm.codegen == r::LrCodeGeneration::RecursiveAscent { - return_err!( - symbol.span, - "error recovery is not yet supported by recursive ascent parsers" - ); - } - } - SymbolKind::Macro(ref msym) => { - debug_assert!(msym.args.len() > 0); - for arg in &msym.args { - try!(self.validate_symbol(arg)); - } - } - SymbolKind::Repeat(ref repeat) => { - try!(self.validate_symbol(&repeat.symbol)); - } - SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { - try!(self.validate_symbol(sym)); - } - SymbolKind::Lookahead | SymbolKind::Lookbehind => { - // if using an internal tokenizer, lookahead/lookbehind are ok. - if let Some(extern_token) = self.extern_token { - if extern_token.enum_token.is_some() { - // otherwise, the Location type must be specified. - let loc = Atom::from(LOCATION); - if self.extern_token.unwrap().associated_type(loc).is_none() { - return_err!( - symbol.span, - "lookahead/lookbehind require you to declare the type of \ - a location; add a `type {} = ..` statement to the extern token \ - block", - LOCATION - ); - } - } - } - } - } - - Ok(()) - } -} +//! Validate checks some basic safety conditions. + +use super::{NormError, NormResult}; +use super::norm_util::{self, Symbols}; + +use grammar::consts::*; +use grammar::parse_tree::*; +use grammar::repr as r; +use string_cache::DefaultAtom as Atom; +use collections::{set, Multimap}; +use util::Sep; + +#[cfg(test)] +mod test; + +pub fn validate(grammar: &Grammar) -> NormResult<()> { + let match_token: Option<&MatchToken> = grammar + .items + .iter() + .filter_map(|item| item.as_match_token()) + .next(); + + let extern_token: Option<&ExternToken> = grammar + .items + .iter() + .filter_map(|item| item.as_extern_token()) + .next(); + + let validator = Validator { + grammar: grammar, + match_token: match_token, + extern_token: extern_token, + }; + + validator.validate() +} + +struct Validator<'grammar> { + grammar: &'grammar Grammar, + match_token: Option<&'grammar MatchToken>, + extern_token: Option<&'grammar ExternToken>, +} + +impl<'grammar> Validator<'grammar> { + fn validate(&self) -> NormResult<()> { + let allowed_names = vec![ + Atom::from(LALR), + Atom::from(TABLE_DRIVEN), + Atom::from(RECURSIVE_ASCENT), + Atom::from(TEST_ALL), + ]; + for annotation in &self.grammar.annotations { + if !allowed_names.contains(&annotation.id) { + return_err!( + annotation.id_span, + "unrecognized annotation `{}`", + annotation.id + ); + } + } + + for item in &self.grammar.items { + match *item { + GrammarItem::Use(..) => {} + + GrammarItem::MatchToken(ref data) => { + if data.span != self.match_token.unwrap().span { + return_err!(data.span, "multiple match definitions are not permitted"); + } + + // Only error if a custom lexer is specified, having a custom types is ok + if let Some(d) = self.extern_token { + if d.enum_token.is_some() { + return_err!( + d.span, + "extern (with custom tokens) and match definitions are mutually exclusive"); + } + } + + // Ensure that the catch all is final item of final block + for (contents_idx, match_contents) in data.contents.iter().enumerate() { + for (item_idx, item) in match_contents.items.iter().enumerate() { + if item.is_catch_all() + && (contents_idx != &data.contents.len() - 1 + || item_idx != &match_contents.items.len() - 1) + { + return_err!(item.span(), "Catch all must be final item"); + } else { + println!("ok"); + } + } + } + } + + GrammarItem::ExternToken(ref data) => { + if data.span != self.extern_token.unwrap().span { + return_err!(data.span, "multiple extern definitions are not permitted"); + } + + // Only error if a custom lexer is specified, having a custom types is ok + if let Some(d) = self.match_token { + if data.enum_token.is_some() { + return_err!( + d.span, + "match and extern (with custom tokens) definitions are mutually exclusive"); + } + } + + let allowed_names = vec![Atom::from(LOCATION), Atom::from(ERROR)]; + let mut new_names = set(); + for associated_type in &data.associated_types { + if !allowed_names.contains(&associated_type.type_name) { + return_err!( + associated_type.type_span, + "associated type `{}` not recognized, \ + try one of the following: {}", + associated_type.type_name, + Sep(", ", &allowed_names) + ); + } else if !new_names.insert(associated_type.type_name.clone()) { + return_err!( + associated_type.type_span, + "associated type `{}` already specified", + associated_type.type_name + ); + } + } + } + GrammarItem::Nonterminal(ref data) => { + if data.visibility.is_pub() && !data.args.is_empty() { + return_err!(data.span, "macros cannot be marked public"); + } + let inline_annotation = Atom::from(INLINE); + let known_annotations = vec![inline_annotation.clone()]; + let mut found_annotations = set(); + for annotation in &data.annotations { + if !known_annotations.contains(&annotation.id) { + return_err!( + annotation.id_span, + "unrecognized annotation `{}`", + annotation.id + ); + } else if !found_annotations.insert(annotation.id.clone()) { + return_err!( + annotation.id_span, + "duplicate annotation `{}`", + annotation.id + ); + } else if annotation.id == inline_annotation && data.visibility.is_pub() { + return_err!( + annotation.id_span, + "public items cannot be marked #[inline]" + ); + } + } + + for alternative in &data.alternatives { + try!(self.validate_alternative(alternative)); + } + } + GrammarItem::InternToken(..) => {} + } + } + Ok(()) + } + + fn validate_alternative(&self, alternative: &Alternative) -> NormResult<()> { + try!(self.validate_expr(&alternative.expr)); + + match norm_util::analyze_expr(&alternative.expr) { + Symbols::Named(syms) => { + if alternative.action.is_none() { + let sym = syms.iter().map(|&(_, _, sym)| sym).next().unwrap(); + return_err!( + sym.span, + "named symbols (like `{}`) require a custom action", + sym + ); + } + } + Symbols::Anon(_) => { + let empty_string = "".to_string(); + let action = { + match alternative.action { + Some(ActionKind::User(ref action)) => action, + Some(ActionKind::Fallible(ref action)) => action, + _ => &empty_string, + } + }; + if norm_util::check_between_braces(action).is_in_curly_brackets() { + return_err!( + alternative.span, + "Using `<>` between curly braces (e.g., `{{<>}}`) only works when your parsed values have been given names (e.g., ``, not just ``)"); + } + } + } + + Ok(()) + } + + fn validate_expr(&self, expr: &ExprSymbol) -> NormResult<()> { + for symbol in &expr.symbols { + try!(self.validate_symbol(symbol)); + } + + let chosen: Vec<&Symbol> = expr.symbols + .iter() + .filter(|sym| match sym.kind { + SymbolKind::Choose(_) => true, + _ => false, + }) + .collect(); + + let named: Multimap> = expr.symbols + .iter() + .filter_map(|sym| match sym.kind { + SymbolKind::Name(ref nt, _) => Some((nt.clone(), sym)), + _ => None, + }) + .collect(); + + if !chosen.is_empty() && !named.is_empty() { + return_err!( + chosen[0].span, + "anonymous symbols like this one cannot be combined with \ + named symbols like `{}`", + named.into_iter().next().unwrap().1[0] + ); + } + + for (name, syms) in named.into_iter() { + if syms.len() > 1 { + return_err!( + syms[1].span, + "multiple symbols named `{}` are not permitted", + name + ); + } + } + + Ok(()) + } + + fn validate_symbol(&self, symbol: &Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref expr) => { + try!(self.validate_expr(expr)); + } + SymbolKind::AmbiguousId(_) => { /* see resolve */ } + SymbolKind::Terminal(_) => { /* see postvalidate! */ } + SymbolKind::Nonterminal(_) => { /* see resolve */ } + SymbolKind::Error => { + let mut algorithm = r::Algorithm::default(); + read_algorithm(&self.grammar.annotations, &mut algorithm); + if algorithm.codegen == r::LrCodeGeneration::RecursiveAscent { + return_err!( + symbol.span, + "error recovery is not yet supported by recursive ascent parsers" + ); + } + } + SymbolKind::Macro(ref msym) => { + debug_assert!(msym.args.len() > 0); + for arg in &msym.args { + try!(self.validate_symbol(arg)); + } + } + SymbolKind::Repeat(ref repeat) => { + try!(self.validate_symbol(&repeat.symbol)); + } + SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { + try!(self.validate_symbol(sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind => { + // if using an internal tokenizer, lookahead/lookbehind are ok. + if let Some(extern_token) = self.extern_token { + if extern_token.enum_token.is_some() { + // otherwise, the Location type must be specified. + let loc = Atom::from(LOCATION); + if self.extern_token.unwrap().associated_type(loc).is_none() { + return_err!( + symbol.span, + "lookahead/lookbehind require you to declare the type of \ + a location; add a `type {} = ..` statement to the extern token \ + block", + LOCATION + ); + } + } + } + } + } + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/normalize/prevalidate/test.rs b/third_party/rust/lalrpop/src/normalize/prevalidate/test.rs index acfe20e959c8..6bc3f4ec1f92 100644 --- a/third_party/rust/lalrpop/src/normalize/prevalidate/test.rs +++ b/third_party/rust/lalrpop/src/normalize/prevalidate/test.rs @@ -1,151 +1,151 @@ -use parser; -use test_util; - -fn check_err(expected_err: &str, grammar: &str, span: &str) { - let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); - let err = super::validate(&parsed_grammar).unwrap_err(); - test_util::check_norm_err(expected_err, span, err); -} - -#[test] -fn named_symbols() { - check_err( - r#"named symbols \(like `"Num"`\) require a custom action"#, - r#"grammar; Term = { };"#, - r#" ~~~~~ "#, - ); -} - -#[test] -fn bad_assoc_type() { - check_err( - r#"associated type `Foo` not recognized"#, - r#"grammar; extern { type Foo = i32; enum Tok { } }"#, - r#" ~~~ "#, - ); -} - -#[test] -fn dup_assoc_type() { - check_err( - r#"associated type `Location` already specified"#, - r#"grammar; extern { type Location = i32; type Location = u32; enum Tok { } }"#, - r#" ~~~~~~~~ "#, - ); -} - -#[test] -fn lookahead_without_loc_type() { - check_err( - r#"lookahead/lookbehind require you to declare the type of a location"#, - r#"grammar; extern { enum Tok { } } Foo = @L;"#, - r#" ~~ "#, - ); -} - -#[test] -fn multiple_extern_token() { - check_err( - r#"multiple extern definitions are not permitted"#, - r#"grammar; extern { enum Tok { } } extern { enum Tok { } }"#, - r#" ~~~~~~ "#, - ); -} - -#[test] -fn unrecognized_annotation() { - check_err( - r#"unrecognized annotation `foo`"#, - r#"grammar; #[foo] Term = ();"#, - r#" ~~~ "#, - ); -} - -#[test] -fn duplicate_annotation() { - check_err( - r#"duplicate annotation `inline`"#, - r#"grammar; #[inline] #[inline] Term = ();"#, - r#" ~~~~~~ "#, - ); -} - -#[test] -fn pub_inline_annotation() { - check_err( - r#"public items cannot be marked #\[inline\]"#, - r#"grammar; #[inline] pub Term = ();"#, - r#" ~~~~~~ "#, - ); -} - -#[test] -fn multiple_match_token() { - check_err( - r#"multiple match definitions are not permitted"#, - r#"grammar; match { _ } match { _ }"#, - r#" ~~~~~ "#, - ); -} - -#[test] -fn match_after_extern_token() { - check_err( - r#"match and extern \(with custom tokens\) definitions are mutually exclusive"#, - r#"grammar; extern { enum Tok { } } match { _ }"#, - r#" ~~~~~ "#, - ); -} - -#[test] -fn extern_after_match_token() { - check_err( - r#"extern \(with custom tokens\) and match definitions are mutually exclusive"#, - r#"grammar; match { _ } extern { enum Tok { } }"#, - r#" ~~~~~~ "#, - ); -} - -#[test] -fn match_catch_all_first_of_last() { - check_err( - r#"Catch all must be final item"#, - r#"grammar; match { _, "abc" }"#, - r#" ~ "#, - ); -} - -#[test] -fn match_catch_all_last_of_first() { - check_err( - r#"Catch all must be final item"#, - r#"grammar; match { "abc", _ } else { "foo" }"#, - r#" ~ "#, - ); -} - -#[test] -fn expandable_expression_requires_named_variables() { - check_err( - r#"Using `<>` between curly braces \(e.g., `\{<>\}`\) only works when your parsed values have been given names \(e.g., ``, not just ``\)"#, - r#"grammar; Term = { => Foo {<>} };"#, - r#" ~~~~~~~~~~~~~~~~ "#); -} - -#[test] -fn mixing_names_and_anonymous_values() { - check_err( - r#"anonymous symbols like this one cannot be combined with named symbols like `b:B`"#, - r#"grammar; Term = { => Alien: Eighth passanger of Nostromo};"#, - r#" ~~~ "#, - ); -} - -#[test] -fn public_macros() { - check_err( - r#"macros cannot be marked public"#, - r#"grammar; pub Comma = (T ",")* T?;"#, - r#" ~~~~~~~~ "#, - ); -} +use parser; +use test_util; + +fn check_err(expected_err: &str, grammar: &str, span: &str) { + let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); + let err = super::validate(&parsed_grammar).unwrap_err(); + test_util::check_norm_err(expected_err, span, err); +} + +#[test] +fn named_symbols() { + check_err( + r#"named symbols \(like `"Num"`\) require a custom action"#, + r#"grammar; Term = { };"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn bad_assoc_type() { + check_err( + r#"associated type `Foo` not recognized"#, + r#"grammar; extern { type Foo = i32; enum Tok { } }"#, + r#" ~~~ "#, + ); +} + +#[test] +fn dup_assoc_type() { + check_err( + r#"associated type `Location` already specified"#, + r#"grammar; extern { type Location = i32; type Location = u32; enum Tok { } }"#, + r#" ~~~~~~~~ "#, + ); +} + +#[test] +fn lookahead_without_loc_type() { + check_err( + r#"lookahead/lookbehind require you to declare the type of a location"#, + r#"grammar; extern { enum Tok { } } Foo = @L;"#, + r#" ~~ "#, + ); +} + +#[test] +fn multiple_extern_token() { + check_err( + r#"multiple extern definitions are not permitted"#, + r#"grammar; extern { enum Tok { } } extern { enum Tok { } }"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn unrecognized_annotation() { + check_err( + r#"unrecognized annotation `foo`"#, + r#"grammar; #[foo] Term = ();"#, + r#" ~~~ "#, + ); +} + +#[test] +fn duplicate_annotation() { + check_err( + r#"duplicate annotation `inline`"#, + r#"grammar; #[inline] #[inline] Term = ();"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn pub_inline_annotation() { + check_err( + r#"public items cannot be marked #\[inline\]"#, + r#"grammar; #[inline] pub Term = ();"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn multiple_match_token() { + check_err( + r#"multiple match definitions are not permitted"#, + r#"grammar; match { _ } match { _ }"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn match_after_extern_token() { + check_err( + r#"match and extern \(with custom tokens\) definitions are mutually exclusive"#, + r#"grammar; extern { enum Tok { } } match { _ }"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn extern_after_match_token() { + check_err( + r#"extern \(with custom tokens\) and match definitions are mutually exclusive"#, + r#"grammar; match { _ } extern { enum Tok { } }"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn match_catch_all_first_of_last() { + check_err( + r#"Catch all must be final item"#, + r#"grammar; match { _, "abc" }"#, + r#" ~ "#, + ); +} + +#[test] +fn match_catch_all_last_of_first() { + check_err( + r#"Catch all must be final item"#, + r#"grammar; match { "abc", _ } else { "foo" }"#, + r#" ~ "#, + ); +} + +#[test] +fn expandable_expression_requires_named_variables() { + check_err( + r#"Using `<>` between curly braces \(e.g., `\{<>\}`\) only works when your parsed values have been given names \(e.g., ``, not just ``\)"#, + r#"grammar; Term = { => Foo {<>} };"#, + r#" ~~~~~~~~~~~~~~~~ "#); +} + +#[test] +fn mixing_names_and_anonymous_values() { + check_err( + r#"anonymous symbols like this one cannot be combined with named symbols like `b:B`"#, + r#"grammar; Term = { => Alien: Eighth passanger of Nostromo};"#, + r#" ~~~ "#, + ); +} + +#[test] +fn public_macros() { + check_err( + r#"macros cannot be marked public"#, + r#"grammar; pub Comma = (T ",")* T?;"#, + r#" ~~~~~~~~ "#, + ); +} diff --git a/third_party/rust/lalrpop/src/normalize/resolve/mod.rs b/third_party/rust/lalrpop/src/normalize/resolve/mod.rs index 6bf08050f411..892933bf048a 100644 --- a/third_party/rust/lalrpop/src/normalize/resolve/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/resolve/mod.rs @@ -1,299 +1,298 @@ -//! Resolves identifiers to decide if they are macros, terminals, or -//! nonterminals. Rewrites the parse tree accordingly. - -use super::{NormError, NormResult}; - -use collections::{map, Map}; -use grammar::parse_tree::*; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -pub fn resolve(mut grammar: Grammar) -> NormResult { - try!(resolve_in_place(&mut grammar)); - Ok(grammar) -} - -fn resolve_in_place(grammar: &mut Grammar) -> NormResult<()> { - let globals = { - let nonterminal_identifiers = grammar - .items - .iter() - .filter_map(|item| item.as_nonterminal()) - .map(|nt| { - ( - nt.span.clone(), - nt.name.0.clone(), - Def::Nonterminal(nt.args.len()), - ) - }); - - let terminal_identifiers = grammar - .items - .iter() - .filter_map(|item| item.as_extern_token()) - .flat_map(|extern_token| extern_token.enum_token.as_ref()) - .flat_map(|enum_token| &enum_token.conversions) - .filter_map(|conversion| match conversion.from { - TerminalString::Literal(..) | TerminalString::Error => None, - TerminalString::Bare(ref id) => Some((conversion.span, id.clone(), Def::Terminal)), - }); - - // Extract all the bare identifiers that appear in the RHS of a `match` declaration. - // Example: - // match { - // r"(?)begin" => "BEGIN", - // } else { - // r"[a-zA-Z_][a-zA-Z0-9_]*" => ID, - // } - // This would result in `vec![ID]`. - let match_identifiers = grammar - .items - .iter() - .filter_map(|item| item.as_match_token()) - .flat_map(|match_token| &match_token.contents) - .flat_map(|match_contents| &match_contents.items) - .filter_map(|item| match *item { - MatchItem::Mapped(_, TerminalString::Bare(ref id), _) => { - Some((item.span(), id.clone(), Def::Terminal)) - } - _ => None, - }); - - let all_identifiers = nonterminal_identifiers - .chain(terminal_identifiers) - .chain(match_identifiers); - - let mut identifiers = map(); - for (span, id, def) in all_identifiers { - if let Some(old_def) = identifiers.insert(id.clone(), def) { - let description = def.description(); - let old_description = old_def.description(); - if description == old_description { - return_err!(span, "two {}s declared with the name `{}`", description, id); - } else { - return_err!( - span, - "{} and {} both declared with the name `{}`", - description, - old_description, - id - ); - } - } - } - - ScopeChain { - previous: None, - identifiers: identifiers, - } - }; - - let validator = Validator { globals: globals }; - - validator.validate(grammar) -} - -struct Validator { - globals: ScopeChain<'static>, -} - -#[derive(Copy, Clone, Debug)] -enum Def { - Terminal, - Nonterminal(usize), // argument is the number of macro arguments - MacroArg, -} - -#[derive(Debug)] -struct ScopeChain<'scope> { - previous: Option<&'scope ScopeChain<'scope>>, - identifiers: Map, -} - -impl Def { - fn description(&self) -> &'static str { - match *self { - Def::Terminal => "terminal", - Def::Nonterminal(0) => "nonterminal", - Def::Nonterminal(_) => "macro", - Def::MacroArg => "macro argument", - } - } -} - -impl Validator { - fn validate(&self, grammar: &mut Grammar) -> NormResult<()> { - for item in &mut grammar.items { - match *item { - GrammarItem::Use(..) => {} - GrammarItem::MatchToken(..) => {} - GrammarItem::InternToken(..) => {} - GrammarItem::ExternToken(..) => {} - GrammarItem::Nonterminal(ref mut data) => { - let identifiers = try!(self.validate_macro_args(data.span, &data.args)); - let locals = ScopeChain { - previous: Some(&self.globals), - identifiers: identifiers, - }; - for alternative in &mut data.alternatives { - try!(self.validate_alternative(&locals, alternative)); - } - } - } - } - Ok(()) - } - - fn validate_macro_args( - &self, - span: Span, - args: &[NonterminalString], - ) -> NormResult> { - for (index, arg) in args.iter().enumerate() { - if args[..index].contains(&arg) { - return_err!( - span, - "multiple macro arguments declared with the name `{}`", - arg - ); - } - } - Ok(args - .iter() - .map(|nt| (nt.0.clone(), Def::MacroArg)) - .collect()) - } - - fn validate_alternative( - &self, - scope: &ScopeChain, - alternative: &mut Alternative, - ) -> NormResult<()> { - if let Some(ref condition) = alternative.condition { - let def = try!(self.validate_id(scope, condition.span.clone(), &condition.lhs.0)); - match def { - Def::MacroArg => { /* OK */ } - _ => { - return_err!( - condition.span, - "only macro arguments can be used in conditions, \ - not {}s like `{}`", - def.description(), - condition.lhs - ); - } - } - } - - try!(self.validate_expr(scope, &mut alternative.expr)); - - Ok(()) - } - - fn validate_expr(&self, scope: &ScopeChain, expr: &mut ExprSymbol) -> NormResult<()> { - for symbol in &mut expr.symbols { - try!(self.validate_symbol(scope, symbol)); - } - - Ok(()) - } - - fn validate_symbol(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { - match symbol.kind { - SymbolKind::Expr(ref mut expr) => { - try!(self.validate_expr(scope, expr)); - } - SymbolKind::AmbiguousId(_) => { - try!(self.rewrite_ambiguous_id(scope, symbol)); - } - SymbolKind::Terminal(_) => { /* see postvalidate! */ } - SymbolKind::Nonterminal(ref id) => { - // in normal operation, the parser never produces Nonterminal(_) entries, - // but during testing we do produce nonterminal entries - let def = try!(self.validate_id(scope, symbol.span, &id.0)); - match def { - Def::Nonterminal(0) | Def::MacroArg => { - // OK - } - Def::Terminal | Def::Nonterminal(_) => { - return_err!( - symbol.span, - "`{}` is a {}, not a nonterminal", - def.description(), - id - ); - } - } - } - SymbolKind::Macro(ref mut msym) => { - debug_assert!(msym.args.len() > 0); - let def = try!(self.validate_id(scope, symbol.span, &msym.name.0)); - match def { - Def::Nonterminal(0) | Def::Terminal | Def::MacroArg => return_err!( - symbol.span, - "`{}` is a {}, not a macro", - def.description(), - msym.name - ), - Def::Nonterminal(arity) => { - if arity != msym.args.len() { - return_err!( - symbol.span, - "wrong number of arguments to `{}`: \ - expected {}, found {}", - msym.name, - arity, - msym.args.len() - ); - } - } - } - - for arg in &mut msym.args { - try!(self.validate_symbol(scope, arg)); - } - } - SymbolKind::Repeat(ref mut repeat) => { - try!(self.validate_symbol(scope, &mut repeat.symbol)); - } - SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { - try!(self.validate_symbol(scope, sym)); - } - SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} - } - - Ok(()) - } - - fn rewrite_ambiguous_id(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { - let id = if let SymbolKind::AmbiguousId(ref name) = symbol.kind { - name.clone() - } else { - panic!("Should never happen."); - }; - symbol.kind = match try!(self.validate_id(scope, symbol.span, &id)) { - Def::MacroArg | Def::Nonterminal(0) => SymbolKind::Nonterminal(NonterminalString(id)), - Def::Terminal => SymbolKind::Terminal(TerminalString::Bare(id)), - Def::Nonterminal(_) => return_err!(symbol.span, "`{}` is a macro", id), - }; - Ok(()) - } - - fn validate_id(&self, scope: &ScopeChain, span: Span, id: &Atom) -> NormResult { - match scope.def(id) { - Some(def) => Ok(def), - None => return_err!(span, "no definition found for `{}`", id), - } - } -} - -impl<'scope> ScopeChain<'scope> { - fn def(&self, id: &Atom) -> Option { - self.identifiers - .get(id) - .cloned() - .or_else(|| self.previous.and_then(|s| s.def(id))) - } -} +//! Resolves identifiers to decide if they are macros, terminals, or +//! nonterminals. Rewrites the parse tree accordingly. + +use super::{NormError, NormResult}; + +use grammar::parse_tree::*; +use string_cache::DefaultAtom as Atom; +use collections::{map, Map}; + +#[cfg(test)] +mod test; + +pub fn resolve(mut grammar: Grammar) -> NormResult { + try!(resolve_in_place(&mut grammar)); + Ok(grammar) +} + +fn resolve_in_place(grammar: &mut Grammar) -> NormResult<()> { + let globals = { + let nonterminal_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .map(|nt| { + ( + nt.span.clone(), + nt.name.0.clone(), + Def::Nonterminal(nt.args.len()), + ) + }); + + let terminal_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_extern_token()) + .flat_map(|extern_token| extern_token.enum_token.as_ref()) + .flat_map(|enum_token| &enum_token.conversions) + .filter_map(|conversion| match conversion.from { + TerminalString::Literal(..) | TerminalString::Error => None, + TerminalString::Bare(ref id) => Some((conversion.span, id.clone(), Def::Terminal)), + }); + + // Extract all the bare identifiers that appear in the RHS of a `match` declaration. + // Example: + // match { + // r"(?)begin" => "BEGIN", + // } else { + // r"[a-zA-Z_][a-zA-Z0-9_]*" => ID, + // } + // This would result in `vec![ID]`. + let match_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_match_token()) + .flat_map(|match_token| &match_token.contents) + .flat_map(|match_contents| &match_contents.items) + .filter_map(|item| match *item { + MatchItem::Mapped(_, TerminalString::Bare(ref id), _) => { + Some((item.span(), id.clone(), Def::Terminal)) + } + _ => None, + }); + + let all_identifiers = nonterminal_identifiers + .chain(terminal_identifiers) + .chain(match_identifiers); + + let mut identifiers = map(); + for (span, id, def) in all_identifiers { + if let Some(old_def) = identifiers.insert(id.clone(), def) { + let description = def.description(); + let old_description = old_def.description(); + if description == old_description { + return_err!(span, "two {}s declared with the name `{}`", description, id); + } else { + return_err!( + span, + "{} and {} both declared with the name `{}`", + description, + old_description, + id + ); + } + } + } + + ScopeChain { + previous: None, + identifiers: identifiers, + } + }; + + let validator = Validator { globals: globals }; + + validator.validate(grammar) +} + +struct Validator { + globals: ScopeChain<'static>, +} + +#[derive(Copy, Clone, Debug)] +enum Def { + Terminal, + Nonterminal(usize), // argument is the number of macro arguments + MacroArg, +} + +#[derive(Debug)] +struct ScopeChain<'scope> { + previous: Option<&'scope ScopeChain<'scope>>, + identifiers: Map, +} + +impl Def { + fn description(&self) -> &'static str { + match *self { + Def::Terminal => "terminal", + Def::Nonterminal(0) => "nonterminal", + Def::Nonterminal(_) => "macro", + Def::MacroArg => "macro argument", + } + } +} + +impl Validator { + fn validate(&self, grammar: &mut Grammar) -> NormResult<()> { + for item in &mut grammar.items { + match *item { + GrammarItem::Use(..) => {} + GrammarItem::MatchToken(..) => {} + GrammarItem::InternToken(..) => {} + GrammarItem::ExternToken(..) => {} + GrammarItem::Nonterminal(ref mut data) => { + let identifiers = try!(self.validate_macro_args(data.span, &data.args)); + let locals = ScopeChain { + previous: Some(&self.globals), + identifiers: identifiers, + }; + for alternative in &mut data.alternatives { + try!(self.validate_alternative(&locals, alternative)); + } + } + } + } + Ok(()) + } + + fn validate_macro_args( + &self, + span: Span, + args: &[NonterminalString], + ) -> NormResult> { + for (index, arg) in args.iter().enumerate() { + if args[..index].contains(&arg) { + return_err!( + span, + "multiple macro arguments declared with the name `{}`", + arg + ); + } + } + Ok(args.iter() + .map(|nt| (nt.0.clone(), Def::MacroArg)) + .collect()) + } + + fn validate_alternative( + &self, + scope: &ScopeChain, + alternative: &mut Alternative, + ) -> NormResult<()> { + if let Some(ref condition) = alternative.condition { + let def = try!(self.validate_id(scope, condition.span.clone(), &condition.lhs.0)); + match def { + Def::MacroArg => { /* OK */ } + _ => { + return_err!( + condition.span, + "only macro arguments can be used in conditions, \ + not {}s like `{}`", + def.description(), + condition.lhs + ); + } + } + } + + try!(self.validate_expr(scope, &mut alternative.expr)); + + Ok(()) + } + + fn validate_expr(&self, scope: &ScopeChain, expr: &mut ExprSymbol) -> NormResult<()> { + for symbol in &mut expr.symbols { + try!(self.validate_symbol(scope, symbol)); + } + + Ok(()) + } + + fn validate_symbol(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref mut expr) => { + try!(self.validate_expr(scope, expr)); + } + SymbolKind::AmbiguousId(_) => { + try!(self.rewrite_ambiguous_id(scope, symbol)); + } + SymbolKind::Terminal(_) => { /* see postvalidate! */ } + SymbolKind::Nonterminal(ref id) => { + // in normal operation, the parser never produces Nonterminal(_) entries, + // but during testing we do produce nonterminal entries + let def = try!(self.validate_id(scope, symbol.span, &id.0)); + match def { + Def::Nonterminal(0) | Def::MacroArg => { + // OK + } + Def::Terminal | Def::Nonterminal(_) => { + return_err!( + symbol.span, + "`{}` is a {}, not a nonterminal", + def.description(), + id + ); + } + } + } + SymbolKind::Macro(ref mut msym) => { + debug_assert!(msym.args.len() > 0); + let def = try!(self.validate_id(scope, symbol.span, &msym.name.0)); + match def { + Def::Nonterminal(0) | Def::Terminal | Def::MacroArg => return_err!( + symbol.span, + "`{}` is a {}, not a macro", + def.description(), + msym.name + ), + Def::Nonterminal(arity) => { + if arity != msym.args.len() { + return_err!( + symbol.span, + "wrong number of arguments to `{}`: \ + expected {}, found {}", + msym.name, + arity, + msym.args.len() + ); + } + } + } + + for arg in &mut msym.args { + try!(self.validate_symbol(scope, arg)); + } + } + SymbolKind::Repeat(ref mut repeat) => { + try!(self.validate_symbol(scope, &mut repeat.symbol)); + } + SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { + try!(self.validate_symbol(scope, sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} + } + + Ok(()) + } + + fn rewrite_ambiguous_id(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { + let id = if let SymbolKind::AmbiguousId(ref name) = symbol.kind { + name.clone() + } else { + panic!("Should never happen."); + }; + symbol.kind = match try!(self.validate_id(scope, symbol.span, &id)) { + Def::MacroArg | Def::Nonterminal(0) => SymbolKind::Nonterminal(NonterminalString(id)), + Def::Terminal => SymbolKind::Terminal(TerminalString::Bare(id)), + Def::Nonterminal(_) => return_err!(symbol.span, "`{}` is a macro", id), + }; + Ok(()) + } + + fn validate_id(&self, scope: &ScopeChain, span: Span, id: &Atom) -> NormResult { + match scope.def(id) { + Some(def) => Ok(def), + None => return_err!(span, "no definition found for `{}`", id), + } + } +} + +impl<'scope> ScopeChain<'scope> { + fn def(&self, id: &Atom) -> Option { + self.identifiers + .get(id) + .cloned() + .or_else(|| self.previous.and_then(|s| s.def(id))) + } +} diff --git a/third_party/rust/lalrpop/src/normalize/resolve/test.rs b/third_party/rust/lalrpop/src/normalize/resolve/test.rs index 1cb69d4393a9..db8fa2b5d27c 100644 --- a/third_party/rust/lalrpop/src/normalize/resolve/test.rs +++ b/third_party/rust/lalrpop/src/normalize/resolve/test.rs @@ -1,82 +1,82 @@ -use grammar::parse_tree::Span; -use parser; -use regex::Regex; - -fn check_err(expected_err: &str, grammar: &str) { - let expected_err = Regex::new(expected_err).unwrap(); - - // the string will have a `>>>` and `<<<` in it, which serve to - // indicate the span where an error is expected. - let start_index = grammar.find(">>>").unwrap(); - let grammar = grammar.replace(">>>", ""); // remove the `>>>` marker - let end_index = grammar.rfind("<<<").unwrap(); - let grammar = grammar.replace("<<<", ""); - - assert!(start_index <= end_index); - - let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); - match super::resolve(parsed_grammar) { - Ok(_) => { - panic!("expected error for grammar"); - } - Err(err) => { - assert_eq!(err.span, Span(start_index, end_index)); - assert!( - expected_err.is_match(&err.message), - "unexpected error text `{}`, did not match `{}`", - err.message, - expected_err - ); - } - } -} - -#[test] -fn unknown_nonterminal() { - check_err("no definition found for `Y`", r#"grammar; X = X >>>Y<<<;"#); -} - -#[test] -fn unknown_nonterminal_in_macro_arg() { - check_err( - "no definition found for `Y`", - r#"grammar; X = X Id<>>>Y<<<>; Id = T;"#, - ); -} - -#[test] -fn unknown_nonterminal_in_repeat_question() { - check_err("no definition found for `Y`", r#"grammar; X = >>>Y<< => n.as_num(), "A" <>>>Expr<<<> "B" };"#, - ); -} - -#[test] -fn double_nonterminal() { - check_err( - "two nonterminals declared with the name `A`", - r#"grammar; A = "Foo"; >>>A<<< = "Bar";"#, - ); -} - -#[test] -fn repeated_macro_arg() { - check_err( - "multiple macro arguments declared with the name `Y`", - r#"grammar; >>>X<<< = "foo";"#, - ); -} - -#[test] -fn overlapping_terminal_and_nonterminal() { - check_err( - "terminal and nonterminal both declared with the name `A`", - r#"grammar; A = "Foo"; extern { enum Foo { >>>A => Foo::A(..) <<<} }"#, - ); -} +use parser; +use grammar::parse_tree::Span; +use regex::Regex; + +fn check_err(expected_err: &str, grammar: &str) { + let expected_err = Regex::new(expected_err).unwrap(); + + // the string will have a `>>>` and `<<<` in it, which serve to + // indicate the span where an error is expected. + let start_index = grammar.find(">>>").unwrap(); + let grammar = grammar.replace(">>>", ""); // remove the `>>>` marker + let end_index = grammar.rfind("<<<").unwrap(); + let grammar = grammar.replace("<<<", ""); + + assert!(start_index <= end_index); + + let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); + match super::resolve(parsed_grammar) { + Ok(_) => { + panic!("expected error for grammar"); + } + Err(err) => { + assert_eq!(err.span, Span(start_index, end_index)); + assert!( + expected_err.is_match(&err.message), + "unexpected error text `{}`, did not match `{}`", + err.message, + expected_err + ); + } + } +} + +#[test] +fn unknown_nonterminal() { + check_err("no definition found for `Y`", r#"grammar; X = X >>>Y<<<;"#); +} + +#[test] +fn unknown_nonterminal_in_macro_arg() { + check_err( + "no definition found for `Y`", + r#"grammar; X = X Id<>>>Y<<<>; Id = T;"#, + ); +} + +#[test] +fn unknown_nonterminal_in_repeat_question() { + check_err("no definition found for `Y`", r#"grammar; X = >>>Y<< => n.as_num(), "A" <>>>Expr<<<> "B" };"#, + ); +} + +#[test] +fn double_nonterminal() { + check_err( + "two nonterminals declared with the name `A`", + r#"grammar; A = "Foo"; >>>A<<< = "Bar";"#, + ); +} + +#[test] +fn repeated_macro_arg() { + check_err( + "multiple macro arguments declared with the name `Y`", + r#"grammar; >>>X<<< = "foo";"#, + ); +} + +#[test] +fn overlapping_terminal_and_nonterminal() { + check_err( + "terminal and nonterminal both declared with the name `A`", + r#"grammar; A = "Foo"; extern { enum Foo { >>>A => Foo::A(..) <<<} }"#, + ); +} diff --git a/third_party/rust/lalrpop/src/normalize/token_check/mod.rs b/third_party/rust/lalrpop/src/normalize/token_check/mod.rs index 5160eeca5009..3ec2f51e5c81 100644 --- a/third_party/rust/lalrpop/src/normalize/token_check/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/token_check/mod.rs @@ -1,427 +1,424 @@ -//! If an extern token is provided, then this pass validates that -//! terminal IDs have conversions. Otherwise, it generates a -//! tokenizer. This can only be done after macro expansion because -//! some macro arguments never make it into an actual production and -//! are only used in `if` conditions; we use string literals for -//! those, but they do not have to have a defined conversion. - -use super::{NormError, NormResult}; - -use collections::{Map, Set}; -use grammar::consts::*; -use grammar::parse_tree::*; -use lexer::dfa::{self, DFAConstructionError, Precedence}; -use lexer::nfa::NFAConstructionError::*; -use lexer::re; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -pub fn validate(mut grammar: Grammar) -> NormResult { - let mode = { - let mode = if let Some(enum_token) = grammar.enum_token() { - assert!( - grammar.match_token().is_none(), - "validator permitted both an extern/match section" - ); - - TokenMode::Extern { - conversions: enum_token - .conversions - .iter() - .map(|conversion| conversion.from.clone()) - .collect(), - } - } else { - TokenMode::Internal { - match_block: MatchBlock::new(grammar.match_token())?, - } - }; - - let mut validator = Validator { - grammar: &grammar, - mode: mode, - }; - - validator.validate()?; - - validator.mode - }; - - match mode { - TokenMode::Extern { .. } => { - // If using an external tokenizer, we're all done at this point. - } - TokenMode::Internal { match_block } => { - // Otherwise, construct the `InternToken` item. - construct(&mut grammar, match_block)?; - } - } - - Ok(grammar) -} - -/////////////////////////////////////////////////////////////////////////// -// Validation phase -- this phase walks the grammar and visits all -// terminals. If using an external set of tokens, it checks that all -// terminals have a defined conversion to some pattern. Otherwise, -// it collects all terminals into the `all_literals` set for later use. - -struct Validator<'grammar> { - grammar: &'grammar Grammar, - mode: TokenMode, -} - -enum TokenMode { - /// If there is an `extern { ... }` section that defines - /// conversions of the form `TERMINAL => PATTERN`, then this is a - /// set of those terminals. These are the only terminals that the - /// user should be using. - Extern { conversions: Set }, - - /// Otherwise, we are synthesizing the tokenizer. In that case, - /// `match_block` summarizes the data from the `match { ... }` - /// section, if any. If there was no `match` section, or the - /// section contains a wildcard, the user can also use additional - /// terminals in the grammar. - Internal { match_block: MatchBlock }, -} - -/// Data summarizing the `match { }` block, along with any literals we -/// scraped up. -#[derive(Default)] -struct MatchBlock { - /// This map stores the `match { }` entries. If `match_catch_all` - /// is true, then we will grow this set with "identity mappings" - /// for new literals that we find. - match_entries: Vec, - - /// The names of all terminals the user can legally type. If - /// `match_catch_all` is true, then if we encounter additional - /// terminal literals in the grammar, we will add them to this - /// set. - match_user_names: Set, - - /// For each terminal literal that we have to match, the span - /// where it appeared in user's source. This can either be in the - /// `match { }` section or else in the grammar somewhere (if added - /// due to a catch-all, or there is no match section). - spans: Map, - - /// True if we should permit unrecognized literals to be used. - catch_all: bool, -} - -impl MatchBlock { - /// Creates a `MatchBlock` by reading the data out of the `match { - /// ... }` block that the user provided (if any). - fn new(opt_match_token: Option<&MatchToken>) -> NormResult { - let mut match_block = Self::default(); - if let Some(match_token) = opt_match_token { - for (idx, mc) in match_token.contents.iter().enumerate() { - let precedence = &match_token.contents.len() - idx; - for item in &mc.items { - match *item { - MatchItem::Unmapped(ref sym, span) => { - match_block.add_match_entry( - precedence, - sym.clone(), - TerminalString::Literal(sym.clone()), - span, - )?; - } - MatchItem::Mapped(ref sym, ref user, span) => { - match_block.add_match_entry( - precedence, - sym.clone(), - user.clone(), - span, - )?; - } - MatchItem::CatchAll(_) => { - match_block.catch_all = true; - } - } - } - } - } else { - // no match block is equivalent to `match { _ }` - match_block.catch_all = true; - } - Ok(match_block) - } - - fn add_match_entry( - &mut self, - match_group_precedence: usize, - sym: TerminalLiteral, - user_name: TerminalString, - span: Span, - ) -> NormResult<()> { - if let Some(_old_span) = self.spans.insert(sym.clone(), span) { - return_err!(span, "multiple match entries for `{}`", sym); - } - - // NB: It's legal for multiple regex to produce same terminal. - self.match_user_names.insert(user_name.clone()); - - self.match_entries.push(MatchEntry { - precedence: match_group_precedence * 2 + sym.base_precedence(), - match_literal: sym, - user_name: user_name, - }); - Ok(()) - } - - fn add_literal_from_grammar(&mut self, sym: TerminalLiteral, span: Span) -> NormResult<()> { - // Already saw this literal, maybe in a match entry, maybe in the grammar. - if self - .match_user_names - .contains(&TerminalString::Literal(sym.clone())) - { - return Ok(()); - } - - if !self.catch_all { - return_err!( - span, - "terminal `{}` does not have a match mapping defined for it", - sym - ); - } - - self.match_user_names - .insert(TerminalString::Literal(sym.clone())); - - self.match_entries.push(MatchEntry { - precedence: sym.base_precedence(), - match_literal: sym.clone(), - user_name: TerminalString::Literal(sym.clone()), - }); - - self.spans.insert(sym, span); - - Ok(()) - } -} - -impl<'grammar> Validator<'grammar> { - fn validate(&mut self) -> NormResult<()> { - for item in &self.grammar.items { - match *item { - GrammarItem::Use(..) => {} - GrammarItem::MatchToken(..) => {} - GrammarItem::ExternToken(_) => {} - GrammarItem::InternToken(_) => {} - GrammarItem::Nonterminal(ref data) => { - for alternative in &data.alternatives { - try!(self.validate_alternative(alternative)); - } - } - } - } - Ok(()) - } - - fn validate_alternative(&mut self, alternative: &Alternative) -> NormResult<()> { - assert!(alternative.condition.is_none()); // macro expansion should have removed these - try!(self.validate_expr(&alternative.expr)); - Ok(()) - } - - fn validate_expr(&mut self, expr: &ExprSymbol) -> NormResult<()> { - for symbol in &expr.symbols { - try!(self.validate_symbol(symbol)); - } - Ok(()) - } - - fn validate_symbol(&mut self, symbol: &Symbol) -> NormResult<()> { - match symbol.kind { - SymbolKind::Expr(ref expr) => { - try!(self.validate_expr(expr)); - } - SymbolKind::Terminal(ref term) => { - try!(self.validate_terminal(symbol.span, term)); - } - SymbolKind::Nonterminal(_) => {} - SymbolKind::Repeat(ref repeat) => { - try!(self.validate_symbol(&repeat.symbol)); - } - SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { - try!(self.validate_symbol(sym)); - } - SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} - SymbolKind::AmbiguousId(ref id) => { - panic!("ambiguous id `{}` encountered after name resolution", id) - } - SymbolKind::Macro(..) => { - panic!("macro not removed: {:?}", symbol); - } - } - - Ok(()) - } - - fn validate_terminal(&mut self, span: Span, term: &TerminalString) -> NormResult<()> { - match self.mode { - // If there is an extern token definition, validate that - // this terminal has a defined conversion. - TokenMode::Extern { ref conversions } => { - if !conversions.contains(term) { - return_err!( - span, - "terminal `{}` does not have a pattern defined for it", - term - ); - } - } - - // If there is no extern token definition, then collect - // the terminal literals ("class", r"[a-z]+") into a set. - TokenMode::Internal { - ref mut match_block, - } => { - match *term { - TerminalString::Bare(_) => assert!( - match_block.match_user_names.contains(term), - "bare terminal without match entry: {}", - term - ), - - TerminalString::Literal(ref l) => { - match_block.add_literal_from_grammar(l.clone(), span)? - } - - // Error is a builtin terminal that always exists - TerminalString::Error => (), - } - } - } - - Ok(()) - } -} - -/////////////////////////////////////////////////////////////////////////// -// Construction phase -- if we are constructing a tokenizer, this -// phase builds up an internal token DFA. - -fn construct(grammar: &mut Grammar, match_block: MatchBlock) -> NormResult<()> { - let MatchBlock { - mut match_entries, - spans, - .. - } = match_block; - - // Sort match entries by order of increasing precedence. - match_entries.sort(); - - // Build up two vectors, one of parsed regular expressions and - // one of precedences, that are parallel with `literals`. - let mut regexs = Vec::with_capacity(match_entries.len()); - let mut precedences = Vec::with_capacity(match_entries.len()); - try!({ - for match_entry in &match_entries { - precedences.push(Precedence(match_entry.precedence)); - match match_entry.match_literal { - TerminalLiteral::Quoted(ref s) => { - regexs.push(re::parse_literal(&s)); - } - TerminalLiteral::Regex(ref s) => { - match re::parse_regex(&s) { - Ok(regex) => regexs.push(regex), - Err(error) => { - let literal_span = spans[&match_entry.match_literal]; - // FIXME -- take offset into account for - // span; this requires knowing how many # - // the user used, which we do not track - return_err!(literal_span, "invalid regular expression: {}", error); - } - } - } - } - } - Ok(()) - }); - - let dfa = match dfa::build_dfa(®exs, &precedences) { - Ok(dfa) => dfa, - Err(DFAConstructionError::NFAConstructionError { index, error }) => { - let feature = match error { - NamedCaptures => r#"named captures (`(?P...)`)"#, - NonGreedy => r#""non-greedy" repetitions (`*?` or `+?`)"#, - WordBoundary => r#"word boundaries (`\b` or `\B`)"#, - LineBoundary => r#"line boundaries (`^` or `$`)"#, - TextBoundary => r#"text boundaries (`^` or `$`)"#, - ByteRegex => r#"byte-based matches"#, - }; - let literal = &match_entries[index.index()].match_literal; - return_err!( - spans[literal], - "{} are not supported in regular expressions", - feature - ) - } - Err(DFAConstructionError::Ambiguity { match0, match1 }) => { - let literal0 = &match_entries[match0.index()].match_literal; - let literal1 = &match_entries[match1.index()].match_literal; - // FIXME(#88) -- it'd be nice to give an example here - return_err!( - spans[literal0], - "ambiguity detected between the terminal `{}` and the terminal `{}`", - literal0, - literal1 - ) - } - }; - - grammar.items.push(GrammarItem::InternToken(InternToken { - match_entries: match_entries, - dfa: dfa, - })); - - // we need to inject a `'input` lifetime and `input: &'input str` parameter as well: - - let input_lifetime = Atom::from(INPUT_LIFETIME); - for parameter in &grammar.type_parameters { - match *parameter { - TypeParameter::Lifetime(ref i) if *i == input_lifetime => { - return_err!( - grammar.span, - "since there is no external token enum specified, \ - the `'input` lifetime is implicit and cannot be declared" - ); - } - _ => {} - } - } - - let input_parameter = Atom::from(INPUT_PARAMETER); - for parameter in &grammar.parameters { - if parameter.name == input_parameter { - return_err!( - grammar.span, - "since there is no external token enum specified, \ - the `input` parameter is implicit and cannot be declared" - ); - } - } - - grammar - .type_parameters - .insert(0, TypeParameter::Lifetime(input_lifetime.clone())); - - let parameter = Parameter { - name: input_parameter, - ty: TypeRef::Ref { - lifetime: Some(input_lifetime), - mutable: false, - referent: Box::new(TypeRef::Id(Atom::from("str"))), - }, - }; - grammar.parameters.push(parameter); - - Ok(()) -} +//! If an extern token is provided, then this pass validates that +//! terminal IDs have conversions. Otherwise, it generates a +//! tokenizer. This can only be done after macro expansion because +//! some macro arguments never make it into an actual production and +//! are only used in `if` conditions; we use string literals for +//! those, but they do not have to have a defined conversion. + +use super::{NormError, NormResult}; + +use string_cache::DefaultAtom as Atom; +use lexer::re; +use lexer::dfa::{self, DFAConstructionError, Precedence}; +use lexer::nfa::NFAConstructionError::*; +use grammar::consts::*; +use grammar::parse_tree::*; +use collections::{Map, Set}; + +#[cfg(test)] +mod test; + +pub fn validate(mut grammar: Grammar) -> NormResult { + let mode = { + let mode = if let Some(enum_token) = grammar.enum_token() { + assert!( + grammar.match_token().is_none(), + "validator permitted both an extern/match section" + ); + + TokenMode::Extern { + conversions: enum_token + .conversions + .iter() + .map(|conversion| conversion.from.clone()) + .collect(), + } + } else { + TokenMode::Internal { + match_block: MatchBlock::new(grammar.match_token())?, + } + }; + + let mut validator = Validator { + grammar: &grammar, + mode: mode, + }; + + validator.validate()?; + + validator.mode + }; + + match mode { + TokenMode::Extern { .. } => { + // If using an external tokenizer, we're all done at this point. + } + TokenMode::Internal { match_block } => { + // Otherwise, construct the `InternToken` item. + construct(&mut grammar, match_block)?; + } + } + + Ok(grammar) +} + +/////////////////////////////////////////////////////////////////////////// +// Validation phase -- this phase walks the grammar and visits all +// terminals. If using an external set of tokens, it checks that all +// terminals have a defined conversion to some pattern. Otherwise, +// it collects all terminals into the `all_literals` set for later use. + +struct Validator<'grammar> { + grammar: &'grammar Grammar, + mode: TokenMode, +} + +enum TokenMode { + /// If there is an `extern { ... }` section that defines + /// conversions of the form `TERMINAL => PATTERN`, then this is a + /// set of those terminals. These are the only terminals that the + /// user should be using. + Extern { conversions: Set }, + + /// Otherwise, we are synthesizing the tokenizer. In that case, + /// `match_block` summarizes the data from the `match { ... }` + /// section, if any. If there was no `match` section, or the + /// section contains a wildcard, the user can also use additional + /// terminals in the grammar. + Internal { match_block: MatchBlock }, +} + +/// Data summarizing the `match { }` block, along with any literals we +/// scraped up. +#[derive(Default)] +struct MatchBlock { + /// This map stores the `match { }` entries. If `match_catch_all` + /// is true, then we will grow this set with "identity mappings" + /// for new literals that we find. + match_entries: Vec, + + /// The names of all terminals the user can legally type. If + /// `match_catch_all` is true, then if we encounter additional + /// terminal literals in the grammar, we will add them to this + /// set. + match_user_names: Set, + + /// For each terminal literal that we have to match, the span + /// where it appeared in user's source. This can either be in the + /// `match { }` section or else in the grammar somewhere (if added + /// due to a catch-all, or there is no match section). + spans: Map, + + /// True if we should permit unrecognized literals to be used. + catch_all: bool, +} + +impl MatchBlock { + /// Creates a `MatchBlock` by reading the data out of the `match { + /// ... }` block that the user provided (if any). + fn new(opt_match_token: Option<&MatchToken>) -> NormResult { + let mut match_block = Self::default(); + if let Some(match_token) = opt_match_token { + for (idx, mc) in match_token.contents.iter().enumerate() { + let precedence = &match_token.contents.len() - idx; + for item in &mc.items { + match *item { + MatchItem::Unmapped(ref sym, span) => { + match_block.add_match_entry( + precedence, + sym.clone(), + TerminalString::Literal(sym.clone()), + span, + )?; + } + MatchItem::Mapped(ref sym, ref user, span) => { + match_block.add_match_entry( + precedence, + sym.clone(), + user.clone(), + span, + )?; + } + MatchItem::CatchAll(_) => { + match_block.catch_all = true; + } + } + } + } + } else { + // no match block is equivalent to `match { _ }` + match_block.catch_all = true; + } + Ok(match_block) + } + + fn add_match_entry( + &mut self, + match_group_precedence: usize, + sym: TerminalLiteral, + user_name: TerminalString, + span: Span, + ) -> NormResult<()> { + if let Some(_old_span) = self.spans.insert(sym.clone(), span) { + return_err!(span, "multiple match entries for `{}`", sym); + } + + // NB: It's legal for multiple regex to produce same terminal. + self.match_user_names.insert(user_name.clone()); + + self.match_entries.push(MatchEntry { + precedence: match_group_precedence * 2 + sym.base_precedence(), + match_literal: sym, + user_name: user_name, + }); + Ok(()) + } + + fn add_literal_from_grammar(&mut self, sym: TerminalLiteral, span: Span) -> NormResult<()> { + // Already saw this literal, maybe in a match entry, maybe in the grammar. + if self.match_user_names + .contains(&TerminalString::Literal(sym.clone())) + { + return Ok(()); + } + + if !self.catch_all { + return_err!( + span, + "terminal `{}` does not have a match mapping defined for it", + sym + ); + } + + self.match_user_names + .insert(TerminalString::Literal(sym.clone())); + + self.match_entries.push(MatchEntry { + precedence: sym.base_precedence(), + match_literal: sym.clone(), + user_name: TerminalString::Literal(sym.clone()), + }); + + self.spans.insert(sym, span); + + Ok(()) + } +} + +impl<'grammar> Validator<'grammar> { + fn validate(&mut self) -> NormResult<()> { + for item in &self.grammar.items { + match *item { + GrammarItem::Use(..) => {} + GrammarItem::MatchToken(..) => {} + GrammarItem::ExternToken(_) => {} + GrammarItem::InternToken(_) => {} + GrammarItem::Nonterminal(ref data) => for alternative in &data.alternatives { + try!(self.validate_alternative(alternative)); + }, + } + } + Ok(()) + } + + fn validate_alternative(&mut self, alternative: &Alternative) -> NormResult<()> { + assert!(alternative.condition.is_none()); // macro expansion should have removed these + try!(self.validate_expr(&alternative.expr)); + Ok(()) + } + + fn validate_expr(&mut self, expr: &ExprSymbol) -> NormResult<()> { + for symbol in &expr.symbols { + try!(self.validate_symbol(symbol)); + } + Ok(()) + } + + fn validate_symbol(&mut self, symbol: &Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref expr) => { + try!(self.validate_expr(expr)); + } + SymbolKind::Terminal(ref term) => { + try!(self.validate_terminal(symbol.span, term)); + } + SymbolKind::Nonterminal(_) => {} + SymbolKind::Repeat(ref repeat) => { + try!(self.validate_symbol(&repeat.symbol)); + } + SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { + try!(self.validate_symbol(sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + SymbolKind::Macro(..) => { + panic!("macro not removed: {:?}", symbol); + } + } + + Ok(()) + } + + fn validate_terminal(&mut self, span: Span, term: &TerminalString) -> NormResult<()> { + match self.mode { + // If there is an extern token definition, validate that + // this terminal has a defined conversion. + TokenMode::Extern { ref conversions } => { + if !conversions.contains(term) { + return_err!( + span, + "terminal `{}` does not have a pattern defined for it", + term + ); + } + } + + // If there is no extern token definition, then collect + // the terminal literals ("class", r"[a-z]+") into a set. + TokenMode::Internal { + ref mut match_block, + } => { + match *term { + TerminalString::Bare(_) => assert!( + match_block.match_user_names.contains(term), + "bare terminal without match entry: {}", + term + ), + + TerminalString::Literal(ref l) => { + match_block.add_literal_from_grammar(l.clone(), span)? + } + + // Error is a builtin terminal that always exists + TerminalString::Error => (), + } + } + } + + Ok(()) + } +} + +/////////////////////////////////////////////////////////////////////////// +// Construction phase -- if we are constructing a tokenizer, this +// phase builds up an internal token DFA. + +fn construct(grammar: &mut Grammar, match_block: MatchBlock) -> NormResult<()> { + let MatchBlock { + mut match_entries, + spans, + .. + } = match_block; + + // Sort match entries by order of increasing precedence. + match_entries.sort(); + + // Build up two vectors, one of parsed regular expressions and + // one of precedences, that are parallel with `literals`. + let mut regexs = Vec::with_capacity(match_entries.len()); + let mut precedences = Vec::with_capacity(match_entries.len()); + try!({ + for match_entry in &match_entries { + precedences.push(Precedence(match_entry.precedence)); + match match_entry.match_literal { + TerminalLiteral::Quoted(ref s) => { + regexs.push(re::parse_literal(&s)); + } + TerminalLiteral::Regex(ref s) => { + match re::parse_regex(&s) { + Ok(regex) => regexs.push(regex), + Err(error) => { + let literal_span = spans[&match_entry.match_literal]; + // FIXME -- take offset into account for + // span; this requires knowing how many # + // the user used, which we do not track + return_err!(literal_span, "invalid regular expression: {}", error); + } + } + } + } + } + Ok(()) + }); + + let dfa = match dfa::build_dfa(®exs, &precedences) { + Ok(dfa) => dfa, + Err(DFAConstructionError::NFAConstructionError { index, error }) => { + let feature = match error { + NamedCaptures => r#"named captures (`(?P...)`)"#, + NonGreedy => r#""non-greedy" repetitions (`*?` or `+?`)"#, + WordBoundary => r#"word boundaries (`\b` or `\B`)"#, + LineBoundary => r#"line boundaries (`^` or `$`)"#, + TextBoundary => r#"text boundaries (`^` or `$`)"#, + ByteRegex => r#"byte-based matches"#, + }; + let literal = &match_entries[index.index()].match_literal; + return_err!( + spans[literal], + "{} are not supported in regular expressions", + feature + ) + } + Err(DFAConstructionError::Ambiguity { match0, match1 }) => { + let literal0 = &match_entries[match0.index()].match_literal; + let literal1 = &match_entries[match1.index()].match_literal; + // FIXME(#88) -- it'd be nice to give an example here + return_err!( + spans[literal0], + "ambiguity detected between the terminal `{}` and the terminal `{}`", + literal0, + literal1 + ) + } + }; + + grammar.items.push(GrammarItem::InternToken(InternToken { + match_entries: match_entries, + dfa: dfa, + })); + + // we need to inject a `'input` lifetime and `input: &'input str` parameter as well: + + let input_lifetime = Atom::from(INPUT_LIFETIME); + for parameter in &grammar.type_parameters { + match *parameter { + TypeParameter::Lifetime(ref i) if *i == input_lifetime => { + return_err!( + grammar.span, + "since there is no external token enum specified, \ + the `'input` lifetime is implicit and cannot be declared" + ); + } + _ => {} + } + } + + let input_parameter = Atom::from(INPUT_PARAMETER); + for parameter in &grammar.parameters { + if parameter.name == input_parameter { + return_err!( + grammar.span, + "since there is no external token enum specified, \ + the `input` parameter is implicit and cannot be declared" + ); + } + } + + grammar + .type_parameters + .insert(0, TypeParameter::Lifetime(input_lifetime.clone())); + + let parameter = Parameter { + name: input_parameter, + ty: TypeRef::Ref { + lifetime: Some(input_lifetime), + mutable: false, + referent: Box::new(TypeRef::Id(Atom::from("str"))), + }, + }; + grammar.parameters.push(parameter); + + Ok(()) +} diff --git a/third_party/rust/lalrpop/src/normalize/token_check/test.rs b/third_party/rust/lalrpop/src/normalize/token_check/test.rs index 33d6b38f0d52..c7a729575ccb 100644 --- a/third_party/rust/lalrpop/src/normalize/token_check/test.rs +++ b/third_party/rust/lalrpop/src/normalize/token_check/test.rs @@ -1,203 +1,203 @@ -use grammar::parse_tree::Grammar; -use lexer::dfa::interpret; -use normalize::resolve::resolve; -use normalize::NormResult; -use parser; -use test_util; - -fn validate_grammar(grammar: &str) -> NormResult { - let parsed_grammar = parser::parse_grammar(&grammar).expect("parse grammar"); - let parsed_grammar = resolve(parsed_grammar).expect("resolve"); - super::validate(parsed_grammar) -} - -fn check_err(expected_err: &str, grammar: &str, span: &str) { - let err = validate_grammar(&grammar).unwrap_err(); - test_util::check_norm_err(expected_err, span, err); -} - -fn check_intern_token(grammar: &str, expected_tokens: Vec<(&'static str, &'static str)>) { - let parsed_grammar = validate_grammar(&grammar).expect("validate"); - let intern_token = parsed_grammar.intern_token().expect("intern_token"); - println!("intern_token: {:?}", intern_token); - for (input, expected_user_name) in expected_tokens { - let actual_user_name = - interpret::interpret(&intern_token.dfa, input).map(|(index, text)| { - let user_name = &intern_token.match_entries[index.index()].user_name; - (user_name.clone(), text) - }); - let actual_user_name = format!("{:?}", actual_user_name); - if expected_user_name != actual_user_name { - panic!( - "input `{}` matched `{}` but we expected `{}`", - input, actual_user_name, expected_user_name - ); - } - } -} - -#[test] -fn unknown_terminal() { - check_err( - r#"terminal `"\+"` does not have a pattern defined for it"#, - r#"grammar; extern { enum Term { } } X = X "+";"#, - r#" ~~~ "#, - ); -} - -#[test] -fn unknown_id_terminal() { - check_err( - r#"terminal `"foo"` does not have a pattern defined for it"#, - r#"grammar; extern { enum Term { } } X = X "foo";"#, - r#" ~~~~~ "#, - ); -} - -#[test] -fn tick_input_lifetime_already_declared() { - check_err( - r#".*the `'input` lifetime is implicit and cannot be declared"#, - r#"grammar<'input>; X = X "foo";"#, - r#"~~~~~~~ "#, - ); -} - -#[test] -fn input_parameter_already_declared() { - check_err( - r#".*the `input` parameter is implicit and cannot be declared"#, - r#"grammar(input:u32); X = X "foo";"#, - r#"~~~~~~~ "#, - ); -} - -#[test] -fn invalid_regular_expression_unterminated_group() { - check_err( - r#"unclosed group"#, - r#"grammar; X = X r"(123";"#, - r#" ~~~~~~~ "#, - ); -} - -#[test] -fn quoted_literals() { - check_intern_token( - r#"grammar; X = X "+" "-" "foo" "(" ")";"#, - vec![ - ("+", r#"Some(("+", "+"))"#), - ("-", r#"Some(("-", "-"))"#), - ("(", r#"Some(("(", "("))"#), - (")", r#"Some((")", ")"))"#), - ("foo", r#"Some(("foo", "foo"))"#), - ("<", r#"None"#), - ], - ); -} - -#[test] -fn regex_literals() { - check_intern_token( - r#"grammar; X = X r"[a-z]+" r"[0-9]+";"#, - vec![ - ("a", r##"Some((r#"[a-z]+"#, "a"))"##), - ("def", r##"Some((r#"[a-z]+"#, "def"))"##), - ("1", r##"Some((r#"[0-9]+"#, "1"))"##), - ("9123456", r##"Some((r#"[0-9]+"#, "9123456"))"##), - ], - ); -} - -/// Basic test for match mappings. -#[test] -fn match_mappings() { - check_intern_token( - r#"grammar; match { r"(?i)begin" => "BEGIN" } else { "abc" => ALPHA } X = "BEGIN" ALPHA;"#, - vec![ - ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), - ("begin", r##"Some(("BEGIN", "begin"))"##), - ("abc", r#"Some((ALPHA, "abc"))"#), - ], - ); -} - -/// Match mappings, exercising precedence. Here the ID regex *would* -/// be ambiguous with the begin regex. -#[test] -fn match_precedence() { - check_intern_token( - r#"grammar; match { r"(?i)begin" => "BEGIN" } else { r"\w+" => ID } X = ();"#, - vec![ - ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), - ("begin", r##"Some(("BEGIN", "begin"))"##), - ("abc", r#"Some((ID, "abc"))"#), - ], - ); -} - -/// Test that, without a `catch-all`, using unrecognized literals is an error. -#[test] -fn invalid_match_literal() { - check_err( - r#"terminal `"foo"` does not have a match mapping defined for it"#, - r#"grammar; match { r"(?i)begin" => "BEGIN" } X = "foo";"#, - r#" ~~~~~ "#, - ); -} - -/// Test that, without a `catch-all`, using unrecognized literals is an error. -#[test] -fn invalid_match_regex_literal() { - check_err( - r##"terminal `r#"foo"#` does not have a match mapping defined for it"##, - r#"grammar; match { r"(?i)begin" => "BEGIN" } X = r"foo";"#, - r#" ~~~~~~ "#, - ); -} - -/// Test that, with a catch-all, the previous two examples work. -#[test] -fn match_catch_all() { - let grammar = r#"grammar; match { r"(?i)begin" => "BEGIN", _ } X = { "foo", r"foo" };"#; - assert!(validate_grammar(&grammar).is_ok()) -} - -#[test] -fn complex_match() { - let grammar = r##" - grammar; - match { - "abc" => "ABC", - r"(?i)begin" => BEGIN - } - - pub Query: String = { - "ABC" BEGIN => String::from("Success") - }; -"##; - assert!(validate_grammar(&grammar).is_ok()) -} - -/// Test that overlapping regular expressions are still forbidden within one level -/// of a match declaration. -#[test] -fn ambiguity_within_match() { - check_err( - r##"ambiguity detected between the terminal `r#"b"#` and the terminal `r#"\(\?i\)b"#`"##, - r#"grammar; match { r"(?i)b" => "B", r"b" => "b" }"#, - r#" ~~~~~~~~~~~~ "#, - ); -} - -/// Test that using the **exact same regular expression** twice is -/// forbidden, even across multiple levels of the match expression. -/// No good reason to do that. -#[test] -fn same_literal_twice() { - check_err( - r##"multiple match entries for `r#"\(\?i\)b"#`"##, - r#"grammar; match { r"(?i)b" => "B" } else { r"(?i)b" => "b" }"#, - r#" ~~~~~~~~~~~~~~~~ "#, - ); -} +use parser; +use normalize::resolve::resolve; +use normalize::NormResult; +use lexer::dfa::interpret; +use grammar::parse_tree::Grammar; +use test_util; + +fn validate_grammar(grammar: &str) -> NormResult { + let parsed_grammar = parser::parse_grammar(&grammar).expect("parse grammar"); + let parsed_grammar = resolve(parsed_grammar).expect("resolve"); + super::validate(parsed_grammar) +} + +fn check_err(expected_err: &str, grammar: &str, span: &str) { + let err = validate_grammar(&grammar).unwrap_err(); + test_util::check_norm_err(expected_err, span, err); +} + +fn check_intern_token(grammar: &str, expected_tokens: Vec<(&'static str, &'static str)>) { + let parsed_grammar = validate_grammar(&grammar).expect("validate"); + let intern_token = parsed_grammar.intern_token().expect("intern_token"); + println!("intern_token: {:?}", intern_token); + for (input, expected_user_name) in expected_tokens { + let actual_user_name = + interpret::interpret(&intern_token.dfa, input).map(|(index, text)| { + let user_name = &intern_token.match_entries[index.index()].user_name; + (user_name.clone(), text) + }); + let actual_user_name = format!("{:?}", actual_user_name); + if expected_user_name != actual_user_name { + panic!( + "input `{}` matched `{}` but we expected `{}`", + input, actual_user_name, expected_user_name + ); + } + } +} + +#[test] +fn unknown_terminal() { + check_err( + r#"terminal `"\+"` does not have a pattern defined for it"#, + r#"grammar; extern { enum Term { } } X = X "+";"#, + r#" ~~~ "#, + ); +} + +#[test] +fn unknown_id_terminal() { + check_err( + r#"terminal `"foo"` does not have a pattern defined for it"#, + r#"grammar; extern { enum Term { } } X = X "foo";"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn tick_input_lifetime_already_declared() { + check_err( + r#".*the `'input` lifetime is implicit and cannot be declared"#, + r#"grammar<'input>; X = X "foo";"#, + r#"~~~~~~~ "#, + ); +} + +#[test] +fn input_parameter_already_declared() { + check_err( + r#".*the `input` parameter is implicit and cannot be declared"#, + r#"grammar(input:u32); X = X "foo";"#, + r#"~~~~~~~ "#, + ); +} + +#[test] +fn invalid_regular_expression_unterminated_group() { + check_err( + r#"unclosed group"#, + r#"grammar; X = X r"(123";"#, + r#" ~~~~~~~ "#, + ); +} + +#[test] +fn quoted_literals() { + check_intern_token( + r#"grammar; X = X "+" "-" "foo" "(" ")";"#, + vec![ + ("+", r#"Some(("+", "+"))"#), + ("-", r#"Some(("-", "-"))"#), + ("(", r#"Some(("(", "("))"#), + (")", r#"Some((")", ")"))"#), + ("foo", r#"Some(("foo", "foo"))"#), + ("<", r#"None"#), + ], + ); +} + +#[test] +fn regex_literals() { + check_intern_token( + r#"grammar; X = X r"[a-z]+" r"[0-9]+";"#, + vec![ + ("a", r##"Some((r#"[a-z]+"#, "a"))"##), + ("def", r##"Some((r#"[a-z]+"#, "def"))"##), + ("1", r##"Some((r#"[0-9]+"#, "1"))"##), + ("9123456", r##"Some((r#"[0-9]+"#, "9123456"))"##), + ], + ); +} + +/// Basic test for match mappings. +#[test] +fn match_mappings() { + check_intern_token( + r#"grammar; match { r"(?i)begin" => "BEGIN" } else { "abc" => ALPHA } X = "BEGIN" ALPHA;"#, + vec![ + ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), + ("begin", r##"Some(("BEGIN", "begin"))"##), + ("abc", r#"Some((ALPHA, "abc"))"#), + ], + ); +} + +/// Match mappings, exercising precedence. Here the ID regex *would* +/// be ambiguous with the begin regex. +#[test] +fn match_precedence() { + check_intern_token( + r#"grammar; match { r"(?i)begin" => "BEGIN" } else { r"\w+" => ID } X = ();"#, + vec![ + ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), + ("begin", r##"Some(("BEGIN", "begin"))"##), + ("abc", r#"Some((ID, "abc"))"#), + ], + ); +} + +/// Test that, without a `catch-all`, using unrecognized literals is an error. +#[test] +fn invalid_match_literal() { + check_err( + r#"terminal `"foo"` does not have a match mapping defined for it"#, + r#"grammar; match { r"(?i)begin" => "BEGIN" } X = "foo";"#, + r#" ~~~~~ "#, + ); +} + +/// Test that, without a `catch-all`, using unrecognized literals is an error. +#[test] +fn invalid_match_regex_literal() { + check_err( + r##"terminal `r#"foo"#` does not have a match mapping defined for it"##, + r#"grammar; match { r"(?i)begin" => "BEGIN" } X = r"foo";"#, + r#" ~~~~~~ "#, + ); +} + +/// Test that, with a catch-all, the previous two examples work. +#[test] +fn match_catch_all() { + let grammar = r#"grammar; match { r"(?i)begin" => "BEGIN", _ } X = { "foo", r"foo" };"#; + assert!(validate_grammar(&grammar).is_ok()) +} + +#[test] +fn complex_match() { + let grammar = r##" + grammar; + match { + "abc" => "ABC", + r"(?i)begin" => BEGIN + } + + pub Query: String = { + "ABC" BEGIN => String::from("Success") + }; +"##; + assert!(validate_grammar(&grammar).is_ok()) +} + +/// Test that overlapping regular expressions are still forbidden within one level +/// of a match declaration. +#[test] +fn ambiguity_within_match() { + check_err( + r##"ambiguity detected between the terminal `r#"b"#` and the terminal `r#"\(\?i\)b"#`"##, + r#"grammar; match { r"(?i)b" => "B", r"b" => "b" }"#, + r#" ~~~~~~~~~~~~ "#, + ); +} + +/// Test that using the **exact same regular expression** twice is +/// forbidden, even across multiple levels of the match expression. +/// No good reason to do that. +#[test] +fn same_literal_twice() { + check_err( + r##"multiple match entries for `r#"\(\?i\)b"#`"##, + r#"grammar; match { r"(?i)b" => "B" } else { r"(?i)b" => "b" }"#, + r#" ~~~~~~~~~~~~~~~~ "#, + ); +} diff --git a/third_party/rust/lalrpop/src/normalize/tyinfer/mod.rs b/third_party/rust/lalrpop/src/normalize/tyinfer/mod.rs index 589e10a2ee67..7af76515d0bc 100644 --- a/third_party/rust/lalrpop/src/normalize/tyinfer/mod.rs +++ b/third_party/rust/lalrpop/src/normalize/tyinfer/mod.rs @@ -1,358 +1,356 @@ -use super::norm_util::{self, AlternativeAction, Symbols}; -use super::{NormError, NormResult}; - -use grammar::consts::{ERROR, INPUT_LIFETIME, LOCATION}; -use grammar::parse_tree::{ - ActionKind, Alternative, Grammar, NonterminalData, NonterminalString, Path, Span, SymbolKind, - TypeParameter, TypeRef, -}; -use grammar::repr::{NominalTypeRepr, TypeRepr, Types}; -use std::collections::{HashMap, HashSet}; -use string_cache::DefaultAtom as Atom; - -#[cfg(test)] -mod test; - -pub fn infer_types(grammar: &Grammar) -> NormResult { - let inferencer = try!(TypeInferencer::new(&grammar)); - inferencer.infer_types() -} - -struct TypeInferencer<'grammar> { - stack: Vec, - nonterminals: HashMap>, - types: Types, - type_parameters: HashSet, -} - -#[derive(Copy, Clone)] -struct NT<'grammar> { - span: Span, - type_decl: &'grammar Option, - alternatives: &'grammar Vec, -} - -impl<'grammar> TypeInferencer<'grammar> { - fn new(grammar: &'grammar Grammar) -> NormResult> { - let types = TypeInferencer::make_types(grammar); - - let nonterminals = grammar - .items - .iter() - .filter_map(|item| item.as_nonterminal()) - .map(|data| { - assert!(!data.is_macro_def()); // normalized away by now - (data.name.clone(), NT::new(data)) - }) - .collect(); - - let type_parameters = grammar - .type_parameters - .iter() - .filter_map(|p| match *p { - TypeParameter::Lifetime(_) => None, - TypeParameter::Id(ref ty) => Some(ty.clone()), - }) - .collect(); - - Ok(TypeInferencer { - stack: vec![], - nonterminals: nonterminals, - types: types, - type_parameters: type_parameters, - }) - } - - fn make_types(grammar: &Grammar) -> Types { - let opt_extern_token = grammar.extern_token(); - - // Determine error type (if any). - let error_type = opt_extern_token.and_then(|extern_token| { - extern_token - .associated_type(Atom::from(ERROR)) - .map(|tr| tr.type_ref.type_repr()) - }); - - // Determine location type and enum type. If using an internal - // token, that's specified by us, not user. - if let Some(intern_token) = grammar.intern_token() { - let loc_type = // usize - TypeRepr::usize(); - let input_str = // &'input str - TypeRepr::Ref { - lifetime: Some(Atom::from(INPUT_LIFETIME)), - mutable: false, - referent: Box::new(TypeRepr::str()) - }; - let enum_type = // Token<'input> - TypeRepr::Nominal(NominalTypeRepr { - path: Path { - absolute: false, - ids: vec![Atom::from("Token")], - }, - types: vec![TypeRepr::Lifetime(Atom::from(INPUT_LIFETIME))] - }); - - let mut types = Types::new(&grammar.prefix, Some(loc_type), error_type, enum_type); - - for match_entry in &intern_token.match_entries { - types.add_term_type(match_entry.user_name.clone(), input_str.clone()); - } - - types - } else { - let extern_token = opt_extern_token.unwrap(); - let loc_type = extern_token - .associated_type(Atom::from(LOCATION)) - .map(|tr| tr.type_ref.type_repr()); - let enum_type = extern_token - .enum_token - .as_ref() - .unwrap() - .type_name - .type_repr(); - let mut types = Types::new(&grammar.prefix, loc_type, error_type, enum_type); - - // For each defined conversion, figure out the type of the - // terminal and enter it into `types` by hand if it is not the - // default. For terminals with custom types, the user should - // have one or more bindings in the pattern -- if more than - // one, make a tuple. - // - // e.g. "(" => Lparen(..) ==> no custom type - // "Num" => Num() ==> custom type is u32 - // "Fraction" => Real(,) ==> custom type is (u32, u32) - for conversion in grammar - .enum_token() - .into_iter() - .flat_map(|et| &et.conversions) - { - let mut tys = Vec::new(); - conversion - .to - .for_each_binding(&mut |ty| tys.push(ty.type_repr())); - if tys.is_empty() { - continue; - } - let ty = maybe_tuple(tys); - types.add_term_type(conversion.from.clone(), ty); - } - - types - } - } - - fn infer_types(mut self) -> NormResult { - let ids: Vec = - self.nonterminals.iter().map(|(id, _)| id.clone()).collect(); - - for id in ids { - try!(self.nonterminal_type(&id)); - debug_assert!(self.types.lookup_nonterminal_type(&id).is_some()); - } - - Ok(self.types) - } - - fn nonterminal_type(&mut self, id: &NonterminalString) -> NormResult { - if let Some(repr) = self.types.lookup_nonterminal_type(id) { - return Ok(repr.clone()); - } - - let nt = self.nonterminals[&id]; - if self.stack.contains(&id) { - return_err!( - nt.span, - "cannot infer type of `{}` because it references itself", - id - ); - } - - let ty = try!(self.push(id, |this| { - if let &Some(ref type_decl) = nt.type_decl { - return this.type_ref(type_decl); - } - - // Try to compute the types of all alternatives; note that - // some may result in an error. Don't report these errors - // (yet). - let mut alternative_types = vec![]; - let mut alternative_errors = vec![]; - for alt in nt.alternatives.iter() { - match this.alternative_type(alt) { - Ok(t) => alternative_types.push(t), - Err(e) => alternative_errors.push(e), - } - } - - // if it never succeeded, report first error - if alternative_types.is_empty() { - match alternative_errors.into_iter().next() { - Some(err) => { - return Err(err); - } - None => { - // if nothing succeeded, and nothing errored, - // must have been nothing to start with - return_err!( - nt.span, - "nonterminal `{}` has no alternatives and hence parse cannot succeed", - id - ); - } - } - } - - // otherwise, check that all the cases where we had success agree - for ((ty, alt), i) in alternative_types[1..] - .iter() - .zip(&nt.alternatives[1..]) - .zip(1..) - { - if &alternative_types[0] != ty { - return_err!( - alt.span, - "type of alternative #{} is `{}`, \ - but type of first alternative is `{}`", - i + 1, - ty, - alternative_types[0] - ); - } - } - - // and use that type - Ok(alternative_types.pop().unwrap()) - })); - - self.types.add_type(id.clone(), ty.clone()); - Ok(ty) - } - - fn push(&mut self, id: &NonterminalString, f: F) -> NormResult - where - F: FnOnce(&mut TypeInferencer) -> NormResult, - { - self.stack.push(id.clone()); - let r = f(self); - assert_eq!(self.stack.pop().unwrap(), *id); - r - } - - fn type_ref(&mut self, type_ref: &TypeRef) -> NormResult { - match *type_ref { - TypeRef::Tuple(ref types) => { - let types = try! { - types.iter().map(|t| self.type_ref(t)).collect() - }; - Ok(TypeRepr::Tuple(types)) - } - TypeRef::Nominal { - ref path, - ref types, - } => { - if path.ids.len() == 2 && self.type_parameters.contains(&path.ids[0]) { - return Ok(TypeRepr::Associated { - type_parameter: path.ids[0].clone(), - id: path.ids[1].clone(), - }); - } - - let types = try! { - types.iter().map(|t| self.type_ref(t)).collect() - }; - Ok(TypeRepr::Nominal(NominalTypeRepr { - path: path.clone(), - types: types, - })) - } - TypeRef::Lifetime(ref id) => Ok(TypeRepr::Lifetime(id.clone())), - TypeRef::Id(ref id) => Ok(TypeRepr::Nominal(NominalTypeRepr { - path: Path::from_id(id.clone()), - types: vec![], - })), - TypeRef::Ref { - ref lifetime, - mutable, - ref referent, - } => Ok(TypeRepr::Ref { - lifetime: lifetime.clone(), - mutable: mutable, - referent: Box::new(try!(self.type_ref(referent))), - }), - TypeRef::OfSymbol(ref symbol) => self.symbol_type(symbol), - } - } - - fn alternative_type(&mut self, alt: &Alternative) -> NormResult { - match norm_util::analyze_action(alt) { - AlternativeAction::User(&ActionKind::User(_)) - | AlternativeAction::User(&ActionKind::Fallible(_)) => { - return_err!( - alt.span, - "cannot infer types if there is custom action code" - ); - } - - AlternativeAction::User(&ActionKind::Lookahead) - | AlternativeAction::User(&ActionKind::Lookbehind) => { - Ok(self.types.opt_terminal_loc_type().unwrap().clone()) - } - - AlternativeAction::Default(Symbols::Named(ref syms)) => { - return_err!( - alt.span, - "cannot infer types in the presence of named symbols like `{}:{}`", - syms[0].1, - syms[0].2 - ); - } - - AlternativeAction::Default(Symbols::Anon(syms)) => { - let symbol_types: Vec = try! { - syms.iter() - .map(|&(_, sym)| self.symbol_type(&sym.kind)) - .collect() - }; - Ok(maybe_tuple(symbol_types)) - } - } - } - - fn symbol_type(&mut self, symbol: &SymbolKind) -> NormResult { - match *symbol { - SymbolKind::Terminal(ref id) => Ok(self.types.terminal_type(id).clone()), - SymbolKind::Nonterminal(ref id) => self.nonterminal_type(id), - SymbolKind::Choose(ref s) => self.symbol_type(&s.kind), - SymbolKind::Name(_, ref s) => self.symbol_type(&s.kind), - SymbolKind::Error => Ok(self.types.error_recovery_type().clone()), - - SymbolKind::Repeat(..) - | SymbolKind::Expr(..) - | SymbolKind::Macro(..) - | SymbolKind::AmbiguousId(..) - | SymbolKind::Lookahead - | SymbolKind::Lookbehind => { - unreachable!("symbol `{:?}` should have been expanded away", symbol) - } - } - } -} - -impl<'grammar> NT<'grammar> { - fn new(data: &'grammar NonterminalData) -> NT<'grammar> { - NT { - span: data.span, - type_decl: &data.type_decl, - alternatives: &data.alternatives, - } - } -} - -fn maybe_tuple(v: Vec) -> TypeRepr { - if v.len() == 1 { - v.into_iter().next().unwrap() - } else { - TypeRepr::Tuple(v) - } -} +use super::{NormError, NormResult}; +use super::norm_util::{self, AlternativeAction, Symbols}; + +use std::collections::{HashMap, HashSet}; +use grammar::consts::{ERROR, INPUT_LIFETIME, LOCATION}; +use grammar::parse_tree::{ActionKind, Alternative, Grammar, NonterminalData, NonterminalString, + Path, Span, SymbolKind, TypeParameter, TypeRef}; +use grammar::repr::{NominalTypeRepr, TypeRepr, Types}; +use string_cache::DefaultAtom as Atom; + +#[cfg(test)] +mod test; + +pub fn infer_types(grammar: &Grammar) -> NormResult { + let inferencer = try!(TypeInferencer::new(&grammar)); + inferencer.infer_types() +} + +struct TypeInferencer<'grammar> { + stack: Vec, + nonterminals: HashMap>, + types: Types, + type_parameters: HashSet, +} + +#[derive(Copy, Clone)] +struct NT<'grammar> { + span: Span, + type_decl: &'grammar Option, + alternatives: &'grammar Vec, +} + +impl<'grammar> TypeInferencer<'grammar> { + fn new(grammar: &'grammar Grammar) -> NormResult> { + let types = TypeInferencer::make_types(grammar); + + let nonterminals = grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .map(|data| { + assert!(!data.is_macro_def()); // normalized away by now + (data.name.clone(), NT::new(data)) + }) + .collect(); + + let type_parameters = grammar + .type_parameters + .iter() + .filter_map(|p| match *p { + TypeParameter::Lifetime(_) => None, + TypeParameter::Id(ref ty) => Some(ty.clone()), + }) + .collect(); + + Ok(TypeInferencer { + stack: vec![], + nonterminals: nonterminals, + types: types, + type_parameters: type_parameters, + }) + } + + fn make_types(grammar: &Grammar) -> Types { + let opt_extern_token = grammar.extern_token(); + + // Determine error type (if any). + let error_type = opt_extern_token.and_then(|extern_token| { + extern_token + .associated_type(Atom::from(ERROR)) + .map(|tr| tr.type_ref.type_repr()) + }); + + // Determine location type and enum type. If using an internal + // token, that's specified by us, not user. + if let Some(intern_token) = grammar.intern_token() { + let loc_type = // usize + TypeRepr::usize(); + let input_str = // &'input str + TypeRepr::Ref { + lifetime: Some(Atom::from(INPUT_LIFETIME)), + mutable: false, + referent: Box::new(TypeRepr::str()) + }; + let enum_type = // Token<'input> + TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![Atom::from("Token")], + }, + types: vec![TypeRepr::Lifetime(Atom::from(INPUT_LIFETIME))] + }); + + let mut types = Types::new(&grammar.prefix, Some(loc_type), error_type, enum_type); + + for match_entry in &intern_token.match_entries { + types.add_term_type(match_entry.user_name.clone(), input_str.clone()); + } + + types + } else { + let extern_token = opt_extern_token.unwrap(); + let loc_type = extern_token + .associated_type(Atom::from(LOCATION)) + .map(|tr| tr.type_ref.type_repr()); + let enum_type = extern_token + .enum_token + .as_ref() + .unwrap() + .type_name + .type_repr(); + let mut types = Types::new(&grammar.prefix, loc_type, error_type, enum_type); + + // For each defined conversion, figure out the type of the + // terminal and enter it into `types` by hand if it is not the + // default. For terminals with custom types, the user should + // have one or more bindings in the pattern -- if more than + // one, make a tuple. + // + // e.g. "(" => Lparen(..) ==> no custom type + // "Num" => Num() ==> custom type is u32 + // "Fraction" => Real(,) ==> custom type is (u32, u32) + for conversion in grammar + .enum_token() + .into_iter() + .flat_map(|et| &et.conversions) + { + let mut tys = Vec::new(); + conversion + .to + .for_each_binding(&mut |ty| tys.push(ty.type_repr())); + if tys.is_empty() { + continue; + } + let ty = maybe_tuple(tys); + types.add_term_type(conversion.from.clone(), ty); + } + + types + } + } + + fn infer_types(mut self) -> NormResult { + let ids: Vec = + self.nonterminals.iter().map(|(id, _)| id.clone()).collect(); + + for id in ids { + try!(self.nonterminal_type(&id)); + debug_assert!(self.types.lookup_nonterminal_type(&id).is_some()); + } + + Ok(self.types) + } + + fn nonterminal_type(&mut self, id: &NonterminalString) -> NormResult { + if let Some(repr) = self.types.lookup_nonterminal_type(id) { + return Ok(repr.clone()); + } + + let nt = self.nonterminals[&id]; + if self.stack.contains(&id) { + return_err!( + nt.span, + "cannot infer type of `{}` because it references itself", + id + ); + } + + let ty = try!(self.push(id, |this| { + if let &Some(ref type_decl) = nt.type_decl { + return this.type_ref(type_decl); + } + + // Try to compute the types of all alternatives; note that + // some may result in an error. Don't report these errors + // (yet). + let mut alternative_types = vec![]; + let mut alternative_errors = vec![]; + for alt in nt.alternatives.iter() { + match this.alternative_type(alt) { + Ok(t) => alternative_types.push(t), + Err(e) => alternative_errors.push(e), + } + } + + // if it never succeeded, report first error + if alternative_types.is_empty() { + match alternative_errors.into_iter().next() { + Some(err) => { + return Err(err); + } + None => { + // if nothing succeeded, and nothing errored, + // must have been nothing to start with + return_err!( + nt.span, + "nonterminal `{}` has no alternatives and hence parse cannot succeed", + id + ); + } + } + } + + // otherwise, check that all the cases where we had success agree + for ((ty, alt), i) in alternative_types[1..] + .iter() + .zip(&nt.alternatives[1..]) + .zip(1..) + { + if &alternative_types[0] != ty { + return_err!( + alt.span, + "type of alternative #{} is `{}`, \ + but type of first alternative is `{}`", + i + 1, + ty, + alternative_types[0] + ); + } + } + + // and use that type + Ok(alternative_types.pop().unwrap()) + })); + + self.types.add_type(id.clone(), ty.clone()); + Ok(ty) + } + + fn push(&mut self, id: &NonterminalString, f: F) -> NormResult + where + F: FnOnce(&mut TypeInferencer) -> NormResult, + { + self.stack.push(id.clone()); + let r = f(self); + assert_eq!(self.stack.pop().unwrap(), *id); + r + } + + fn type_ref(&mut self, type_ref: &TypeRef) -> NormResult { + match *type_ref { + TypeRef::Tuple(ref types) => { + let types = try! { + types.iter().map(|t| self.type_ref(t)).collect() + }; + Ok(TypeRepr::Tuple(types)) + } + TypeRef::Nominal { + ref path, + ref types, + } => { + if path.ids.len() == 2 && self.type_parameters.contains(&path.ids[0]) { + return Ok(TypeRepr::Associated { + type_parameter: path.ids[0].clone(), + id: path.ids[1].clone(), + }); + } + + let types = try! { + types.iter().map(|t| self.type_ref(t)).collect() + }; + Ok(TypeRepr::Nominal(NominalTypeRepr { + path: path.clone(), + types: types, + })) + } + TypeRef::Lifetime(ref id) => Ok(TypeRepr::Lifetime(id.clone())), + TypeRef::Id(ref id) => Ok(TypeRepr::Nominal(NominalTypeRepr { + path: Path::from_id(id.clone()), + types: vec![], + })), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => Ok(TypeRepr::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(try!(self.type_ref(referent))), + }), + TypeRef::OfSymbol(ref symbol) => self.symbol_type(symbol), + } + } + + fn alternative_type(&mut self, alt: &Alternative) -> NormResult { + match norm_util::analyze_action(alt) { + AlternativeAction::User(&ActionKind::User(_)) + | AlternativeAction::User(&ActionKind::Fallible(_)) => { + return_err!( + alt.span, + "cannot infer types if there is custom action code" + ); + } + + AlternativeAction::User(&ActionKind::Lookahead) + | AlternativeAction::User(&ActionKind::Lookbehind) => { + Ok(self.types.opt_terminal_loc_type().unwrap().clone()) + } + + AlternativeAction::Default(Symbols::Named(ref syms)) => { + return_err!( + alt.span, + "cannot infer types in the presence of named symbols like `{}:{}`", + syms[0].1, + syms[0].2 + ); + } + + AlternativeAction::Default(Symbols::Anon(syms)) => { + let symbol_types: Vec = try! { + syms.iter() + .map(|&(_, sym)| self.symbol_type(&sym.kind)) + .collect() + }; + Ok(maybe_tuple(symbol_types)) + } + } + } + + fn symbol_type(&mut self, symbol: &SymbolKind) -> NormResult { + match *symbol { + SymbolKind::Terminal(ref id) => Ok(self.types.terminal_type(id).clone()), + SymbolKind::Nonterminal(ref id) => self.nonterminal_type(id), + SymbolKind::Choose(ref s) => self.symbol_type(&s.kind), + SymbolKind::Name(_, ref s) => self.symbol_type(&s.kind), + SymbolKind::Error => Ok(self.types.error_recovery_type().clone()), + + SymbolKind::Repeat(..) + | SymbolKind::Expr(..) + | SymbolKind::Macro(..) + | SymbolKind::AmbiguousId(..) + | SymbolKind::Lookahead + | SymbolKind::Lookbehind => { + unreachable!("symbol `{:?}` should have been expanded away", symbol) + } + } + } +} + +impl<'grammar> NT<'grammar> { + fn new(data: &'grammar NonterminalData) -> NT<'grammar> { + NT { + span: data.span, + type_decl: &data.type_decl, + alternatives: &data.alternatives, + } + } +} + +fn maybe_tuple(v: Vec) -> TypeRepr { + if v.len() == 1 { + v.into_iter().next().unwrap() + } else { + TypeRepr::Tuple(v) + } +} diff --git a/third_party/rust/lalrpop/src/normalize/tyinfer/test.rs b/third_party/rust/lalrpop/src/normalize/tyinfer/test.rs index 2ec0fa27ef68..d57c1be262a8 100644 --- a/third_party/rust/lalrpop/src/normalize/tyinfer/test.rs +++ b/third_party/rust/lalrpop/src/normalize/tyinfer/test.rs @@ -1,244 +1,243 @@ -use grammar::parse_tree::NonterminalString; -use grammar::repr::TypeRepr; -use normalize::macro_expand::expand_macros; -use normalize::token_check; -use normalize::tyinfer::infer_types; -use parser; -use string_cache::DefaultAtom as Atom; - -fn type_repr(s: &str) -> TypeRepr { - let type_ref = parser::parse_type_ref(s).unwrap(); - return type_ref.type_repr(); -} - -fn compare(g1: &str, expected: Vec<(&'static str, &'static str)>) { - let grammar = parser::parse_grammar(g1).unwrap(); - let grammar = expand_macros(grammar).unwrap(); - let grammar = token_check::validate(grammar).unwrap(); - let types = infer_types(&grammar).unwrap(); - - println!("types table: {:?}", types); - - for (nt_id, nt_type) in expected { - let id = NonterminalString(Atom::from(nt_id)); - let ty = type_repr(nt_type); - println!("expected type of {:?} is {:?}", id, ty); - assert_eq!(types.nonterminal_type(&id), &ty); - } -} - -#[test] -fn test_pairs_and_tokens() { - compare( - r#" -grammar; - extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } - X = Y Z; - Y: Foo = "Hi"; - Z = "Ho"; -"#, - vec![("X", "(Foo, Tok)"), ("Y", "Foo"), ("Z", "Tok")], - ) -} - -#[test] -fn test_cycle_direct() { - let grammar = parser::parse_grammar( - r#" -grammar; - extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } - X = { - X Y, - => vec![<>] - }; - Y = "Hi"; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - assert!(infer_types(&actual).is_err()); -} - -#[test] -fn test_cycle_indirect() { - let grammar = parser::parse_grammar( - r#" -grammar; - extern { enum Tok { } } - A = B; - B = C; - C = D; - D = A; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - assert!(infer_types(&actual).is_err()); -} - -#[test] -fn test_macro_expansion() { - compare( - r#" -grammar; - extern { enum Tok { "Id" => Id(..) } } - Two: (X, X) = X X; - Ids = Two<"Id">; -"#, - vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], - ) -} - -#[test] -fn test_macro_expansion_infer() { - compare( - r#" -grammar; - extern { enum Tok { "Id" => Id(..) } } - Two = X X; - Ids = Two<"Id">; -"#, - vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], - ) -} - -#[test] -fn test_type_question() { - compare( - r#" -grammar; - extern { enum Tok { "Hi" => Hi(..) } } - X = Y?; - Y = "Hi"; -"#, - vec![("X", "::std::option::Option"), ("Y", "Tok")], - ) -} - -#[test] -fn test_star_plus_question() { - compare( - r#" -grammar; - extern { enum Tok { "Hi" => Hi(..) } } - A = Z*; - X = "Hi"*; - Y = "Hi"+; - Z = "Hi"?; -"#, - vec![ - ("A", "::std::vec::Vec<::std::option::Option>"), - ("X", "::std::vec::Vec"), - ("Y", "::std::vec::Vec"), - ("Z", "::std::option::Option"), - ], - ) -} - -#[test] -fn test_lookahead() { - compare( - r#" -grammar; - extern { type Location = usize; enum Tok { } } - A = @L; -"#, - vec![("A", "usize")], - ) -} - -#[test] -fn test_spanned_macro() { - compare( - r#" - grammar; - extern { type Location = usize; enum Tok { "Foo" => Foo(..) } } - A = Spanned<"Foo">; - Spanned = { - @L T @R - }; -"#, - vec![("A", "(usize, Tok, usize)")], - ) -} - -#[test] -fn test_action() { - compare( - r#" -grammar; - extern { enum Tok { "+" => .., "foo" => .. } } - - X = { - Y, - "+" => l + r - }; - - Y: i32 = "foo" => 22; -"#, - vec![("X", "i32"), ("Y", "i32")], - ) -} - -#[test] -fn test_inconsistent_action() { - let grammar = parser::parse_grammar( - r#" -grammar; - extern { enum Tok { "+" => .., "foo" => .., "bar" => .. } } - - X = { - Y, - Z, - "+" => l + r - }; - - Y: i32 = "foo" => 22; - - Z: u32 = "bar" => 22; -"#, - ) - .unwrap(); - - let actual = expand_macros(grammar).unwrap(); - assert!(infer_types(&actual).is_err()); -} - -#[test] -fn custom_token() { - compare( - r#" -grammar; -extern { enum Tok { N => N() } } -A = N; -"#, - vec![("A", "u32")], - ) -} - -#[test] -fn intern_token() { - compare( - r#" -grammar; - Z = @L "Ho" @R; -"#, - vec![("Z", "(usize, &'input str, usize)")], - ) -} - -#[test] -fn error() { - compare( - r#" -grammar; - Z = !; -"#, - vec![( - "Z", - "__lalrpop_util::ErrorRecovery, &'static str>", - )], - ) -} +use string_cache::DefaultAtom as Atom; +use parser; +use normalize::macro_expand::expand_macros; +use normalize::token_check; +use normalize::tyinfer::infer_types; +use grammar::parse_tree::NonterminalString; +use grammar::repr::TypeRepr; + +fn type_repr(s: &str) -> TypeRepr { + let type_ref = parser::parse_type_ref(s).unwrap(); + return type_ref.type_repr(); +} + +fn compare(g1: &str, expected: Vec<(&'static str, &'static str)>) { + let grammar = parser::parse_grammar(g1).unwrap(); + let grammar = expand_macros(grammar).unwrap(); + let grammar = token_check::validate(grammar).unwrap(); + let types = infer_types(&grammar).unwrap(); + + println!("types table: {:?}", types); + + for (nt_id, nt_type) in expected { + let id = NonterminalString(Atom::from(nt_id)); + let ty = type_repr(nt_type); + println!("expected type of {:?} is {:?}", id, ty); + assert_eq!(types.nonterminal_type(&id), &ty); + } +} + +#[test] +fn test_pairs_and_tokens() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } + X = Y Z; + Y: Foo = "Hi"; + Z = "Ho"; +"#, + vec![("X", "(Foo, Tok)"), ("Y", "Foo"), ("Z", "Tok")], + ) +} + +#[test] +fn test_cycle_direct() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } + X = { + X Y, + => vec![<>] + }; + Y = "Hi"; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn test_cycle_indirect() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { } } + A = B; + B = C; + C = D; + D = A; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn test_macro_expansion() { + compare( + r#" +grammar; + extern { enum Tok { "Id" => Id(..) } } + Two: (X, X) = X X; + Ids = Two<"Id">; +"#, + vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], + ) +} + +#[test] +fn test_macro_expansion_infer() { + compare( + r#" +grammar; + extern { enum Tok { "Id" => Id(..) } } + Two = X X; + Ids = Two<"Id">; +"#, + vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], + ) +} + +#[test] +fn test_type_question() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..) } } + X = Y?; + Y = "Hi"; +"#, + vec![("X", "::std::option::Option"), ("Y", "Tok")], + ) +} + +#[test] +fn test_star_plus_question() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..) } } + A = Z*; + X = "Hi"*; + Y = "Hi"+; + Z = "Hi"?; +"#, + vec![ + ("A", "::std::vec::Vec<::std::option::Option>"), + ("X", "::std::vec::Vec"), + ("Y", "::std::vec::Vec"), + ("Z", "::std::option::Option"), + ], + ) +} + +#[test] +fn test_lookahead() { + compare( + r#" +grammar; + extern { type Location = usize; enum Tok { } } + A = @L; +"#, + vec![("A", "usize")], + ) +} + +#[test] +fn test_spanned_macro() { + compare( + r#" + grammar; + extern { type Location = usize; enum Tok { "Foo" => Foo(..) } } + A = Spanned<"Foo">; + Spanned = { + @L T @R + }; +"#, + vec![("A", "(usize, Tok, usize)")], + ) +} + +#[test] +fn test_action() { + compare( + r#" +grammar; + extern { enum Tok { "+" => .., "foo" => .. } } + + X = { + Y, + "+" => l + r + }; + + Y: i32 = "foo" => 22; +"#, + vec![("X", "i32"), ("Y", "i32")], + ) +} + +#[test] +fn test_inconsistent_action() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { "+" => .., "foo" => .., "bar" => .. } } + + X = { + Y, + Z, + "+" => l + r + }; + + Y: i32 = "foo" => 22; + + Z: u32 = "bar" => 22; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn custom_token() { + compare( + r#" +grammar; +extern { enum Tok { N => N() } } +A = N; +"#, + vec![("A", "u32")], + ) +} + +#[test] +fn intern_token() { + compare( + r#" +grammar; + Z = @L "Ho" @R; +"#, + vec![("Z", "(usize, &'input str, usize)")], + ) +} + +#[test] +fn error() { + compare( + r#" +grammar; + Z = !; +"#, + vec![ + ( + "Z", + "__lalrpop_util::ErrorRecovery, &'static str>", + ), + ], + ) +} diff --git a/third_party/rust/lalrpop/src/parser/lrgrammar.lalrpop b/third_party/rust/lalrpop/src/parser/lrgrammar.lalrpop index 29bbe5c92d31..a1a6c3b2f1ac 100644 --- a/third_party/rust/lalrpop/src/parser/lrgrammar.lalrpop +++ b/third_party/rust/lalrpop/src/parser/lrgrammar.lalrpop @@ -4,21 +4,10 @@ use grammar::pattern::*; use std::iter::once; use tok::{self, Tok}; use util::strip; -use lalrpop_util::ParseError; - -use super::Top; grammar<'input>(text: &'input str); -pub Top: Top = { - "StartGrammar" => Top::Grammar(<>), - "StartPattern" => Top::Pattern(<>), - "StartMatchMapping" => Top::MatchMapping(<>), - "StartTypeRef" => Top::TypeRef(<>), - "StartGrammarWhereClauses" => Top::GrammarWhereClauses(<>), -}; - -Grammar: Grammar = +pub Grammar: Grammar = @@ -46,7 +35,7 @@ TypeParameter: TypeParameter = { => TypeParameter::Id(l) }; -GrammarWhereClauses: Vec> = +pub GrammarWhereClauses: Vec> = "where" >; GrammarWhereClause: WhereClause = { @@ -123,12 +112,9 @@ Nonterminal: GrammarItem = alternatives: a }) }; -AnnotationArg: (Atom, String) = - "(" "=" ")" => (name, value.into()); - Annotation: Annotation = - "#" "[" "]" => { - Annotation { id_span: Span(lo, hi), id, arg } + "#" "[" "]" => { + Annotation { id_span: Span(lo, hi), id: id } }; NonterminalName: (NonterminalString, Vec) = { @@ -236,7 +222,7 @@ SymbolKind1: SymbolKind = { SymbolKind::Error, }; -TypeRef: TypeRef = { +pub TypeRef: TypeRef = { "(" > ")" => TypeRef::Tuple(<>), @@ -309,7 +295,7 @@ MatchItem: MatchItem = { MatchSymbol = QuotedLiteral; -MatchMapping = Terminal; +pub MatchMapping = Terminal; EnumToken: EnumToken = "enum" "{" @@ -337,7 +323,7 @@ Conversion: Conversion = to: pattern }) }; -Pattern: Pattern = +pub Pattern: Pattern = => Pattern { span: Span(lo, hi), kind: k }; PatternKind: PatternKind = { @@ -408,11 +394,7 @@ QuotedLiteral: TerminalLiteral = { }; StringLiteral: Atom = - =>? { - let text = tok::apply_string_escapes(s, lo + 1) - .map_err(|e| ParseError::User { error: e })?; - Ok(Atom::from(text)) - }; + => Atom::from(s); RegexLiteral: Atom = => Atom::from(s); @@ -482,11 +464,5 @@ extern { "*" => Tok::Star, "~~" => Tok::TildeTilde, "_" => Tok::Underscore, - - "StartGrammar" => Tok::StartGrammar, - "StartPattern" => Tok::StartPattern, - "StartMatchMapping" => Tok::StartMatchMapping, - "StartTypeRef" => Tok::StartTypeRef, - "StartGrammarWhereClauses" => Tok::StartGrammarWhereClauses, } } diff --git a/third_party/rust/lalrpop/src/parser/lrgrammar.rs b/third_party/rust/lalrpop/src/parser/lrgrammar.rs deleted file mode 100644 index a33205db83bd..000000000000 --- a/third_party/rust/lalrpop/src/parser/lrgrammar.rs +++ /dev/null @@ -1,34834 +0,0 @@ -// auto-generated: "lalrpop 0.16.2" -// sha256: ff8e66bf9bffcc39fd4d5baa2fca2d43c14f758db82e5c6ea620a3edf8dccc74 -use string_cache::DefaultAtom as Atom; -use grammar::parse_tree::*; -use grammar::pattern::*; -use std::iter::once; -use tok::{self, Tok}; -use util::strip; -use lalrpop_util::ParseError; -use super::Top; -#[allow(unused_extern_crates)] -extern crate lalrpop_util as ___lalrpop_util; - -#[cfg_attr(rustfmt, rustfmt_skip)] -mod ___parse___Top { -#![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] - -use string_cache::DefaultAtom as Atom; -use grammar::parse_tree::*; -use grammar::pattern::*; -use std::iter::once; -use tok::{self, Tok}; -use util::strip; -use lalrpop_util::ParseError; -use super::super::Top; -#[allow(unused_extern_crates)] -extern crate lalrpop_util as ___lalrpop_util; -use super::___ToTriple; -#[allow(dead_code)] -pub enum ___Symbol<'input> - { -Variant0(Tok<'input>), -Variant1(&'input str), -Variant2(::std::option::Option>), -Variant3(TypeRef), -Variant4(::std::option::Option), -Variant5(Vec>), -Variant6(::std::option::Option>>), -Variant7(Condition), -Variant8(::std::option::Option), -Variant9(()), -Variant10(Alternative), -Variant11(::std::vec::Vec), -Variant12(Conversion), -Variant13(::std::vec::Vec), -Variant14(FieldPattern), -Variant15(::std::vec::Vec>), -Variant16(Parameter), -Variant17(::std::vec::Vec), -Variant18(WhereClause), -Variant19(::std::vec::Vec>), -Variant20(Atom), -Variant21(::std::vec::Vec), -Variant22(MatchItem), -Variant23(::std::vec::Vec), -Variant24(NonterminalString), -Variant25(::std::vec::Vec), -Variant26(Pattern), -Variant27(::std::vec::Vec>), -Variant28(Symbol), -Variant29(::std::vec::Vec), -Variant30(TypeBound), -Variant31(::std::vec::Vec>), -Variant32(TypeBoundParameter), -Variant33(::std::vec::Vec>), -Variant34(TypeParameter), -Variant35(::std::vec::Vec), -Variant36(::std::vec::Vec), -Variant37(usize), -Variant38(ActionKind), -Variant39(::std::option::Option), -Variant40(::std::option::Option), -Variant41(Vec), -Variant42(Annotation), -Variant43(::std::vec::Vec), -Variant44((Atom, String)), -Variant45(::std::option::Option<(Atom, String)>), -Variant46(AssociatedType), -Variant47(::std::vec::Vec), -Variant48(Vec), -Variant49(Vec), -Variant50(Vec>), -Variant51(Vec), -Variant52(Vec), -Variant53(Vec), -Variant54(Vec>), -Variant55(Vec), -Variant56(Vec), -Variant57(Vec), -Variant58(ConditionOp), -Variant59(::std::option::Option), -Variant60(EnumToken), -Variant61(ExprSymbol), -Variant62(GrammarItem), -Variant63(::std::option::Option>), -Variant64(::std::option::Option>), -Variant65(Grammar), -Variant66(::std::vec::Vec), -Variant67(::std::option::Option), -Variant68(::std::option::Option>), -Variant69(::std::option::Option>), -Variant70(::std::option::Option>), -Variant71(::std::option::Option>>), -Variant72(::std::option::Option), -Variant73(MatchContents), -Variant74(::std::option::Option), -Variant75(TerminalString), -Variant76(TerminalLiteral), -Variant77(MatchToken), -Variant78((NonterminalString, Vec)), -Variant79(::std::option::Option), -Variant80(Path), -Variant81(::std::option::Option>), -Variant82(PatternKind), -Variant83(Vec>), -Variant84(RepeatOp), -Variant85(String), -Variant86(::std::vec::Vec), -Variant87(::std::option::Option), -Variant88(SymbolKind), -Variant89(Top), -Variant90(::std::option::Option>), -Variant91(::std::option::Option>), -Variant92(::std::option::Option), -Variant93(Visibility), -} -const ___ACTION: &'static [i16] = &[ -// State 0 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 1 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 2 -0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,18,0,0,0,0, -// State 3 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 4 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 5 -0,0,0,0,0,0,35,0,0,0,0,0,36,0,37,0,38,0,0,0,0,0,0,0,0,0,0,39,0,40,0,41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 6 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 7 -0,0,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-128,-128,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-128,0,0,0,-128,0,0,0,0,0,0, -// State 8 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0, -// State 9 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 10 -0,0,0,-432,-432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-432,0,0,0,0,0,-432,0,0,0,0, -// State 11 -0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,0,18,0,0,0,0, -// State 12 -0,0,0,-500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-500,0,0,0,0,0,-500,0,0,0,0, -// State 13 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,18,0,0,0,0, -// State 14 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 15 -0,0,0,-429,-429,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-429,0,0,0,0,0,-429,0,0,0,0, -// State 16 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,62,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 17 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 18 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 19 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,-151,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0, -// State 20 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 21 --424,0,0,-424,0,0,-424,-424,-424,-424,-424,0,0,0,0,-424,-424,0,0,-424,-424,-424,-424,-424,-424,-424,-424,0,-424,-424,0,-424,-424,0,0,0,0,0,-424,0,0,0,0,0,0,0,0,-424,0,0,0,0,0,0,0,-424,0, -// State 22 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 23 --423,0,0,-423,0,0,-423,-423,-423,-423,-423,0,0,0,0,-423,-423,0,0,-423,-423,-423,-423,-423,-423,-423,-423,0,-423,-423,0,-423,-423,0,0,0,0,0,-423,0,0,0,0,0,0,0,0,-423,0,0,0,0,0,0,0,-423,0, -// State 24 --422,0,0,-422,0,0,-422,-422,-422,-422,-422,0,0,0,0,-422,-422,0,0,-422,-422,-422,-422,-422,-422,-422,-422,0,-422,-422,0,-422,-422,0,0,0,0,0,-422,0,0,0,0,0,0,0,0,-422,0,0,0,0,0,0,0,-422,0, -// State 25 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 26 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 27 --425,0,0,-425,0,0,-425,-425,-425,-425,-425,0,0,0,0,-425,-425,0,0,-425,-425,-425,-425,-425,-425,-425,-425,0,-425,-425,0,-425,-425,0,0,0,0,0,-425,0,0,0,0,0,0,0,0,-425,0,0,0,0,0,0,0,-425,0, -// State 28 --434,0,0,-434,0,0,-434,-434,-434,-434,-434,0,0,0,0,-434,-434,0,0,-434,-434,-434,-434,-434,-434,-434,-434,0,-434,-434,0,-434,-434,0,0,0,0,0,-434,0,0,0,0,0,0,0,0,-434,0,0,0,0,0,0,0,-434,0, -// State 29 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 30 -0,0,0,0,0,0,-396,-396,0,-396,-396,0,0,-396,74,-396,-396,-396,0,0,0,0,0,-396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-396,-396,0, -// State 31 -0,0,0,0,0,0,75,-413,0,0,-413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,-413,0, -// State 32 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 33 -0,0,0,0,0,0,0,-398,0,0,-398,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-398,0, -// State 34 -0,0,0,0,0,0,35,-167,0,0,0,0,36,0,37,0,38,0,0,0,0,0,0,0,0,0,0,39,0,40,0,41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 35 -0,0,0,0,0,0,0,-409,0,0,-409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-409,0, -// State 36 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 37 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 38 -0,0,0,0,0,0,0,-412,0,0,-412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-412,0, -// State 39 -0,0,0,0,0,0,-367,-367,0,-367,-367,0,0,-367,-367,-367,-367,-367,0,0,0,0,0,-367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-367,0,0,0,0,0,0,0,0,0,0,0,0,0,-367,-367,0, -// State 40 -0,0,0,0,0,0,-368,-368,0,-368,-368,0,0,-368,-368,-368,-368,-368,0,0,0,0,0,-368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-368,0,0,0,0,0,0,0,0,0,0,0,0,0,-368,-368,0, -// State 41 -0,0,0,0,0,0,0,-408,0,0,-408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-408,0, -// State 42 -0,0,0,0,0,0,0,-490,0,-490,-490,0,0,-490,0,-490,83,-490,0,0,0,0,0,-490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-490,0,0, -// State 43 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 44 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 45 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0, -// State 46 -0,0,0,45,0,46,47,-183,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 47 -0,0,0,-129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-129,-129,0,-129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-129,0,0,0,-129,0,0,0,0,0,0, -// State 48 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,108,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 49 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0, -// State 50 -0,0,0,-433,-433,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-433,0,0,0,0,0,-433,0,0,0,0, -// State 51 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,0,0,18,0,0,0,0, -// State 52 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,115,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 53 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,0, -// State 54 -0,0,0,-501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-501,0,0,0,0,0,-501,0,0,0,0, -// State 55 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,120,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 56 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 57 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 58 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 59 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 60 -0,0,0,0,0,0,0,-147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 61 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 62 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-179,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 63 -0,0,0,-497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-497,-497,0,-497,0,0,0,0,0,0,0,0,0,0,0,0,-497,0,-497,0,-497,0,-497,0,-497,0,0,0,0, -// State 64 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,-153,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0, -// State 65 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-364,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 66 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 67 -0,0,0,0,0,0,0,0,0,0,151,0,0,0,0,-150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 68 -0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 69 -0,0,0,0,0,0,0,0,0,0,0,0,0,153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 70 -0,0,0,-369,0,-369,-369,0,0,-369,-369,0,0,-369,-369,-369,0,0,0,0,0,0,0,-369,0,0,0,0,0,-369,0,-369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-369,0,0,0,0,0,0,0, -// State 71 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 72 -0,0,0,0,0,0,-397,-397,0,-397,-397,0,0,-397,155,-397,-397,-397,0,0,0,0,0,-397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-397,-397,0, -// State 73 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-48,0,-48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 74 -0,0,0,0,0,0,35,-167,0,0,0,0,36,0,37,0,38,0,0,0,0,0,0,0,0,0,0,39,0,40,0,41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 75 -0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,0, -// State 76 -0,0,0,0,0,0,35,-169,0,0,0,0,36,0,37,0,38,0,0,0,0,0,0,0,0,0,0,39,0,40,0,41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 77 -0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 78 -0,0,0,0,0,0,0,-166,0,0,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 79 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 80 -0,0,0,0,0,0,-394,-394,0,-394,-394,0,0,-394,74,-394,-394,-394,0,0,0,0,0,-394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-394,-394,0, -// State 81 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 82 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,-187,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 83 --450,0,0,-450,0,0,-450,-450,-450,-450,-450,0,0,0,0,-450,-450,0,0,-450,-450,-450,-450,-450,-450,-450,-450,0,-450,-450,0,-450,-450,0,0,0,0,0,-450,0,0,0,0,0,0,0,0,-450,0,0,0,0,0,0,0,-450,0, -// State 84 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 85 --448,0,0,-448,0,0,-448,-448,-448,-448,-448,0,0,0,0,-448,-448,0,0,-448,-448,-448,-448,-448,-448,-448,-448,0,-448,-448,0,-448,-448,0,0,0,0,0,-448,0,0,0,0,0,0,0,0,-448,0,0,0,0,0,0,0,-448,0, -// State 86 -0,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 87 --437,0,0,-437,0,0,-437,-437,175,176,-437,0,0,0,0,-437,-437,0,0,-437,-437,-437,-437,-437,177,-437,-437,0,-437,-437,0,-437,-437,0,0,0,0,0,-437,0,0,0,0,0,0,0,0,-437,0,0,0,0,0,0,0,-437,0, -// State 88 --442,0,0,-442,0,0,-442,-442,-442,-442,-442,0,0,0,0,-442,-442,0,0,-442,-442,-442,-442,-442,-442,-442,-442,0,-442,-442,0,-442,-442,0,0,0,0,0,-442,0,0,0,0,0,0,0,0,-442,0,0,0,0,0,0,0,-442,0, -// State 89 --444,0,0,-444,0,0,-444,-444,-444,-444,-444,0,0,0,0,-444,-444,0,0,-444,-444,-444,-444,-444,-444,-444,-444,0,-444,-444,0,-444,-444,0,0,0,0,0,-444,0,0,0,0,0,0,0,0,-444,0,0,0,0,0,0,0,-444,0, -// State 90 --454,0,0,-454,0,0,-454,-454,-454,-454,-454,0,0,0,0,-454,-454,0,0,-454,-454,-454,-454,-454,-454,-454,-454,0,-454,-454,0,-454,-454,0,0,0,0,0,-454,0,0,0,0,0,0,0,0,-454,0,0,0,0,0,0,0,-454,0, -// State 91 -91,0,0,0,0,0,92,-200,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 92 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,95,0,96,183,0,184,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 93 --452,0,0,-452,0,0,-452,-452,-452,-452,-452,0,0,0,0,-452,-452,0,0,-452,-452,-452,-452,-452,-452,-452,-452,0,-452,-452,0,-452,-452,0,0,0,0,0,-452,0,0,0,0,0,0,0,0,-452,0,0,0,0,0,0,0,-452,0, -// State 94 --453,0,0,-453,0,0,-453,-453,-453,-453,-453,0,0,0,0,-453,-453,0,0,-453,-453,-453,-453,-453,-453,-453,-453,0,-453,-453,0,-453,-453,0,0,0,0,0,-453,0,0,0,0,0,0,0,0,-453,0,0,0,0,0,0,0,-453,0, -// State 95 --199,0,0,-199,0,0,-199,-199,-199,-199,-199,0,0,0,0,-199,-199,0,0,-199,-199,-199,-199,-199,-199,-199,-199,0,-199,-199,0,-199,-199,0,0,0,0,0,-199,0,0,0,0,0,0,0,0,-199,0,0,0,0,0,0,0,-199,0, -// State 96 --449,0,0,-449,0,0,-449,-449,-449,-449,-449,0,0,0,0,-449,-449,0,0,-449,-449,-449,-449,-449,-449,-449,-449,0,-449,-449,0,-449,-449,0,0,0,0,0,-449,0,0,0,0,0,0,0,0,-449,0,0,0,0,0,0,0,-449,0, -// State 97 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 98 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0, -// State 99 -0,0,0,0,0,0,0,-488,0,-488,-488,0,0,-488,0,-488,0,-488,0,0,0,0,0,-488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-488,0,0, -// State 100 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 101 -0,0,0,45,0,46,47,-185,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 102 -0,0,0,0,0,0,0,189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 103 -0,0,0,0,0,0,0,-182,0,0,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 104 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 105 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 106 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 107 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 108 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,201,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 109 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,0,0,0, -// State 110 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,206,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 111 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 112 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 113 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 114 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 115 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,217,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 116 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 117 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 118 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 119 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 120 -0,0,0,0,0,0,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 121 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 122 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 123 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 124 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 125 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 126 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 127 -0,0,0,0,0,0,0,-149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 128 -0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 129 -0,0,0,0,0,0,0,-146,0,0,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 130 -0,0,0,0,0,0,0,0,0,0,0,0,0,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 131 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0,0,0,0,0, -// State 132 -0,0,0,-344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-344,-344,0,-344,0,0,0,0,0,0,0,0,0,0,0,0,-344,0,0,0,-344,0,-344,0,-344,0,0,0,0, -// State 133 -0,0,0,-348,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-348,-348,0,-348,0,0,0,0,0,0,0,0,0,0,0,0,-348,0,0,0,-348,0,-348,0,-348,0,0,0,0, -// State 134 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 135 -0,0,0,-343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-343,-343,0,-343,0,0,0,0,0,0,0,0,0,0,0,0,-343,0,0,0,-343,0,-343,0,-343,0,0,0,0, -// State 136 -0,0,0,-381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-381,-381,0,-381,0,0,0,0,0,0,0,0,0,0,241,0,-381,0,0,0,-381,0,-381,0,-381,0,0,0,0, -// State 137 -0,0,0,-345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-345,-345,0,-345,0,0,0,0,0,0,0,0,0,0,0,0,-345,0,0,0,-345,0,-345,0,-345,0,0,0,0, -// State 138 -0,0,0,-342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-342,-342,0,-342,0,0,0,0,0,0,0,0,0,0,0,0,-342,0,0,0,-342,0,-342,0,-342,0,0,0,0, -// State 139 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,246,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 140 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,0,0, -// State 141 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0, -// State 142 -0,0,0,0,0,0,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-503,-503,0,-503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 143 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-181,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 144 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 145 -0,0,0,0,0,0,0,0,0,0,-480,0,0,0,0,0,0,0,0,0,0,0,0,-480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 146 -0,0,0,0,0,0,0,0,0,0,-479,0,0,0,0,0,0,0,0,0,0,0,0,-479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 147 -0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,0,0,0,0,0,-178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 148 -0,0,0,0,0,0,0,0,0,0,253,0,0,0,0,-152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 149 -0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 150 -0,0,0,-43,0,-43,-43,0,0,0,0,0,0,0,-43,-43,0,0,0,0,0,0,0,0,0,0,0,0,0,-43,-43,-43,0,0,0,0,0,0,0,0,0,0,0,0,0,-43,0,0,0,0,0,0,0,0,0,0,0, -// State 151 -0,0,0,0,0,0,0,0,0,0,-415,0,0,0,0,-415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 152 -0,0,0,0,0,0,0,0,0,0,-419,0,0,0,37,-419,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0, -// State 153 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-155,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 154 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-49,0,-49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 155 -0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 156 -0,0,0,0,0,0,0,0,0,0,0,0,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,271,0, -// State 157 -0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273,0, -// State 158 -0,0,0,0,0,0,0,0,0,0,0,0,0,274,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 159 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,275,0, -// State 160 -0,0,0,0,0,0,0,-403,0,0,-403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-403,0, -// State 161 -0,0,0,0,0,0,0,-168,0,0,276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 162 -0,0,0,0,0,0,0,-411,0,0,-411,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-411,0, -// State 163 -0,0,0,0,0,0,-73,-73,0,0,0,0,-73,0,-73,0,-73,0,0,0,0,0,0,0,0,0,0,-73,0,-73,0,-73,0,0,0,0,0,0,0,0,0,-73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 164 -0,0,0,0,0,0,-395,-395,0,-395,-395,0,0,-395,155,-395,-395,-395,0,0,0,0,0,-395,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-395,-395,0, -// State 165 -0,0,0,0,0,0,0,-410,0,0,-410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-410,0, -// State 166 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,-189,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 167 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 168 -0,0,0,0,0,0,0,0,0,0,-494,0,0,0,0,0,0,0,0,0,0,0,0,-494,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 169 -0,0,0,0,0,0,0,0,0,0,-493,0,0,0,0,0,0,0,0,0,0,0,0,-493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 170 -0,0,0,0,0,0,0,0,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,-186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 171 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,-171,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 172 -0,0,0,0,0,0,0,-484,0,-484,-484,0,0,-484,0,-484,0,-484,0,0,0,0,0,-484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-484,0,0, -// State 173 --443,0,0,-443,0,0,-443,-443,-443,-443,-443,0,0,0,0,-443,-443,0,0,-443,-443,-443,-443,-443,-443,-443,-443,0,-443,-443,0,-443,-443,0,0,0,0,0,-443,0,0,0,0,0,0,0,0,-443,0,0,0,0,0,0,0,-443,0, -// State 174 --427,0,0,-427,0,0,-427,-427,-427,-427,-427,0,0,0,0,-427,-427,0,0,-427,-427,-427,-427,-427,-427,-427,-427,0,-427,-427,0,-427,-427,0,0,0,0,0,-427,0,0,0,0,0,0,0,0,-427,0,0,0,0,0,0,0,-427,0, -// State 175 --426,0,0,-426,0,0,-426,-426,-426,-426,-426,0,0,0,0,-426,-426,0,0,-426,-426,-426,-426,-426,-426,-426,-426,0,-426,-426,0,-426,-426,0,0,0,0,0,-426,0,0,0,0,0,0,0,0,-426,0,0,0,0,0,0,0,-426,0, -// State 176 --428,0,0,-428,0,0,-428,-428,-428,-428,-428,0,0,0,0,-428,-428,0,0,-428,-428,-428,-428,-428,-428,-428,-428,0,-428,-428,0,-428,-428,0,0,0,0,0,-428,0,0,0,0,0,0,0,0,-428,0,0,0,0,0,0,0,-428,0, -// State 177 -0,0,0,0,0,0,0,283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 178 --440,0,0,0,0,0,-440,-440,0,0,-440,0,0,0,0,-440,-440,0,0,-440,-440,-440,-440,0,0,-440,-440,0,-440,-440,0,-440,-440,0,0,0,0,0,-440,0,0,0,0,0,0,0,0,-440,0,0,0,0,0,0,0,-440,0, -// State 179 -91,0,0,0,0,0,92,-201,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 180 -0,0,0,0,0,0,0,0,0,0,0,0,0,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 181 -0,0,0,0,0,0,0,0,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,286,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 182 -0,0,0,0,0,0,0,0,-449,-449,0,0,0,-367,0,0,0,0,0,0,0,0,0,-449,-449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 183 -0,0,0,0,0,0,0,0,0,0,0,0,0,-368,0,0,-372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 184 -0,0,0,0,0,0,0,-487,0,-487,-487,0,0,-487,0,-487,0,-487,0,0,0,0,0,-487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-487,0,0, -// State 185 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 186 -0,0,0,0,0,0,0,-486,0,-486,-486,0,0,-486,0,-486,0,-486,0,0,0,0,0,-486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-486,0,0, -// State 187 -0,0,0,0,0,0,0,-184,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 188 -0,0,0,0,0,0,0,-483,0,-483,-483,0,0,-483,0,-483,0,-483,0,0,0,0,0,-483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-483,0,0, -// State 189 -0,0,0,-98,0,-98,-98,-98,0,0,0,0,0,0,-98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-98,0,-98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 190 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 191 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 192 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 193 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 194 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 195 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 196 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 197 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 198 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 199 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 200 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 201 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,306,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 202 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 203 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 204 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 205 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 206 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 207 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 208 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 209 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 210 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 211 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 212 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 213 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 214 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,325,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 215 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 216 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 217 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 218 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 219 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,331,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 220 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,332,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 221 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 222 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 223 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 224 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 225 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 226 -0,0,0,-125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-125,-125,0,-125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-125,0,0,0,-125,0,0,0,0,0,0, -// State 227 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 228 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 229 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 230 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 231 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 232 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 233 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 234 -0,0,0,0,0,0,0,-148,0,0,341,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 235 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-353,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-353,0,0,0, -// State 236 -0,0,0,0,0,0,0,-38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-38,0,-38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 237 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 238 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,246,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 239 -0,0,0,-349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-349,-349,0,-349,0,0,0,0,0,0,0,0,0,0,0,0,-349,0,0,0,-349,0,-349,0,-349,0,0,0,0, -// State 240 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344,0,0, -// State 241 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 242 -0,0,0,0,0,0,0,0,0,0,0,0,0,346,0,0,0,347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 243 -0,0,0,0,0,0,0,0,0,0,0,0,0,-389,0,0,0,-389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 244 -0,0,0,0,0,0,0,0,0,0,0,0,0,-390,0,0,0,-390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 245 -0,-391,-391,0,0,0,0,0,0,0,-391,0,0,-391,0,0,0,-391,-391,0,0,0,0,-391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-391, -// State 246 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,352,0,0,0,353,0, -// State 247 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,29,0,0,360,0,0,0,0,0,0,0,0,0,0,0,0,0,-159,0, -// State 248 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 249 -0,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,-180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 250 -0,0,0,0,0,0,-356,0,0,0,0,0,0,0,0,-356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-356,0,0,0, -// State 251 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-93,0,0,0,0,0,-93,-93,-93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 252 -0,0,0,-44,0,-44,-44,0,0,0,0,0,0,0,-44,-44,0,0,0,0,0,0,0,0,0,0,0,0,0,-44,-44,-44,0,0,0,0,0,0,0,0,0,0,0,0,0,-44,0,0,0,0,0,0,0,0,0,0,0, -// State 253 -0,0,0,0,0,0,0,0,0,0,-419,0,0,0,37,-419,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0, -// State 254 -0,0,0,0,0,0,0,0,0,0,-417,0,0,0,0,-417,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 255 -0,0,0,0,0,0,0,0,0,365,-414,0,0,0,0,-414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 256 -0,0,0,0,0,0,0,0,0,0,-359,0,0,0,0,-359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 257 -0,0,0,0,0,0,0,0,0,0,-421,0,0,0,37,-421,0,0,0,0,0,0,0,0,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0, -// State 258 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 259 -0,0,0,0,0,0,0,0,0,-462,-462,0,0,0,0,-462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 260 -0,0,0,0,0,0,368,0,0,-470,-470,0,0,0,0,-470,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 261 -0,0,0,0,0,0,0,0,0,0,-478,0,0,0,0,-478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 262 -0,0,0,0,0,0,0,0,0,370,-418,0,0,0,0,-418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 263 -0,0,0,0,0,0,0,0,0,0,-361,0,0,0,0,-361,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 264 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-157,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 265 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 266 -0,0,0,0,0,0,0,0,0,0,373,0,0,0,0,0,0,0,0,0,0,0,0,-154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 267 -0,0,0,0,0,0,0,-401,0,0,-401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-401,0, -// State 268 -0,0,0,0,0,0,0,0,0,0,374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,375,0, -// State 269 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,376,0, -// State 270 -0,0,0,0,0,0,0,-405,0,0,-405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-405,0, -// State 271 -0,0,0,0,0,0,0,0,0,0,0,0,-33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-33,0,-33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-33,0, -// State 272 -0,0,0,0,0,0,0,-402,0,0,-402,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-402,0, -// State 273 -0,0,0,0,0,0,35,0,0,0,0,0,36,0,37,0,38,0,0,0,0,0,0,0,0,0,0,39,0,40,0,41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 274 -0,0,0,0,0,0,0,-406,0,0,-406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-406,0, -// State 275 -0,0,0,0,0,0,-74,-74,0,0,0,0,-74,0,-74,0,-74,0,0,0,0,0,0,0,0,0,0,-74,0,-74,0,-74,0,0,0,0,0,0,0,0,0,-74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 276 -0,0,0,0,0,0,0,0,0,0,378,0,0,0,0,0,0,0,0,0,0,0,0,-188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 277 -0,0,0,0,0,0,0,-489,0,-489,-489,0,0,-489,0,-489,0,-489,0,0,0,0,0,-489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-489,0,0, -// State 278 -0,0,0,-103,0,-103,-103,0,0,0,0,0,0,0,-103,0,0,0,0,0,0,0,0,-103,0,0,0,0,0,-103,-103,-103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 279 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,-173,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 280 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,380,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 281 -0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,0,0,0,0,0,-170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 282 --451,0,0,-451,0,0,-451,-451,-451,-451,-451,0,0,0,0,-451,-451,0,0,-451,-451,-451,-451,-451,-451,-451,-451,0,-451,-451,0,-451,-451,0,0,0,0,0,-451,0,0,0,0,0,0,0,0,-451,0,0,0,0,0,0,0,-451,0, -// State 283 --441,0,0,0,0,0,-441,-441,0,0,-441,0,0,0,0,-441,-441,0,0,-441,-441,-441,-441,0,0,-441,-441,0,-441,-441,0,-441,-441,0,0,0,0,0,-441,0,0,0,0,0,0,0,0,-441,0,0,0,0,0,0,0,-441,0, -// State 284 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 285 --436,0,0,-436,0,0,-436,-436,0,0,-436,0,0,0,0,-436,-436,0,0,-436,-436,-436,-436,-436,0,-436,-436,0,-436,-436,0,-436,-436,0,0,0,0,0,-436,0,0,0,0,0,0,0,0,-436,0,0,0,0,0,0,0,-436,0, -// State 286 -0,0,0,0,0,0,0,-485,0,-485,-485,0,0,-485,0,-485,0,-485,0,0,0,0,0,-485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-485,0,0, -// State 287 -0,0,0,-99,0,-99,-99,-99,0,0,0,0,0,0,-99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-99,0,-99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 288 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 289 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 290 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 291 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 292 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 293 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 294 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 295 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 296 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 297 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 298 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 299 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 300 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 301 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 302 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,395,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 303 -0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,398,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 304 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 305 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 306 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 307 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 308 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 309 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 310 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 311 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 312 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 313 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 314 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 315 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 316 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 317 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 318 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 319 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 320 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 321 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 322 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 323 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 324 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 325 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 326 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 327 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 328 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 329 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 330 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 331 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 332 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 333 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 334 -0,0,0,-124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-124,-124,0,-124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-124,0,0,0,-124,0,0,0,0,0,0, -// State 335 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,423,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 336 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 337 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 338 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 339 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 340 -0,0,0,0,0,0,0,-39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,-39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 341 -0,0,0,0,0,0,0,-350,0,0,-350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 342 -0,0,0,0,0,0,0,0,0,0,0,0,0,425,0,0,0,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 343 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,29,0,0,360,0,0,0,0,0,0,0,0,0,0,0,0,0,-159,0, -// State 344 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-163,0,0,0,0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 345 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 346 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,441,0,0, -// State 347 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-136,0,0,0,0,0,0,0,-136,0,0,0,-136,0, -// State 348 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,352,0,0,0,444,0, -// State 349 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352,0,0,0,446,0, -// State 350 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 351 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 352 -0,0,0,-206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-206,-206,0,-206,0,0,0,0,0,0,0,0,0,0,0,0,-206,0,0,0,-206,0,-206,0,-206,0,0,0,0, -// State 353 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,29,0,0,360,0,0,0,0,0,0,0,0,0,0,0,0,0,-161,0, -// State 354 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-373,0, -// State 355 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450,0, -// State 356 -0,0,0,0,0,0,0,0,0,0,451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-158,0, -// State 357 -0,0,0,0,0,0,0,0,0,0,-375,0,0,0,0,0,0,0,0,452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-375,0, -// State 358 -0,0,0,0,0,0,0,0,0,0,-380,0,0,0,0,0,0,0,0,-380,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-380,0, -// State 359 -0,0,0,0,0,0,0,0,0,0,-374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-374,0, -// State 360 -0,0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 361 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-94,0,0,0,0,0,-94,-94,-94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 362 -0,0,0,0,0,0,0,0,0,0,-360,0,0,0,0,-360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 363 -0,0,0,0,0,0,0,0,0,454,-416,0,0,0,0,-416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 364 -0,0,0,0,0,0,0,0,0,0,-53,0,0,0,0,-53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 365 -0,0,0,0,0,0,0,0,0,455,-420,0,0,0,0,-420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 366 -0,0,0,0,0,0,456,0,0,-469,-469,0,0,0,0,-469,457,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 367 -0,0,0,45,0,46,47,-183,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 368 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,-175,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 369 -0,0,0,0,0,0,0,0,0,0,-83,0,0,0,-83,-83,0,0,0,0,0,0,0,0,0,0,0,0,0,-83,-83,-83,0,0,0,0,0,0,0,0,0,0,0,0,0,-83,0,0,0,0,0,0,0,0,0,0,0, -// State 370 -0,0,0,0,0,0,0,0,0,0,465,0,0,0,0,0,0,0,0,0,0,0,0,-156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 371 -0,0,0,-211,0,-211,-211,0,0,0,0,0,0,0,-211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-211,0,-211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 372 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-58,0,0,0,0,0,0,-58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 373 -0,0,0,0,0,0,0,0,0,0,0,0,-34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-34,0,-34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-34,0, -// State 374 -0,0,0,0,0,0,0,-404,0,0,-404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-404,0, -// State 375 -0,0,0,0,0,0,0,-407,0,0,-407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-407,0, -// State 376 -0,0,0,0,0,0,0,0,0,0,-208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-208,0, -// State 377 -0,0,0,-104,0,-104,-104,0,0,0,0,0,0,0,-104,0,0,0,0,0,0,0,0,-104,0,0,0,0,0,-104,-104,-104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 378 -0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,-172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 379 --447,0,0,-447,0,0,-447,-447,-447,-447,-447,0,0,0,0,-447,-447,0,0,-447,-447,-447,-447,-447,-447,-447,-447,0,-447,-447,0,-447,-447,0,0,0,0,0,-447,0,0,0,0,0,0,0,0,-447,0,0,0,0,0,0,0,-447,0, -// State 380 --78,0,0,0,0,0,-78,0,0,0,0,0,0,0,0,0,-78,0,0,0,0,0,0,-78,0,-78,-78,0,-78,-78,0,-78,-78,0,0,0,0,0,-78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 381 -0,0,0,0,0,0,0,0,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,467,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 382 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 383 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 384 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 385 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 386 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 387 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 388 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 389 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 390 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 391 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 392 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 393 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 394 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 395 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0, -// State 396 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 397 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 398 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 399 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 400 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 401 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 402 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,481,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 403 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 404 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 405 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 406 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 407 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 408 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 409 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 410 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 411 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 412 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 413 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 414 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 415 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 416 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 417 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 418 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 419 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 420 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 421 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 422 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 423 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 424 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 425 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,441,0,0, -// State 426 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,493,0, -// State 427 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-165,0,0,0,0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 428 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 429 -0,0,0,0,0,0,0,0,0,0,496,0,0,0,0,0,0,0,0,0,0,0,0,-162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 430 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 431 -0,0,0,0,0,0,0,0,0,0,-118,0,0,0,0,-118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-118,0, -// State 432 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 433 -0,0,0,-386,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-386,-386,0,-386,0,0,0,0,0,0,0,0,0,0,0,0,-386,0,0,0,-386,0,-386,0,-386,0,0,0,0, -// State 434 -91,0,0,0,0,0,92,0,0,0,-116,0,0,0,0,-116,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,500,0,0,0,0,0,0,0,-116,0, -// State 435 -0,0,0,0,0,0,0,0,0,0,-109,0,0,0,0,-109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-109,0, -// State 436 -0,0,0,0,0,0,0,0,0,0,-110,0,0,0,0,-110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-110,0, -// State 437 -0,0,0,0,0,0,0,0,0,0,-107,0,0,0,0,-107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-107,0, -// State 438 -0,0,0,0,0,0,0,0,0,0,-108,0,0,0,0,-108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-108,0, -// State 439 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 440 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,0,-139,0, -// State 441 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-137,0,0,0,0,0,0,0,-137,0,0,0,-137,0, -// State 442 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352,0,0,0,507,0, -// State 443 -0,0,0,-207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-207,-207,0,-207,0,0,0,0,0,0,0,0,0,0,0,0,-207,0,0,0,-207,0,-207,0,-207,0,0,0,0, -// State 444 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352,0,0,0,508,0, -// State 445 -0,0,0,-202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-202,-202,0,-202,0,0,0,0,0,0,0,0,0,0,0,0,-202,0,0,0,-202,0,-202,0,-202,0,0,0,0, -// State 446 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,0,0, -// State 447 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 448 -0,0,0,0,0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-160,0, -// State 449 -0,0,0,-383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-383,-383,0,-383,0,0,0,0,0,0,0,0,0,0,-383,0,-383,0,0,0,-383,0,-383,0,-383,0,0,0,0, -// State 450 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,0,0,0,0,0,-63,0,0,-63,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,0, -// State 451 -0,0,0,0,0,0,0,0,0,0,-376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-376,0, -// State 452 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-502,-502,0,-502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 453 -0,0,0,0,0,0,0,0,0,0,-54,0,0,0,0,-54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 454 -0,0,0,0,0,0,0,0,0,0,-84,0,0,0,-84,-84,0,0,0,0,0,0,0,0,0,0,0,0,0,-84,-84,-84,0,0,0,0,0,0,0,0,0,0,0,0,0,-84,0,0,0,0,0,0,0,0,0,0,0, -// State 455 -0,0,0,45,0,46,47,-183,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 456 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,-175,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 457 -0,0,0,0,0,0,0,514,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 458 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,-177,0,0,0,0,0,40,71,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 459 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 460 -0,0,0,0,0,0,0,0,0,0,-396,0,0,0,74,0,-396,517,0,0,0,0,0,-396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 461 -0,0,0,0,0,0,0,0,0,0,-473,0,0,0,0,0,0,0,0,0,0,0,0,-473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 462 -0,0,0,0,0,0,0,0,0,0,518,0,0,0,0,0,0,0,0,0,0,0,0,-174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 463 -0,0,0,0,0,0,0,0,0,0,-474,0,0,0,0,0,0,0,0,0,0,0,0,-474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 464 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-59,0,0,0,0,0,0,-59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 465 --79,0,0,0,0,0,-79,0,0,0,0,0,0,0,0,0,-79,0,0,0,0,0,0,-79,0,-79,-79,0,-79,-79,0,-79,-79,0,0,0,0,0,-79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 466 --435,0,0,-435,0,0,-435,-435,0,0,-435,0,0,0,0,-435,-435,0,0,-435,-435,-435,-435,-435,0,-435,-435,0,-435,-435,0,-435,-435,0,0,0,0,0,-435,0,0,0,0,0,0,0,0,-435,0,0,0,0,0,0,0,-435,0, -// State 467 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 468 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 469 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 470 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 471 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 472 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 473 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 474 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 475 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 476 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 477 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 478 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 479 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 480 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 481 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 482 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 483 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 484 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 485 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 486 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 487 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 488 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 489 -0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 490 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 491 -0,0,0,-387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-387,-387,0,-387,0,0,0,0,0,0,0,0,0,0,0,0,-387,0,0,0,-387,0,-387,0,-387,0,0,0,0, -// State 492 -0,0,0,-382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-382,-382,0,-382,0,0,0,0,0,0,0,0,0,0,-382,0,-382,0,0,0,-382,0,-382,0,-382,0,0,0,0, -// State 493 -0,0,0,0,0,0,0,0,0,0,528,0,0,0,0,0,0,0,0,0,0,0,0,-164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 494 -0,0,0,0,0,0,0,0,0,0,0,0,0,-388,0,0,0,-388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 495 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-68,0,0,0,0,0,-68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 496 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,441,0,0, -// State 497 -0,0,0,-121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-121,-121,0,-121,0,0,0,0,0,0,0,0,0,0,0,0,-121,0,0,0,-121,0,-121,0,-121,0,0,0,0, -// State 498 -0,0,0,0,0,0,0,0,0,0,-115,0,0,0,0,-115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-115,0, -// State 499 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 500 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,436,437,438,439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 501 -0,533,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536, -// State 502 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,0,-141,0, -// State 503 -0,0,0,0,0,0,0,0,0,0,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-138,0, -// State 504 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,539,0, -// State 505 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352,0,0,0,540,0, -// State 506 -0,0,0,-204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-204,-204,0,-204,0,0,0,0,0,0,0,0,0,0,0,0,-204,0,0,0,-204,0,-204,0,-204,0,0,0,0, -// State 507 -0,0,0,-203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-203,-203,0,-203,0,0,0,0,0,0,0,0,0,0,0,0,-203,0,0,0,-203,0,-203,0,-203,0,0,0,0, -// State 508 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-143,0, -// State 509 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 510 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-64,0,0,0,0,0,-64,0,0,-64,0,0,0,0,0,0,0,0,0,0,0,0,0,-64,0, -// State 511 -0,0,0,0,0,0,0,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 512 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 513 -0,0,0,0,0,0,0,0,0,-466,-466,548,0,0,0,-466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 514 -0,0,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0,0,0,0,0,-176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 515 -0,0,0,0,0,0,0,0,0,-468,-468,0,0,0,0,-468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 516 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 517 -0,0,0,-88,0,-88,-88,0,0,0,0,0,0,0,-88,0,0,0,0,0,0,0,0,-88,0,0,0,0,0,-88,-88,-88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 518 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 519 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 520 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 521 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 522 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 523 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 524 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 525 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 526 -91,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,93,0,0,436,437,438,439,0,0,94,95,0,96,97,0,98,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,440,0,0,0,0,0,0,441,0,0, -// State 527 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-69,0,0,0,0,0,-69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 528 -0,0,0,-384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-384,-384,0,-384,0,0,0,0,0,0,0,0,0,0,0,0,-384,0,0,0,-384,0,-384,0,-384,0,0,0,0, -// State 529 -0,0,0,0,0,0,0,0,0,0,-114,0,0,0,0,-114,0,0,0,436,437,438,439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-114,0, -// State 530 -0,0,0,0,0,0,0,0,0,0,-117,0,0,0,0,-117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-117,0, -// State 531 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 532 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 533 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 534 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 535 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 536 -0,0,0,0,0,0,0,0,0,0,555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-140,0, -// State 537 --23,0,0,0,0,0,-23,0,0,0,0,0,0,0,0,0,-23,0,0,-23,-23,-23,-23,0,0,-23,-23,0,-23,-23,0,-23,-23,0,0,0,0,0,-23,0,0,0,0,0,0,0,0,-23,0,0,0,0,0,0,0,-23,0, -// State 538 -0,0,0,-123,0,0,0,0,0,0,0,0,0,0,0,556,0,0,0,0,0,0,0,0,0,0,0,0,-123,-123,0,-123,0,0,0,0,0,0,0,0,0,0,0,0,-123,0,0,0,-123,0,-123,0,-123,0,0,0,0, -// State 539 -0,0,0,-205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-205,-205,0,-205,0,0,0,0,0,0,0,0,0,0,0,0,-205,0,0,0,-205,0,-205,0,-205,0,0,0,0, -// State 540 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-145,0, -// State 541 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,558,0, -// State 542 -0,0,0,0,0,0,0,0,0,0,559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-142,0, -// State 543 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 544 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,561,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 545 -0,0,0,0,0,0,0,0,0,-465,-465,562,0,0,0,-465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 546 -0,0,0,0,0,0,0,0,0,-467,-467,0,0,0,0,-467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 547 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 548 -0,0,0,-89,0,-89,-89,0,0,0,0,0,0,0,-89,0,0,0,0,0,0,0,0,-89,0,0,0,0,0,-89,-89,-89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 549 -0,0,0,0,0,0,0,0,0,0,-475,0,0,0,0,0,0,0,0,0,0,0,0,-475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 550 -0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-504,-504,0,-504,0,0,0,0,0,0,0,0,0,0,0,0,141,0,0,0,142,0,143,0,18,0,0,0,0, -// State 551 -0,0,0,-385,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-385,-385,0,-385,0,0,0,0,0,0,0,0,0,0,0,0,-385,0,0,0,-385,0,-385,0,-385,0,0,0,0, -// State 552 -0,0,0,0,0,0,0,0,0,0,-113,0,0,0,0,-113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-113,0, -// State 553 -0,0,0,0,0,0,0,0,0,0,-190,0,0,0,0,-190,0,0,0,-190,-190,-190,-190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-190,0, -// State 554 --24,0,0,0,0,0,-24,0,0,0,0,0,0,0,0,0,-24,0,0,-24,-24,-24,-24,0,0,-24,-24,0,-24,-24,0,-24,-24,0,0,0,0,0,-24,0,0,0,0,0,0,0,0,-24,0,0,0,0,0,0,0,-24,0, -// State 555 -0,0,0,-122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-122,-122,0,-122,0,0,0,0,0,0,0,0,0,0,0,0,-122,0,0,0,-122,0,-122,0,-122,0,0,0,0, -// State 556 -0,0,0,0,0,0,0,0,0,0,564,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-144,0, -// State 557 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-198,0,0,0,-198,0, -// State 558 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-28,0,0,-28,0,0,0,0,0,-28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-28,0, -// State 559 -0,0,0,0,0,0,0,0,0,0,-195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-195,0, -// State 560 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-133,0,0,0,0,0,0,0,-133,0,0,0,-133,0, -// State 561 -0,0,0,45,0,46,47,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 562 -0,0,0,0,0,0,0,0,0,-464,-464,0,0,0,0,-464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 563 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-29,0,0,-29,0,0,0,0,0,-29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-29,0, -// State 564 -0,0,0,0,0,0,0,0,0,-463,-463,0,0,0,0,-463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -]; -const ___EOF_ACTION: &'static [i16] = &[ -// State 0 -0, -// State 1 --505, -// State 2 -0, -// State 3 -0, -// State 4 -0, -// State 5 -0, -// State 6 -0, -// State 7 -0, -// State 8 -0, -// State 9 --457, -// State 10 -0, -// State 11 -0, -// State 12 -0, -// State 13 -0, -// State 14 -0, -// State 15 -0, -// State 16 -0, -// State 17 -0, -// State 18 --461, -// State 19 --151, -// State 20 --459, -// State 21 --424, -// State 22 --455, -// State 23 --423, -// State 24 --422, -// State 25 --379, -// State 26 --456, -// State 27 --425, -// State 28 --434, -// State 29 -0, -// State 30 --396, -// State 31 --413, -// State 32 --458, -// State 33 --398, -// State 34 -0, -// State 35 --409, -// State 36 -0, -// State 37 -0, -// State 38 --412, -// State 39 --367, -// State 40 --368, -// State 41 --408, -// State 42 --490, -// State 43 --460, -// State 44 -0, -// State 45 -0, -// State 46 -0, -// State 47 -0, -// State 48 -0, -// State 49 -0, -// State 50 -0, -// State 51 -0, -// State 52 -0, -// State 53 -0, -// State 54 -0, -// State 55 -0, -// State 56 -0, -// State 57 -0, -// State 58 -0, -// State 59 -0, -// State 60 -0, -// State 61 --242, -// State 62 -0, -// State 63 --497, -// State 64 --153, -// State 65 --364, -// State 66 -0, -// State 67 --150, -// State 68 -0, -// State 69 -0, -// State 70 --369, -// State 71 -0, -// State 72 --397, -// State 73 -0, -// State 74 -0, -// State 75 -0, -// State 76 -0, -// State 77 -0, -// State 78 -0, -// State 79 -0, -// State 80 --394, -// State 81 -0, -// State 82 -0, -// State 83 -0, -// State 84 -0, -// State 85 -0, -// State 86 -0, -// State 87 -0, -// State 88 -0, -// State 89 -0, -// State 90 -0, -// State 91 -0, -// State 92 -0, -// State 93 -0, -// State 94 -0, -// State 95 -0, -// State 96 -0, -// State 97 -0, -// State 98 -0, -// State 99 --488, -// State 100 -0, -// State 101 -0, -// State 102 -0, -// State 103 -0, -// State 104 -0, -// State 105 -0, -// State 106 -0, -// State 107 --306, -// State 108 -0, -// State 109 -0, -// State 110 -0, -// State 111 -0, -// State 112 -0, -// State 113 -0, -// State 114 --244, -// State 115 -0, -// State 116 -0, -// State 117 -0, -// State 118 -0, -// State 119 --243, -// State 120 -0, -// State 121 -0, -// State 122 --226, -// State 123 -0, -// State 124 -0, -// State 125 --234, -// State 126 --238, -// State 127 -0, -// State 128 -0, -// State 129 -0, -// State 130 -0, -// State 131 -0, -// State 132 --344, -// State 133 --348, -// State 134 --274, -// State 135 --343, -// State 136 --381, -// State 137 --345, -// State 138 --342, -// State 139 -0, -// State 140 -0, -// State 141 -0, -// State 142 -0, -// State 143 -0, -// State 144 -0, -// State 145 -0, -// State 146 -0, -// State 147 -0, -// State 148 --152, -// State 149 -0, -// State 150 --43, -// State 151 --415, -// State 152 --419, -// State 153 -0, -// State 154 -0, -// State 155 -0, -// State 156 -0, -// State 157 -0, -// State 158 -0, -// State 159 -0, -// State 160 --403, -// State 161 -0, -// State 162 --411, -// State 163 -0, -// State 164 --395, -// State 165 --410, -// State 166 -0, -// State 167 -0, -// State 168 -0, -// State 169 -0, -// State 170 -0, -// State 171 -0, -// State 172 --484, -// State 173 -0, -// State 174 -0, -// State 175 -0, -// State 176 -0, -// State 177 -0, -// State 178 -0, -// State 179 -0, -// State 180 -0, -// State 181 -0, -// State 182 -0, -// State 183 -0, -// State 184 --487, -// State 185 -0, -// State 186 --486, -// State 187 -0, -// State 188 --483, -// State 189 -0, -// State 190 -0, -// State 191 --290, -// State 192 -0, -// State 193 -0, -// State 194 --298, -// State 195 --302, -// State 196 --338, -// State 197 -0, -// State 198 -0, -// State 199 -0, -// State 200 --308, -// State 201 -0, -// State 202 -0, -// State 203 -0, -// State 204 -0, -// State 205 --245, -// State 206 -0, -// State 207 --228, -// State 208 -0, -// State 209 -0, -// State 210 --236, -// State 211 --240, -// State 212 --276, -// State 213 -0, -// State 214 -0, -// State 215 -0, -// State 216 --307, -// State 217 -0, -// State 218 --227, -// State 219 -0, -// State 220 -0, -// State 221 --235, -// State 222 --239, -// State 223 --275, -// State 224 -0, -// State 225 -0, -// State 226 -0, -// State 227 --222, -// State 228 --258, -// State 229 -0, -// State 230 --218, -// State 231 --230, -// State 232 --266, -// State 233 --270, -// State 234 -0, -// State 235 -0, -// State 236 -0, -// State 237 -0, -// State 238 -0, -// State 239 --349, -// State 240 -0, -// State 241 -0, -// State 242 -0, -// State 243 -0, -// State 244 -0, -// State 245 -0, -// State 246 -0, -// State 247 -0, -// State 248 -0, -// State 249 -0, -// State 250 -0, -// State 251 -0, -// State 252 --44, -// State 253 --419, -// State 254 --417, -// State 255 --414, -// State 256 --359, -// State 257 --421, -// State 258 -0, -// State 259 --462, -// State 260 --470, -// State 261 --478, -// State 262 --418, -// State 263 --361, -// State 264 -0, -// State 265 -0, -// State 266 -0, -// State 267 --401, -// State 268 -0, -// State 269 -0, -// State 270 --405, -// State 271 -0, -// State 272 --402, -// State 273 -0, -// State 274 --406, -// State 275 -0, -// State 276 -0, -// State 277 --489, -// State 278 -0, -// State 279 -0, -// State 280 -0, -// State 281 -0, -// State 282 -0, -// State 283 -0, -// State 284 -0, -// State 285 -0, -// State 286 --485, -// State 287 -0, -// State 288 --286, -// State 289 --322, -// State 290 -0, -// State 291 --282, -// State 292 --294, -// State 293 --330, -// State 294 --334, -// State 295 -0, -// State 296 --292, -// State 297 -0, -// State 298 -0, -// State 299 --300, -// State 300 --304, -// State 301 --340, -// State 302 -0, -// State 303 -0, -// State 304 -0, -// State 305 --309, -// State 306 -0, -// State 307 --229, -// State 308 -0, -// State 309 -0, -// State 310 --237, -// State 311 --241, -// State 312 --277, -// State 313 --224, -// State 314 --260, -// State 315 -0, -// State 316 --220, -// State 317 --232, -// State 318 --268, -// State 319 --272, -// State 320 -0, -// State 321 --291, -// State 322 -0, -// State 323 -0, -// State 324 --299, -// State 325 --303, -// State 326 --339, -// State 327 --223, -// State 328 --259, -// State 329 -0, -// State 330 --219, -// State 331 --231, -// State 332 --267, -// State 333 --271, -// State 334 -0, -// State 335 -0, -// State 336 --254, -// State 337 --214, -// State 338 --250, -// State 339 --262, -// State 340 -0, -// State 341 -0, -// State 342 -0, -// State 343 -0, -// State 344 -0, -// State 345 -0, -// State 346 -0, -// State 347 -0, -// State 348 -0, -// State 349 -0, -// State 350 -0, -// State 351 -0, -// State 352 --206, -// State 353 -0, -// State 354 -0, -// State 355 -0, -// State 356 -0, -// State 357 -0, -// State 358 -0, -// State 359 -0, -// State 360 -0, -// State 361 -0, -// State 362 --360, -// State 363 --416, -// State 364 --53, -// State 365 --420, -// State 366 --469, -// State 367 -0, -// State 368 -0, -// State 369 --83, -// State 370 -0, -// State 371 -0, -// State 372 -0, -// State 373 -0, -// State 374 --404, -// State 375 --407, -// State 376 -0, -// State 377 -0, -// State 378 -0, -// State 379 -0, -// State 380 -0, -// State 381 -0, -// State 382 --318, -// State 383 --278, -// State 384 --314, -// State 385 --326, -// State 386 --288, -// State 387 --324, -// State 388 -0, -// State 389 --284, -// State 390 --296, -// State 391 --332, -// State 392 --336, -// State 393 -0, -// State 394 --293, -// State 395 -0, -// State 396 -0, -// State 397 --301, -// State 398 --305, -// State 399 --341, -// State 400 --225, -// State 401 --261, -// State 402 -0, -// State 403 --221, -// State 404 --233, -// State 405 --269, -// State 406 --273, -// State 407 --256, -// State 408 --216, -// State 409 --252, -// State 410 --264, -// State 411 --287, -// State 412 --323, -// State 413 -0, -// State 414 --283, -// State 415 --295, -// State 416 --331, -// State 417 --335, -// State 418 --255, -// State 419 --215, -// State 420 --251, -// State 421 --263, -// State 422 -0, -// State 423 --246, -// State 424 -0, -// State 425 -0, -// State 426 -0, -// State 427 -0, -// State 428 -0, -// State 429 -0, -// State 430 -0, -// State 431 -0, -// State 432 -0, -// State 433 --386, -// State 434 -0, -// State 435 -0, -// State 436 -0, -// State 437 -0, -// State 438 -0, -// State 439 -0, -// State 440 -0, -// State 441 -0, -// State 442 -0, -// State 443 --207, -// State 444 -0, -// State 445 --202, -// State 446 -0, -// State 447 -0, -// State 448 -0, -// State 449 --383, -// State 450 -0, -// State 451 -0, -// State 452 -0, -// State 453 --54, -// State 454 --84, -// State 455 -0, -// State 456 -0, -// State 457 -0, -// State 458 -0, -// State 459 -0, -// State 460 -0, -// State 461 -0, -// State 462 -0, -// State 463 -0, -// State 464 -0, -// State 465 -0, -// State 466 -0, -// State 467 --310, -// State 468 --320, -// State 469 --280, -// State 470 --316, -// State 471 --328, -// State 472 --289, -// State 473 --325, -// State 474 -0, -// State 475 --285, -// State 476 --297, -// State 477 --333, -// State 478 --337, -// State 479 --257, -// State 480 --217, -// State 481 --253, -// State 482 --265, -// State 483 --248, -// State 484 --319, -// State 485 --279, -// State 486 --315, -// State 487 --327, -// State 488 --247, -// State 489 -0, -// State 490 -0, -// State 491 --387, -// State 492 --382, -// State 493 -0, -// State 494 -0, -// State 495 -0, -// State 496 -0, -// State 497 --121, -// State 498 -0, -// State 499 -0, -// State 500 -0, -// State 501 -0, -// State 502 -0, -// State 503 -0, -// State 504 -0, -// State 505 -0, -// State 506 --204, -// State 507 --203, -// State 508 -0, -// State 509 -0, -// State 510 -0, -// State 511 -0, -// State 512 -0, -// State 513 --466, -// State 514 -0, -// State 515 --468, -// State 516 -0, -// State 517 -0, -// State 518 --312, -// State 519 --321, -// State 520 --281, -// State 521 --317, -// State 522 --329, -// State 523 --249, -// State 524 --311, -// State 525 -0, -// State 526 -0, -// State 527 -0, -// State 528 --384, -// State 529 -0, -// State 530 -0, -// State 531 -0, -// State 532 -0, -// State 533 -0, -// State 534 -0, -// State 535 -0, -// State 536 -0, -// State 537 -0, -// State 538 --123, -// State 539 --205, -// State 540 -0, -// State 541 -0, -// State 542 -0, -// State 543 -0, -// State 544 -0, -// State 545 --465, -// State 546 --467, -// State 547 -0, -// State 548 -0, -// State 549 -0, -// State 550 --313, -// State 551 --385, -// State 552 -0, -// State 553 -0, -// State 554 -0, -// State 555 --122, -// State 556 -0, -// State 557 -0, -// State 558 -0, -// State 559 -0, -// State 560 -0, -// State 561 -0, -// State 562 --464, -// State 563 -0, -// State 564 --463, -]; -const ___GOTO: &'static [i16] = &[ -// State 0 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 1 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 2 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,14,0,0, -// State 3 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 4 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,25,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 5 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,33,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 6 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0, -// State 7 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 8 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 9 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 10 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 11 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,52,0,0, -// State 12 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 13 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0, -// State 14 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 15 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 16 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,59,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 17 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 18 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 19 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,68,0,0,0,31,69,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,0,0,0,0, -// State 20 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 21 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 22 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 23 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 24 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 25 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 26 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 27 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 28 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 29 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 30 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 31 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 32 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 33 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 34 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,79,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 35 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 36 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 37 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0,0,0,0,0,0,0, -// State 38 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 39 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 40 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 41 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 42 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 43 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 44 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,87,0,0,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 45 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,99,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0, -// State 46 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0, -// State 47 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 48 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,0,106,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 49 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 50 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 51 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0, -// State 52 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,113,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 53 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 54 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 55 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,118,0,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 56 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 57 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 58 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,0,0,0,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 59 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 60 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0,0,0,0,0,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 61 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 62 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,0,0,0,0,0,0,0,0,0,0, -// State 63 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 64 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,149,0,0,0,31,69,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,0,0,0,0, -// State 65 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 66 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,0,0,0,0,0,0,0, -// State 67 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 68 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 69 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 70 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 71 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 72 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 73 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 74 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,79,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 75 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 76 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,162,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 77 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 78 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 79 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 80 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 81 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 82 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,169,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,0,171,0,0,0,0,0,0, -// State 83 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 84 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 85 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 86 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 87 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 88 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 89 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 90 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 91 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,180,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 92 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,0,0,0,182,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 93 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 94 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 95 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 96 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 97 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 98 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,0,0,0,0,0,0,0, -// State 99 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 100 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0, -// State 101 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0, -// State 102 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 103 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 104 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 105 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,0,0,0,0,0,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 106 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 107 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 108 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198,0,199,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 109 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 110 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,0,204,0,0,0,205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 111 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 112 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 113 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 114 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 115 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,214,0,215,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 116 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 117 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 118 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 119 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 120 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 121 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 122 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,229,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 123 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 124 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 125 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 126 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 127 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,0,0,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 128 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 129 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 130 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 131 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,0, -// State 132 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 133 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 134 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 135 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 136 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 137 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 138 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 139 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,0,243,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 140 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 141 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 142 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 143 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0,0,0,0,0, -// State 144 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 145 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 146 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 147 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 148 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 149 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 150 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 151 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 152 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,260,0,0,0,0,0,0,0,0,0,0,0,0,0,261,0,0,0,0,262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,264,0,0,0,0,0,0,0,0,0,0,0, -// State 153 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 154 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 155 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 156 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 157 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 158 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 159 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 160 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 161 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 162 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 163 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 164 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 165 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 166 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,169,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,0,277,0,0,0,0,0,0, -// State 167 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 168 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 169 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 170 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 171 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,281,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,282,0,0,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 172 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 173 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 174 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 175 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 176 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 177 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 178 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 179 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,284,0,0,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 180 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 181 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 182 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 183 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 184 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 185 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,287,0,0,0,0,0,0,0,0, -// State 186 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 187 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 188 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 189 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 190 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 191 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 192 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 193 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 194 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 195 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 196 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 197 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 198 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,298,0,0,0,0,0,299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 199 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 200 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 201 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,303,0,304,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 202 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 203 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,309,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 204 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 205 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 206 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 207 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,315,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 208 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,316,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 209 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 210 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,319,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 211 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 212 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 213 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 214 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,323,0,0,0,0,0,324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 215 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 216 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 217 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 218 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 219 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 220 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 221 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 222 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 223 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 224 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 225 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 226 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 227 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,337,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 228 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 229 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 230 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 231 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 232 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 233 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 234 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 235 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 236 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 237 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,342,0,0,0,0,0,0,0,0, -// State 238 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,0,343,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 239 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 240 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 241 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 242 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 243 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 244 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 245 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 246 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,348,0,349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 247 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,354,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,356,357,0,0,358,0,0,0,0,0,0,0,0,0,0,0,0,359,0,24,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 248 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 249 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 250 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 251 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 252 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 253 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,260,0,0,0,0,0,0,0,0,0,0,0,0,0,261,0,0,0,0,262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,363,0,0,0,0,0,0,0,0,0,0,0, -// State 254 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 255 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 256 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 257 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,260,0,0,0,0,0,0,0,0,0,0,0,0,0,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 258 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 259 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 260 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 261 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 262 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 263 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 264 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 265 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 266 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 267 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 268 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 269 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 270 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 271 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 272 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 273 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,377,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 274 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 275 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 276 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 277 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 278 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 279 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,379,0,0,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 280 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 281 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 282 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 283 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 284 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,0,0,0,382,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 285 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 286 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 287 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 288 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 289 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 290 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 291 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,385,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 292 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,386,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 293 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 294 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 295 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 296 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 297 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 298 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 299 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,392,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 300 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 301 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 302 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,394,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 303 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,396,0,0,0,0,0,397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 304 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 305 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 306 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 307 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,402,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 308 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 309 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 310 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 311 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 312 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 313 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 314 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 315 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 316 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 317 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,411,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 318 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 319 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 320 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 321 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 322 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 323 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 324 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,417,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 325 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 326 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 327 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 328 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 329 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 330 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 331 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,422,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 332 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 333 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 334 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 335 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 336 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 337 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,424,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 338 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 339 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 340 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 341 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 342 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 343 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,354,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,427,357,0,0,358,0,0,0,0,0,0,0,0,0,0,0,0,359,0,24,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 344 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,429,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 345 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,431,0,0,0,0,0,0,0,0, -// State 346 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,433,0,434,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 347 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 348 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 349 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,348,0,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 350 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,447,0,0,0,0,0,0,0,0, -// State 351 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 352 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 353 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,449,0,0,358,0,0,0,0,0,0,0,0,0,0,0,0,359,0,24,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 354 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 355 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 356 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 357 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 358 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 359 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 360 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 361 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 362 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 363 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 364 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 365 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 366 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 367 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,458,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0, -// State 368 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,461,462,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,463,0,0,0,0,464,0,0,0,0,0,0,0,0, -// State 369 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 370 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 371 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 372 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 373 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 374 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 375 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 376 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 377 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 378 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 379 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 380 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 381 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 382 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 383 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 384 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 385 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 386 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 387 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 388 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 389 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 390 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 391 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 392 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 393 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 394 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 395 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 396 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 397 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 398 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 399 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 400 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 401 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 402 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 403 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 404 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 405 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 406 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 407 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 408 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 409 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 410 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 411 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 412 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 413 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 414 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 415 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 416 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 417 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 418 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 419 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 420 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 421 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 422 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 423 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 424 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0,0,0,0,0,0,0, -// State 425 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,433,0,492,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 426 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 427 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 428 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 429 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 430 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 431 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 432 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 433 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 434 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,284,0,0,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 435 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 436 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 437 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 438 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 439 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 440 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,504,0,0,0,0,0,0,0,0,0,0,505,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 441 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 442 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,348,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 443 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 444 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 445 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 446 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 447 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 448 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 449 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 450 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 451 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 452 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 453 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 454 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 455 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0, -// State 456 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,461,462,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,463,0,0,0,0,464,0,0,0,0,0,0,0,0, -// State 457 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 458 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,461,462,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,0,0,0,0,464,0,0,0,0,0,0,0,0, -// State 459 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 460 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 461 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 462 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 463 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 464 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 465 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 466 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 467 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 468 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 469 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,519,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 470 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 471 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 472 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 473 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 474 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 475 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 476 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 477 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 478 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 479 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 480 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 481 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 482 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 483 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 484 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 485 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 486 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 487 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 488 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 489 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 490 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 491 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 492 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 493 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 494 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 495 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 496 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,433,0,529,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 497 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 498 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 499 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 500 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 501 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 502 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,537,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 503 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 504 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 505 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 506 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 507 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 508 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,542,0,0,0,0,0,0,0,0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,25,0,0,0,0,0,0,0,544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 509 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,545,0,0,0,0,0,0,0,0, -// State 510 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 511 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 512 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 513 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 514 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 515 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 516 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,550,0,0,0,0,0,0,0,0, -// State 517 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 518 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 519 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 520 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,134,0,551,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 521 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 522 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 523 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 524 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 525 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 526 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,432,0,433,0,552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,86,24,0,0,0,0,25,179,0,435,88,89,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 527 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 528 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 529 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,553,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 530 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 531 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 532 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 533 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 534 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 535 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 536 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 537 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 538 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 539 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 540 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,25,0,0,0,0,0,0,0,544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 541 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 542 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 543 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 544 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 545 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 546 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 547 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,563,0,0,0,0,0,0,0,0, -// State 548 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 549 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 550 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,137,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,140,0, -// State 551 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 552 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 553 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 554 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 555 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 556 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 557 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 558 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 559 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 560 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 561 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,565,0,0,0,0,0,0,0,0, -// State 562 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 563 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -// State 564 -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -]; -fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { -const ___TERMINAL: &'static [&'static str] = &[ -r###""!""###, -r###""!=""###, -r###""!~""###, -r###""#""###, -r###""#![...]""###, -r###""&""###, -r###""(""###, -r###"")""###, -r###""*""###, -r###""+""###, -r###"",""###, -r###""->""###, -r###""..""###, -r###"":""###, -r###""::""###, -r###"";""###, -r###""<""###, -r###""=""###, -r###""==""###, -r###""=>""###, -r###""=>?""###, -r###""=>@L""###, -r###""=>@R""###, -r###"">""###, -r###""?""###, -r###""@L""###, -r###""@R""###, -r###""CharLiteral""###, -r###""Escape""###, -r###""Id""###, -r###""Lifetime""###, -r###""MacroId""###, -r###""RegexLiteral""###, -r###""StartGrammar""###, -r###""StartGrammarWhereClauses""###, -r###""StartMatchMapping""###, -r###""StartPattern""###, -r###""StartTypeRef""###, -r###""StringLiteral""###, -r###""[""###, -r###""]""###, -r###""_""###, -r###""else""###, -r###""enum""###, -r###""extern""###, -r###""for""###, -r###""grammar""###, -r###""if""###, -r###""match""###, -r###""mut""###, -r###""pub""###, -r###""type""###, -r###""use""###, -r###""where""###, -r###""{""###, -r###""}""###, -r###""~~""###, -]; -___ACTION[(___state * 57)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { -if state == 0 { -None -} else { -Some(terminal.to_string()) -} -}).collect() -} -pub struct TopParser { -_priv: (), -} - -impl TopParser { -pub fn new() -> TopParser { -TopParser { -_priv: (), -} -} - -#[allow(dead_code)] -pub fn parse< - 'input, - ___TOKEN: ___ToTriple<'input, Error=tok::Error>, - ___TOKENS: IntoIterator, ->( -&self, -text: &'input str, -___tokens0: ___TOKENS, -) -> Result, tok::Error>> -{ -let ___tokens = ___tokens0.into_iter(); -let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); -let mut ___states = vec![0_i16]; -let mut ___symbols = vec![]; -let mut ___integer; -let mut ___lookahead; -let ___last_location = &mut Default::default(); -'___shift: loop { -___lookahead = match ___tokens.next() { -Some(Ok(v)) => v, -None => break '___shift, -Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), -}; -*___last_location = ___lookahead.2.clone(); -___integer = match ___lookahead.1 { -Tok::Bang if true => 0, -Tok::BangEquals if true => 1, -Tok::BangTilde if true => 2, -Tok::Hash if true => 3, -Tok::ShebangAttribute(_) if true => 4, -Tok::Ampersand if true => 5, -Tok::LeftParen if true => 6, -Tok::RightParen if true => 7, -Tok::Star if true => 8, -Tok::Plus if true => 9, -Tok::Comma if true => 10, -Tok::MinusGreaterThan if true => 11, -Tok::DotDot if true => 12, -Tok::Colon if true => 13, -Tok::ColonColon if true => 14, -Tok::Semi if true => 15, -Tok::LessThan if true => 16, -Tok::Equals if true => 17, -Tok::EqualsEquals if true => 18, -Tok::EqualsGreaterThanCode(_) if true => 19, -Tok::EqualsGreaterThanQuestionCode(_) if true => 20, -Tok::EqualsGreaterThanLookahead if true => 21, -Tok::EqualsGreaterThanLookbehind if true => 22, -Tok::GreaterThan if true => 23, -Tok::Question if true => 24, -Tok::Lookahead if true => 25, -Tok::Lookbehind if true => 26, -Tok::CharLiteral(_) if true => 27, -Tok::Escape(_) if true => 28, -Tok::Id(_) if true => 29, -Tok::Lifetime(_) if true => 30, -Tok::MacroId(_) if true => 31, -Tok::RegexLiteral(_) if true => 32, -Tok::StartGrammar if true => 33, -Tok::StartGrammarWhereClauses if true => 34, -Tok::StartMatchMapping if true => 35, -Tok::StartPattern if true => 36, -Tok::StartTypeRef if true => 37, -Tok::StringLiteral(_) if true => 38, -Tok::LeftBracket if true => 39, -Tok::RightBracket if true => 40, -Tok::Underscore if true => 41, -Tok::Else if true => 42, -Tok::Enum if true => 43, -Tok::Extern if true => 44, -Tok::For if true => 45, -Tok::Grammar if true => 46, -Tok::If if true => 47, -Tok::Match if true => 48, -Tok::Mut if true => 49, -Tok::Pub if true => 50, -Tok::Type if true => 51, -Tok::Use(_) if true => 52, -Tok::Where if true => 53, -Tok::LeftBrace if true => 54, -Tok::RightBrace if true => 55, -Tok::TildeTilde if true => 56, -_ => { -let ___state = *___states.last().unwrap() as usize; -let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { -token: Some(___lookahead), -expected: ___expected_tokens(___state), -}; -return Err(___error); -} -}; -'___inner: loop { -let ___state = *___states.last().unwrap() as usize; -let ___action = ___ACTION[___state * 57 + ___integer]; -if ___action > 0 { -let ___symbol = match ___integer { -0 => match ___lookahead.1 { -___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -1 => match ___lookahead.1 { -___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -2 => match ___lookahead.1 { -___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -3 => match ___lookahead.1 { -___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -4 => match ___lookahead.1 { -Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -5 => match ___lookahead.1 { -___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -6 => match ___lookahead.1 { -___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -7 => match ___lookahead.1 { -___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -8 => match ___lookahead.1 { -___tok @ Tok::Star => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -9 => match ___lookahead.1 { -___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -10 => match ___lookahead.1 { -___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -11 => match ___lookahead.1 { -___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -12 => match ___lookahead.1 { -___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -13 => match ___lookahead.1 { -___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -14 => match ___lookahead.1 { -___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -15 => match ___lookahead.1 { -___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -16 => match ___lookahead.1 { -___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -17 => match ___lookahead.1 { -___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -18 => match ___lookahead.1 { -___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -19 => match ___lookahead.1 { -Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -20 => match ___lookahead.1 { -Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -21 => match ___lookahead.1 { -___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -22 => match ___lookahead.1 { -___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -23 => match ___lookahead.1 { -___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -24 => match ___lookahead.1 { -___tok @ Tok::Question => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -25 => match ___lookahead.1 { -___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -26 => match ___lookahead.1 { -___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -27 => match ___lookahead.1 { -Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -28 => match ___lookahead.1 { -Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -29 => match ___lookahead.1 { -Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -30 => match ___lookahead.1 { -Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -31 => match ___lookahead.1 { -Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -32 => match ___lookahead.1 { -Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -33 => match ___lookahead.1 { -___tok @ Tok::StartGrammar => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -34 => match ___lookahead.1 { -___tok @ Tok::StartGrammarWhereClauses => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -35 => match ___lookahead.1 { -___tok @ Tok::StartMatchMapping => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -36 => match ___lookahead.1 { -___tok @ Tok::StartPattern => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -37 => match ___lookahead.1 { -___tok @ Tok::StartTypeRef => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -38 => match ___lookahead.1 { -Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -39 => match ___lookahead.1 { -___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -40 => match ___lookahead.1 { -___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -41 => match ___lookahead.1 { -___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -42 => match ___lookahead.1 { -___tok @ Tok::Else => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -43 => match ___lookahead.1 { -___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -44 => match ___lookahead.1 { -___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -45 => match ___lookahead.1 { -___tok @ Tok::For => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -46 => match ___lookahead.1 { -___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -47 => match ___lookahead.1 { -___tok @ Tok::If => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -48 => match ___lookahead.1 { -___tok @ Tok::Match => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -49 => match ___lookahead.1 { -___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -50 => match ___lookahead.1 { -___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -51 => match ___lookahead.1 { -___tok @ Tok::Type => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -52 => match ___lookahead.1 { -Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), -_ => unreachable!(), -}, -53 => match ___lookahead.1 { -___tok @ Tok::Where => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -54 => match ___lookahead.1 { -___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -55 => match ___lookahead.1 { -___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -56 => match ___lookahead.1 { -___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), -_ => unreachable!(), -}, -_ => unreachable!(), -}; -___states.push(___action - 1); -___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); -continue '___shift; -} else if ___action < 0 { -if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { -if r.is_err() { -return r; -} -return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); -} -} else { -let mut ___err_lookahead = Some(___lookahead); -let mut ___err_integer: Option = Some(___integer); -let ___state = *___states.last().unwrap() as usize; -let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { -token: ___err_lookahead, -expected: ___expected_tokens(___state), -}; -return Err(___error) -} -} -} -loop { -let ___state = *___states.last().unwrap() as usize; -let ___action = ___EOF_ACTION[___state]; -if ___action < 0 { -if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { -return r; -} -} else { -let mut ___err_lookahead = None; -let mut ___err_integer: Option = None; -let ___state = *___states.last().unwrap() as usize; -let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { -token: ___err_lookahead, -expected: ___expected_tokens(___state), -}; -return Err(___error) -} -} -} -} -pub(crate) fn ___reduce< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> Option, tok::Error>>> -{ -let (___pop_states, ___symbol, ___nonterminal) = match -___action { -1 => { -___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -2 => { -___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -3 => { -___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -4 => { -___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -5 => { -___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -6 => { -___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -7 => { -___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -8 => { -___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -9 => { -___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -10 => { -___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -11 => { -___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -12 => { -___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -13 => { -___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -14 => { -___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -15 => { -___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -16 => { -___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -17 => { -___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -18 => { -___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -19 => { -___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -20 => { -___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -21 => { -___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -22 => { -___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -23 => { -___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -24 => { -___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -25 => { -___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -26 => { -___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -27 => { -___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -28 => { -___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -29 => { -___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -30 => { -___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -31 => { -___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -32 => { -___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -33 => { -___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -34 => { -___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -35 => { -___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -36 => { -___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -37 => { -___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -38 => { -___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -39 => { -___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -40 => { -___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -41 => { -___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -42 => { -___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -43 => { -___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -44 => { -___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -45 => { -___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -46 => { -___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -47 => { -___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -48 => { -___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -49 => { -___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -50 => { -___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -51 => { -___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -52 => { -___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -53 => { -___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -54 => { -___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -55 => { -___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -56 => { -___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -57 => { -___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -58 => { -___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -59 => { -___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -60 => { -___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -61 => { -___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -62 => { -___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -63 => { -___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -64 => { -___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -65 => { -___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -66 => { -___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -67 => { -___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -68 => { -___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -69 => { -___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -70 => { -___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -71 => { -___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -72 => { -___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -73 => { -___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -74 => { -___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -75 => { -___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -76 => { -___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -77 => { -___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -78 => { -___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -79 => { -___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -80 => { -___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -81 => { -___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -82 => { -___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -83 => { -___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -84 => { -___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -85 => { -___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -86 => { -___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -87 => { -___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -88 => { -___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -89 => { -___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -90 => { -___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -91 => { -___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -92 => { -___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -93 => { -___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -94 => { -___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -95 => { -___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -96 => { -___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -97 => { -___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -98 => { -___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -99 => { -___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -100 => { -___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -101 => { -___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -102 => { -___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -103 => { -___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -104 => { -___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -105 => { -___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -106 => { -___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -107 => { -___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -108 => { -___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -109 => { -___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -110 => { -___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -111 => { -___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -112 => { -___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -113 => { -___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -114 => { -___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -115 => { -___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -116 => { -___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -117 => { -___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -118 => { -___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -119 => { -___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -120 => { -___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -121 => { -___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -122 => { -___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -123 => { -___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -124 => { -___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -125 => { -___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -126 => { -___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -127 => { -___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -128 => { -___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -129 => { -___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -130 => { -___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -131 => { -___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -132 => { -___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -133 => { -___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -134 => { -___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -135 => { -___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -136 => { -___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -137 => { -___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -138 => { -___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -139 => { -___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -140 => { -___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -141 => { -___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -142 => { -___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -143 => { -___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -144 => { -___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -145 => { -___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -146 => { -___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -147 => { -___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -148 => { -___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -149 => { -___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -150 => { -___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -151 => { -___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -152 => { -___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -153 => { -___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -154 => { -___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -155 => { -___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -156 => { -___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -157 => { -___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -158 => { -___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -159 => { -___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -160 => { -___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -161 => { -___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -162 => { -___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -163 => { -___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -164 => { -___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -165 => { -___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -166 => { -___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -167 => { -___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -168 => { -___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -169 => { -___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -170 => { -___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -171 => { -___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -172 => { -___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -173 => { -___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -174 => { -___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -175 => { -___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -176 => { -___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -177 => { -___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -178 => { -___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -179 => { -___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -180 => { -___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -181 => { -___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -182 => { -___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -183 => { -___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -184 => { -___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -185 => { -___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -186 => { -___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -187 => { -___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -188 => { -___reduce188(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -189 => { -___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -190 => { -___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -191 => { -___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -192 => { -___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -193 => { -___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -194 => { -___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -195 => { -// Conversion = Terminal, "=>" => ActionFn(426); -let ___sym1 = ___pop_Variant1(___symbols); -let ___sym0 = ___pop_Variant75(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = match super::___action426::<>(text, ___sym0, ___sym1) { -Ok(v) => v, -Err(e) => return Some(Err(e)), -}; -let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); -(2, ___symbol, 93) -} -196 => { -___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -197 => { -___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -198 => { -___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -199 => { -___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -200 => { -___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -201 => { -___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -202 => { -___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -203 => { -___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -204 => { -___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -205 => { -___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -206 => { -___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -207 => { -___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -208 => { -___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -209 => { -___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -210 => { -___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -211 => { -___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -212 => { -___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -213 => { -___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -214 => { -___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -215 => { -___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -216 => { -___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -217 => { -___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -218 => { -___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -219 => { -___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -220 => { -___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -221 => { -___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -222 => { -___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -223 => { -___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -224 => { -___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -225 => { -___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -226 => { -___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -227 => { -___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -228 => { -___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -229 => { -___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -230 => { -___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -231 => { -___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -232 => { -___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -233 => { -___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -234 => { -___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -235 => { -___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -236 => { -___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -237 => { -___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -238 => { -___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -239 => { -___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -240 => { -___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -241 => { -___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -242 => { -___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -243 => { -___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -244 => { -___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -245 => { -___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -246 => { -___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -247 => { -___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -248 => { -___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -249 => { -___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -250 => { -___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -251 => { -___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -252 => { -___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -253 => { -___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -254 => { -___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -255 => { -___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -256 => { -___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -257 => { -___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -258 => { -___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -259 => { -___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -260 => { -___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -261 => { -___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -262 => { -___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -263 => { -___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -264 => { -___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -265 => { -___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -266 => { -___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -267 => { -___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -268 => { -___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -269 => { -___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -270 => { -___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -271 => { -___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -272 => { -___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -273 => { -___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -274 => { -___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -275 => { -___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -276 => { -___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -277 => { -___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -278 => { -___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -279 => { -___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -280 => { -___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -281 => { -___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -282 => { -___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -283 => { -___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -284 => { -___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -285 => { -___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -286 => { -___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -287 => { -___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -288 => { -___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -289 => { -___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -290 => { -___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -291 => { -___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -292 => { -___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -293 => { -___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -294 => { -___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -295 => { -___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -296 => { -___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -297 => { -___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -298 => { -___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -299 => { -___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -300 => { -___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -301 => { -___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -302 => { -___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -303 => { -___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -304 => { -___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -305 => { -___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -306 => { -___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -307 => { -___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -308 => { -___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -309 => { -___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -310 => { -___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -311 => { -___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -312 => { -___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -313 => { -___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -314 => { -___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -315 => { -___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -316 => { -___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -317 => { -___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -318 => { -___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -319 => { -___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -320 => { -___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -321 => { -___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -322 => { -___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -323 => { -___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -324 => { -___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -325 => { -___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -326 => { -___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -327 => { -___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -328 => { -___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -329 => { -___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -330 => { -___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -331 => { -___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -332 => { -___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -333 => { -___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -334 => { -___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -335 => { -___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -336 => { -___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -337 => { -___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -338 => { -___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -339 => { -___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -340 => { -___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -341 => { -___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -342 => { -___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -343 => { -___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -344 => { -___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -345 => { -___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -346 => { -___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -347 => { -___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -348 => { -___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -349 => { -___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -350 => { -___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -351 => { -___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -352 => { -___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -353 => { -___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -354 => { -___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -355 => { -___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -356 => { -___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -357 => { -___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -358 => { -___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -359 => { -___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -360 => { -___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -361 => { -___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -362 => { -___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -363 => { -___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -364 => { -___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -365 => { -___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -366 => { -___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -367 => { -___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -368 => { -___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -369 => { -___reduce369(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -370 => { -___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -371 => { -___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -372 => { -___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -373 => { -___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -374 => { -___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -375 => { -___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -376 => { -// MatchItem = MatchSymbol, "=>" => ActionFn(434); -let ___sym1 = ___pop_Variant1(___symbols); -let ___sym0 = ___pop_Variant76(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = match super::___action434::<>(text, ___sym0, ___sym1) { -Ok(v) => v, -Err(e) => return Some(Err(e)), -}; -let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); -(2, ___symbol, 122) -} -377 => { -___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -378 => { -___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -379 => { -___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -380 => { -___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -381 => { -___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -382 => { -___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -383 => { -___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -384 => { -___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -385 => { -___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -386 => { -___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -387 => { -___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -388 => { -___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -389 => { -___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -390 => { -___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -391 => { -___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -392 => { -___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -393 => { -___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -394 => { -___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -395 => { -___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -396 => { -___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -397 => { -___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -398 => { -___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -399 => { -___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -400 => { -___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -401 => { -___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -402 => { -___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -403 => { -___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -404 => { -___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -405 => { -___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -406 => { -___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -407 => { -___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -408 => { -___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -409 => { -___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -410 => { -___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -411 => { -___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -412 => { -___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -413 => { -___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -414 => { -___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -415 => { -___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -416 => { -___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -417 => { -___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -418 => { -___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -419 => { -___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -420 => { -___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -421 => { -___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -422 => { -___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -423 => { -___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -424 => { -___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -425 => { -___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -426 => { -___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -427 => { -___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -428 => { -___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -429 => { -___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -430 => { -___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -431 => { -___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -432 => { -___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -433 => { -___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -434 => { -// StringLiteral = "StringLiteral" => ActionFn(415); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = match super::___action415::<>(text, ___sym0) { -Ok(v) => v, -Err(e) => return Some(Err(e)), -}; -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 145) -} -435 => { -___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -436 => { -___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -437 => { -___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -438 => { -___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -439 => { -___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -440 => { -___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -441 => { -___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -442 => { -___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -443 => { -___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -444 => { -___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -445 => { -___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -446 => { -___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -447 => { -___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -448 => { -___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -449 => { -___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -450 => { -___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -451 => { -___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -452 => { -___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -453 => { -___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -454 => { -___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -455 => { -___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -456 => { -___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -457 => { -___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -458 => { -___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -459 => { -___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -460 => { -___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -461 => { -___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -462 => { -___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -463 => { -___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -464 => { -___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -465 => { -___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -466 => { -___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -467 => { -___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -468 => { -___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -469 => { -___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -470 => { -___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -471 => { -___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -472 => { -___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -473 => { -___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -474 => { -___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -475 => { -___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -476 => { -___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -477 => { -___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -478 => { -___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -479 => { -___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -480 => { -___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -481 => { -___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -482 => { -___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -483 => { -___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -484 => { -___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -485 => { -___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -486 => { -___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -487 => { -___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -488 => { -___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -489 => { -___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -490 => { -___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -491 => { -___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -492 => { -___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -493 => { -___reduce493(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -494 => { -___reduce494(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -495 => { -___reduce495(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -496 => { -___reduce496(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -497 => { -___reduce497(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -498 => { -___reduce498(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -499 => { -___reduce499(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -500 => { -___reduce500(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -501 => { -___reduce501(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -502 => { -___reduce502(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -503 => { -___reduce503(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -504 => { -___reduce504(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) -} -505 => { -// ___Top = Top => ActionFn(0); -let ___sym0 = ___pop_Variant89(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action0::<>(text, ___sym0); -return Some(Ok(___nt)); -} -_ => panic!("invalid action code {}", ___action) -}; -let ___states_len = ___states.len(); -___states.truncate(___states_len - ___pop_states); -___symbols.push(___symbol); -let ___state = *___states.last().unwrap() as usize; -let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; -___states.push(___next_state); -None -} -fn ___pop_Variant9< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, (), usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant44< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, (Atom, String), usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant78< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, (NonterminalString, Vec), usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant38< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ActionKind, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant10< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Alternative, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant42< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Annotation, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant46< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, AssociatedType, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant20< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Atom, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant7< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Condition, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant58< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ConditionOp, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant12< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Conversion, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant60< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, EnumToken, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant61< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ExprSymbol, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant14< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, FieldPattern, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant65< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Grammar, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant62< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, GrammarItem, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant73< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, MatchContents, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant22< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, MatchItem, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant77< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, MatchToken, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant24< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, NonterminalString, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant16< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Parameter, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant80< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Path, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant26< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Pattern, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant82< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, PatternKind, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant84< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, RepeatOp, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant85< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, String, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant28< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Symbol, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant88< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, SymbolKind, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant76< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TerminalLiteral, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant75< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TerminalString, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant0< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Tok<'input>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant89< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Top, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant30< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TypeBound, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant32< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TypeBoundParameter, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant34< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TypeParameter, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant3< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, TypeRef, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant41< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant51< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant48< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant52< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant53< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant49< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant54< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant55< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant83< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant5< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant56< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant57< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant50< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant93< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, Visibility, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant93(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant18< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, WhereClause, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant37< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, usize, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant45< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option<(Atom, String)>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant39< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant40< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant72< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant8< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant59< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant63< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant74< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant79< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant67< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant81< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant87< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant2< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant90< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant91< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant91(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant92< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant92(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant4< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant64< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant68< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant6< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant69< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant71< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant70< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::option::Option>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant11< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant43< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant47< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant21< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant13< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant15< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant66< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant23< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant25< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant17< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant27< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant86< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant29< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant31< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant33< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant35< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant36< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant19< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, ::std::vec::Vec>, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -fn ___pop_Variant1< - 'input, ->( -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> -) -> (usize, &'input str, usize) - { -match ___symbols.pop().unwrap() { -(___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), -_ => panic!("symbol type mismatch") -} -} -pub(crate) fn ___reduce1< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// "::"? = "::" => ActionFn(128); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action128::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(1, ___symbol, 0) -} -pub(crate) fn ___reduce2< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// "::"? = => ActionFn(129); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action129::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(0, ___symbol, 0) -} -pub(crate) fn ___reduce3< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ";"? = ";" => ActionFn(145); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action145::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(1, ___symbol, 1) -} -pub(crate) fn ___reduce4< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ";"? = => ActionFn(146); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action146::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(0, ___symbol, 1) -} -pub(crate) fn ___reduce5< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// "mut"? = "mut" => ActionFn(131); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action131::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(1, ___symbol, 2) -} -pub(crate) fn ___reduce6< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// "mut"? = => ActionFn(132); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action132::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); -(0, ___symbol, 2) -} -pub(crate) fn ___reduce7< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("->" ) = "->", TypeRef => ActionFn(162); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action162::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(2, ___symbol, 3) -} -pub(crate) fn ___reduce8< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("->" )? = "->", TypeRef => ActionFn(308); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action308::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(2, ___symbol, 4) -} -pub(crate) fn ___reduce9< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("->" )? = => ActionFn(161); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action161::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(0, ___symbol, 4) -} -pub(crate) fn ___reduce10< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// (":" ) = ":", TypeRef => ActionFn(153); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action153::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(2, ___symbol, 5) -} -pub(crate) fn ___reduce11< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// (":" )? = ":", TypeRef => ActionFn(311); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action311::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(2, ___symbol, 6) -} -pub(crate) fn ___reduce12< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// (":" )? = => ActionFn(152); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action152::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(0, ___symbol, 6) -} -pub(crate) fn ___reduce13< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("<" > ">") = "<", Comma, ">" => ActionFn(158); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant5(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action158::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); -(3, ___symbol, 7) -} -pub(crate) fn ___reduce14< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("<" > ">")? = "<", Comma, ">" => ActionFn(314); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant5(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action314::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); -(3, ___symbol, 8) -} -pub(crate) fn ___reduce15< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("<" > ">")? = => ActionFn(157); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action157::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); -(0, ___symbol, 8) -} -pub(crate) fn ___reduce16< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("if" ) = "if", Cond => ActionFn(142); -let ___sym1 = ___pop_Variant7(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action142::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); -(2, ___symbol, 9) -} -pub(crate) fn ___reduce17< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("if" )? = "if", Cond => ActionFn(317); -let ___sym1 = ___pop_Variant7(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action317::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); -(2, ___symbol, 10) -} -pub(crate) fn ___reduce18< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ("if" )? = => ActionFn(141); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action141::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); -(0, ___symbol, 10) -} -pub(crate) fn ___reduce19< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// () = => ActionFn(154); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action154::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); -(0, ___symbol, 11) -} -pub(crate) fn ___reduce20< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = Alternative, "," => ActionFn(240); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant10(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action240::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(2, ___symbol, 12) -} -pub(crate) fn ___reduce21< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(238); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action238::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); -(0, ___symbol, 13) -} -pub(crate) fn ___reduce22< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(239); -let ___sym0 = ___pop_Variant11(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action239::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); -(1, ___symbol, 13) -} -pub(crate) fn ___reduce23< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = Alternative, "," => ActionFn(323); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant10(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action323::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); -(2, ___symbol, 14) -} -pub(crate) fn ___reduce24< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, Alternative, "," => ActionFn(324); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant10(___symbols); -let ___sym0 = ___pop_Variant11(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); -(3, ___symbol, 14) -} -pub(crate) fn ___reduce25< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = Conversion, "," => ActionFn(264); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant12(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action264::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); -(2, ___symbol, 15) -} -pub(crate) fn ___reduce26< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(262); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action262::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); -(0, ___symbol, 16) -} -pub(crate) fn ___reduce27< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(263); -let ___sym0 = ___pop_Variant13(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action263::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); -(1, ___symbol, 16) -} -pub(crate) fn ___reduce28< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = Conversion, "," => ActionFn(327); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant12(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action327::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); -(2, ___symbol, 17) -} -pub(crate) fn ___reduce29< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, Conversion, "," => ActionFn(328); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant12(___symbols); -let ___sym0 = ___pop_Variant13(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); -(3, ___symbol, 17) -} -pub(crate) fn ___reduce30< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = FieldPattern, "," => ActionFn(119); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant14(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action119::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); -(2, ___symbol, 18) -} -pub(crate) fn ___reduce31< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(117); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action117::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); -(0, ___symbol, 19) -} -pub(crate) fn ___reduce32< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(118); -let ___sym0 = ___pop_Variant15(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action118::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); -(1, ___symbol, 19) -} -pub(crate) fn ___reduce33< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = FieldPattern, "," => ActionFn(331); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant14(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action331::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); -(2, ___symbol, 20) -} -pub(crate) fn ___reduce34< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(332); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant14(___symbols); -let ___sym0 = ___pop_Variant15(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action332::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); -(3, ___symbol, 20) -} -pub(crate) fn ___reduce35< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = GrammarParameter, "," => ActionFn(230); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant16(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action230::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); -(2, ___symbol, 21) -} -pub(crate) fn ___reduce36< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(228); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action228::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); -(0, ___symbol, 22) -} -pub(crate) fn ___reduce37< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(229); -let ___sym0 = ___pop_Variant17(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action229::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); -(1, ___symbol, 22) -} -pub(crate) fn ___reduce38< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = GrammarParameter, "," => ActionFn(337); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant16(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action337::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); -(2, ___symbol, 23) -} -pub(crate) fn ___reduce39< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(338); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant16(___symbols); -let ___sym0 = ___pop_Variant17(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); -(3, ___symbol, 23) -} -pub(crate) fn ___reduce40< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = GrammarWhereClause, "," => ActionFn(204); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant18(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action204::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); -(2, ___symbol, 24) -} -pub(crate) fn ___reduce41< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(202); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action202::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); -(0, ___symbol, 25) -} -pub(crate) fn ___reduce42< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(203); -let ___sym0 = ___pop_Variant19(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action203::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); -(1, ___symbol, 25) -} -pub(crate) fn ___reduce43< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = GrammarWhereClause, "," => ActionFn(341); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant18(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action341::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); -(2, ___symbol, 26) -} -pub(crate) fn ___reduce44< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(342); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant18(___symbols); -let ___sym0 = ___pop_Variant19(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action342::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); -(3, ___symbol, 26) -} -pub(crate) fn ___reduce45< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "::") = Id, "::" => ActionFn(127); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action127::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(2, ___symbol, 27) -} -pub(crate) fn ___reduce46< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "::")* = => ActionFn(125); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action125::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(0, ___symbol, 28) -} -pub(crate) fn ___reduce47< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "::")* = ( "::")+ => ActionFn(126); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action126::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(1, ___symbol, 28) -} -pub(crate) fn ___reduce48< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "::")+ = Id, "::" => ActionFn(345); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action345::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(2, ___symbol, 29) -} -pub(crate) fn ___reduce49< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "::")+ = ( "::")+, Id, "::" => ActionFn(346); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action346::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(3, ___symbol, 29) -} -pub(crate) fn ___reduce50< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+") = Lifetime, "+" => ActionFn(207); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action207::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(2, ___symbol, 30) -} -pub(crate) fn ___reduce51< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")* = => ActionFn(205); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action205::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(0, ___symbol, 31) -} -pub(crate) fn ___reduce52< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")* = ( "+")+ => ActionFn(206); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action206::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(1, ___symbol, 31) -} -pub(crate) fn ___reduce53< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")+ = Lifetime, "+" => ActionFn(351); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action351::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(2, ___symbol, 32) -} -pub(crate) fn ___reduce54< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(352); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(3, ___symbol, 32) -} -pub(crate) fn ___reduce55< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = Lifetime, "," => ActionFn(210); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action210::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(2, ___symbol, 33) -} -pub(crate) fn ___reduce56< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(208); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action208::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(0, ___symbol, 34) -} -pub(crate) fn ___reduce57< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(209); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action209::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(1, ___symbol, 34) -} -pub(crate) fn ___reduce58< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = Lifetime, "," => ActionFn(355); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action355::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(2, ___symbol, 35) -} -pub(crate) fn ___reduce59< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(356); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); -(3, ___symbol, 35) -} -pub(crate) fn ___reduce60< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = MatchItem, "," => ActionFn(259); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant22(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action259::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); -(2, ___symbol, 36) -} -pub(crate) fn ___reduce61< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(257); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action257::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); -(0, ___symbol, 37) -} -pub(crate) fn ___reduce62< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(258); -let ___sym0 = ___pop_Variant23(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action258::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); -(1, ___symbol, 37) -} -pub(crate) fn ___reduce63< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = MatchItem, "," => ActionFn(359); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant22(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action359::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); -(2, ___symbol, 38) -} -pub(crate) fn ___reduce64< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(360); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant22(___symbols); -let ___sym0 = ___pop_Variant23(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); -(3, ___symbol, 38) -} -pub(crate) fn ___reduce65< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = NotMacroId, "," => ActionFn(235); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action235::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); -(2, ___symbol, 39) -} -pub(crate) fn ___reduce66< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(233); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action233::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); -(0, ___symbol, 40) -} -pub(crate) fn ___reduce67< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(234); -let ___sym0 = ___pop_Variant25(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action234::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); -(1, ___symbol, 40) -} -pub(crate) fn ___reduce68< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = NotMacroId, "," => ActionFn(363); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action363::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); -(2, ___symbol, 41) -} -pub(crate) fn ___reduce69< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(364); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant24(___symbols); -let ___sym0 = ___pop_Variant25(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); -(3, ___symbol, 41) -} -pub(crate) fn ___reduce70< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = Pattern, "," => ActionFn(269); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant26(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action269::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); -(2, ___symbol, 42) -} -pub(crate) fn ___reduce71< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(267); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action267::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); -(0, ___symbol, 43) -} -pub(crate) fn ___reduce72< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(268); -let ___sym0 = ___pop_Variant27(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action268::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); -(1, ___symbol, 43) -} -pub(crate) fn ___reduce73< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = Pattern, "," => ActionFn(367); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant26(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action367::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); -(2, ___symbol, 44) -} -pub(crate) fn ___reduce74< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, Pattern, "," => ActionFn(368); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant26(___symbols); -let ___sym0 = ___pop_Variant27(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); -(3, ___symbol, 44) -} -pub(crate) fn ___reduce75< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = Symbol, "," => ActionFn(245); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action245::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(2, ___symbol, 45) -} -pub(crate) fn ___reduce76< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(243); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action243::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(0, ___symbol, 46) -} -pub(crate) fn ___reduce77< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(244); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action244::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(1, ___symbol, 46) -} -pub(crate) fn ___reduce78< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = Symbol, "," => ActionFn(371); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action371::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(2, ___symbol, 47) -} -pub(crate) fn ___reduce79< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, Symbol, "," => ActionFn(372); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant28(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(3, ___symbol, 47) -} -pub(crate) fn ___reduce80< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+") = TypeBound, "+" => ActionFn(215); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant30(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action215::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(2, ___symbol, 48) -} -pub(crate) fn ___reduce81< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")* = => ActionFn(213); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action213::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); -(0, ___symbol, 49) -} -pub(crate) fn ___reduce82< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")* = ( "+")+ => ActionFn(214); -let ___sym0 = ___pop_Variant31(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action214::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); -(1, ___symbol, 49) -} -pub(crate) fn ___reduce83< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")+ = TypeBound, "+" => ActionFn(375); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant30(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action375::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); -(2, ___symbol, 50) -} -pub(crate) fn ___reduce84< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(376); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant30(___symbols); -let ___sym0 = ___pop_Variant31(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); -(3, ___symbol, 50) -} -pub(crate) fn ___reduce85< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = TypeBoundParameter, "," => ActionFn(225); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant32(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action225::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); -(2, ___symbol, 51) -} -pub(crate) fn ___reduce86< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(223); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action223::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); -(0, ___symbol, 52) -} -pub(crate) fn ___reduce87< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(224); -let ___sym0 = ___pop_Variant33(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action224::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); -(1, ___symbol, 52) -} -pub(crate) fn ___reduce88< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = TypeBoundParameter, "," => ActionFn(379); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant32(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action379::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); -(2, ___symbol, 53) -} -pub(crate) fn ___reduce89< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(380); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant32(___symbols); -let ___sym0 = ___pop_Variant33(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); -(3, ___symbol, 53) -} -pub(crate) fn ___reduce90< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = TypeParameter, "," => ActionFn(199); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant34(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action199::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); -(2, ___symbol, 54) -} -pub(crate) fn ___reduce91< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(197); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action197::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); -(0, ___symbol, 55) -} -pub(crate) fn ___reduce92< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(198); -let ___sym0 = ___pop_Variant35(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action198::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); -(1, ___symbol, 55) -} -pub(crate) fn ___reduce93< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = TypeParameter, "," => ActionFn(383); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant34(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action383::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); -(2, ___symbol, 56) -} -pub(crate) fn ___reduce94< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(384); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant34(___symbols); -let ___sym0 = ___pop_Variant35(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); -(3, ___symbol, 56) -} -pub(crate) fn ___reduce95< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = TypeRef, "," => ActionFn(220); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action220::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(2, ___symbol, 57) -} -pub(crate) fn ___reduce96< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(218); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action218::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(0, ___symbol, 58) -} -pub(crate) fn ___reduce97< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(219); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action219::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(1, ___symbol, 58) -} -pub(crate) fn ___reduce98< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = TypeRef, "," => ActionFn(387); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action387::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(2, ___symbol, 59) -} -pub(crate) fn ___reduce99< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(388); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action388::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(3, ___symbol, 59) -} -pub(crate) fn ___reduce100< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",") = TypeRefOrLifetime, "," => ActionFn(250); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action250::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(2, ___symbol, 60) -} -pub(crate) fn ___reduce101< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = => ActionFn(248); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action248::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(0, ___symbol, 61) -} -pub(crate) fn ___reduce102< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")* = ( ",")+ => ActionFn(249); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action249::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(1, ___symbol, 61) -} -pub(crate) fn ___reduce103< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = TypeRefOrLifetime, "," => ActionFn(391); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action391::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(2, ___symbol, 62) -} -pub(crate) fn ___reduce104< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(392); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action392::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); -(3, ___symbol, 62) -} -pub(crate) fn ___reduce105< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// @L = => ActionFn(180); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action180::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); -(0, ___symbol, 63) -} -pub(crate) fn ___reduce106< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// @R = => ActionFn(179); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action179::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); -(0, ___symbol, 64) -} -pub(crate) fn ___reduce107< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action = "=>@L" => ActionFn(41); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action41::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); -(1, ___symbol, 65) -} -pub(crate) fn ___reduce108< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action = "=>@R" => ActionFn(42); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action42::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); -(1, ___symbol, 65) -} -pub(crate) fn ___reduce109< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action = "=>" => ActionFn(43); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action43::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); -(1, ___symbol, 65) -} -pub(crate) fn ___reduce110< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action = "=>?" => ActionFn(44); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action44::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); -(1, ___symbol, 65) -} -pub(crate) fn ___reduce111< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action? = Action => ActionFn(138); -let ___sym0 = ___pop_Variant38(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action138::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); -(1, ___symbol, 66) -} -pub(crate) fn ___reduce112< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Action? = => ActionFn(139); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action139::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); -(0, ___symbol, 66) -} -pub(crate) fn ___reduce113< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = Symbol+, "if", Cond, Action => ActionFn(443); -let ___sym3 = ___pop_Variant38(___symbols); -let ___sym2 = ___pop_Variant7(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action443::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(4, ___symbol, 67) -} -pub(crate) fn ___reduce114< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = Symbol+, "if", Cond => ActionFn(444); -let ___sym2 = ___pop_Variant7(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(3, ___symbol, 67) -} -pub(crate) fn ___reduce115< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = Symbol+, Action => ActionFn(445); -let ___sym1 = ___pop_Variant38(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action445::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(2, ___symbol, 67) -} -pub(crate) fn ___reduce116< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = Symbol+ => ActionFn(446); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action446::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(1, ___symbol, 67) -} -pub(crate) fn ___reduce117< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = "if", Cond, Action => ActionFn(421); -let ___sym2 = ___pop_Variant38(___symbols); -let ___sym1 = ___pop_Variant7(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(3, ___symbol, 67) -} -pub(crate) fn ___reduce118< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative = Action => ActionFn(422); -let ___sym0 = ___pop_Variant38(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action422::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); -(1, ___symbol, 67) -} -pub(crate) fn ___reduce119< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative? = Alternative => ActionFn(236); -let ___sym0 = ___pop_Variant10(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action236::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); -(1, ___symbol, 68) -} -pub(crate) fn ___reduce120< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternative? = => ActionFn(237); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action237::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); -(0, ___symbol, 68) -} -pub(crate) fn ___reduce121< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternatives = Alternative, ";" => ActionFn(37); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant10(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action37::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(2, ___symbol, 69) -} -pub(crate) fn ___reduce122< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternatives = "{", Comma, "}", ";" => ActionFn(304); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant41(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action304::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(4, ___symbol, 69) -} -pub(crate) fn ___reduce123< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Alternatives = "{", Comma, "}" => ActionFn(305); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant41(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action305::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(3, ___symbol, 69) -} -pub(crate) fn ___reduce124< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation = "#", "[", Id, AnnotationArg, "]" => ActionFn(457); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant44(___symbols); -let ___sym2 = ___pop_Variant20(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action457::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); -(5, ___symbol, 70) -} -pub(crate) fn ___reduce125< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation = "#", "[", Id, "]" => ActionFn(458); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant20(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); -(4, ___symbol, 70) -} -pub(crate) fn ___reduce126< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation* = => ActionFn(181); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action181::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); -(0, ___symbol, 71) -} -pub(crate) fn ___reduce127< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation* = Annotation+ => ActionFn(182); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action182::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); -(1, ___symbol, 71) -} -pub(crate) fn ___reduce128< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation+ = Annotation => ActionFn(191); -let ___sym0 = ___pop_Variant42(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action191::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); -(1, ___symbol, 72) -} -pub(crate) fn ___reduce129< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Annotation+ = Annotation+, Annotation => ActionFn(192); -let ___sym1 = ___pop_Variant42(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action192::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); -(2, ___symbol, 72) -} -pub(crate) fn ___reduce130< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AnnotationArg = "(", Id, "=", "StringLiteral", ")" => ActionFn(32); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant1(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); -(5, ___symbol, 73) -} -pub(crate) fn ___reduce131< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AnnotationArg? = AnnotationArg => ActionFn(149); -let ___sym0 = ___pop_Variant44(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action149::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); -(1, ___symbol, 74) -} -pub(crate) fn ___reduce132< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AnnotationArg? = => ActionFn(150); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action150::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); -(0, ___symbol, 74) -} -pub(crate) fn ___reduce133< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(424); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant3(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action424::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); -(5, ___symbol, 75) -} -pub(crate) fn ___reduce134< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AssociatedType* = => ActionFn(123); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action123::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); -(0, ___symbol, 76) -} -pub(crate) fn ___reduce135< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AssociatedType* = AssociatedType+ => ActionFn(124); -let ___sym0 = ___pop_Variant47(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action124::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); -(1, ___symbol, 76) -} -pub(crate) fn ___reduce136< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AssociatedType+ = AssociatedType => ActionFn(253); -let ___sym0 = ___pop_Variant46(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action253::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); -(1, ___symbol, 77) -} -pub(crate) fn ___reduce137< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(254); -let ___sym1 = ___pop_Variant46(___symbols); -let ___sym0 = ___pop_Variant47(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action254::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); -(2, ___symbol, 77) -} -pub(crate) fn ___reduce138< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = Alternative => ActionFn(447); -let ___sym0 = ___pop_Variant10(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action447::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(1, ___symbol, 78) -} -pub(crate) fn ___reduce139< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(448); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action448::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(0, ___symbol, 78) -} -pub(crate) fn ___reduce140< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, Alternative => ActionFn(449); -let ___sym1 = ___pop_Variant10(___symbols); -let ___sym0 = ___pop_Variant11(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action449::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(2, ___symbol, 78) -} -pub(crate) fn ___reduce141< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(450); -let ___sym0 = ___pop_Variant11(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action450::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); -(1, ___symbol, 78) -} -pub(crate) fn ___reduce142< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = Conversion => ActionFn(465); -let ___sym0 = ___pop_Variant12(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action465::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); -(1, ___symbol, 79) -} -pub(crate) fn ___reduce143< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(466); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action466::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); -(0, ___symbol, 79) -} -pub(crate) fn ___reduce144< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, Conversion => ActionFn(467); -let ___sym1 = ___pop_Variant12(___symbols); -let ___sym0 = ___pop_Variant13(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action467::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); -(2, ___symbol, 79) -} -pub(crate) fn ___reduce145< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(468); -let ___sym0 = ___pop_Variant13(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action468::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); -(1, ___symbol, 79) -} -pub(crate) fn ___reduce146< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = GrammarParameter => ActionFn(487); -let ___sym0 = ___pop_Variant16(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action487::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); -(1, ___symbol, 80) -} -pub(crate) fn ___reduce147< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(488); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action488::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); -(0, ___symbol, 80) -} -pub(crate) fn ___reduce148< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, GrammarParameter => ActionFn(489); -let ___sym1 = ___pop_Variant16(___symbols); -let ___sym0 = ___pop_Variant17(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action489::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); -(2, ___symbol, 80) -} -pub(crate) fn ___reduce149< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(490); -let ___sym0 = ___pop_Variant17(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action490::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); -(1, ___symbol, 80) -} -pub(crate) fn ___reduce150< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = GrammarWhereClause => ActionFn(515); -let ___sym0 = ___pop_Variant18(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action515::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); -(1, ___symbol, 81) -} -pub(crate) fn ___reduce151< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(516); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action516::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); -(0, ___symbol, 81) -} -pub(crate) fn ___reduce152< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, GrammarWhereClause => ActionFn(517); -let ___sym1 = ___pop_Variant18(___symbols); -let ___sym0 = ___pop_Variant19(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action517::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); -(2, ___symbol, 81) -} -pub(crate) fn ___reduce153< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(518); -let ___sym0 = ___pop_Variant19(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action518::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); -(1, ___symbol, 81) -} -pub(crate) fn ___reduce154< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = Lifetime => ActionFn(551); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action551::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(1, ___symbol, 82) -} -pub(crate) fn ___reduce155< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(552); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action552::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(0, ___symbol, 82) -} -pub(crate) fn ___reduce156< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, Lifetime => ActionFn(553); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action553::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(2, ___symbol, 82) -} -pub(crate) fn ___reduce157< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(554); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action554::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(1, ___symbol, 82) -} -pub(crate) fn ___reduce158< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = MatchItem => ActionFn(563); -let ___sym0 = ___pop_Variant22(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action563::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); -(1, ___symbol, 83) -} -pub(crate) fn ___reduce159< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(564); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action564::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); -(0, ___symbol, 83) -} -pub(crate) fn ___reduce160< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, MatchItem => ActionFn(565); -let ___sym1 = ___pop_Variant22(___symbols); -let ___sym0 = ___pop_Variant23(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action565::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); -(2, ___symbol, 83) -} -pub(crate) fn ___reduce161< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(566); -let ___sym0 = ___pop_Variant23(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action566::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); -(1, ___symbol, 83) -} -pub(crate) fn ___reduce162< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = NotMacroId => ActionFn(567); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action567::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); -(1, ___symbol, 84) -} -pub(crate) fn ___reduce163< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(568); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action568::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); -(0, ___symbol, 84) -} -pub(crate) fn ___reduce164< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, NotMacroId => ActionFn(569); -let ___sym1 = ___pop_Variant24(___symbols); -let ___sym0 = ___pop_Variant25(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action569::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); -(2, ___symbol, 84) -} -pub(crate) fn ___reduce165< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(570); -let ___sym0 = ___pop_Variant25(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action570::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); -(1, ___symbol, 84) -} -pub(crate) fn ___reduce166< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = Pattern => ActionFn(571); -let ___sym0 = ___pop_Variant26(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action571::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); -(1, ___symbol, 85) -} -pub(crate) fn ___reduce167< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(572); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action572::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); -(0, ___symbol, 85) -} -pub(crate) fn ___reduce168< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, Pattern => ActionFn(573); -let ___sym1 = ___pop_Variant26(___symbols); -let ___sym0 = ___pop_Variant27(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action573::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); -(2, ___symbol, 85) -} -pub(crate) fn ___reduce169< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(574); -let ___sym0 = ___pop_Variant27(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action574::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); -(1, ___symbol, 85) -} -pub(crate) fn ___reduce170< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = Symbol => ActionFn(641); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action641::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); -(1, ___symbol, 86) -} -pub(crate) fn ___reduce171< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(642); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action642::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); -(0, ___symbol, 86) -} -pub(crate) fn ___reduce172< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, Symbol => ActionFn(643); -let ___sym1 = ___pop_Variant28(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action643::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); -(2, ___symbol, 86) -} -pub(crate) fn ___reduce173< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(644); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action644::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); -(1, ___symbol, 86) -} -pub(crate) fn ___reduce174< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = TypeBoundParameter => ActionFn(649); -let ___sym0 = ___pop_Variant32(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action649::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); -(1, ___symbol, 87) -} -pub(crate) fn ___reduce175< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(650); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action650::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); -(0, ___symbol, 87) -} -pub(crate) fn ___reduce176< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, TypeBoundParameter => ActionFn(651); -let ___sym1 = ___pop_Variant32(___symbols); -let ___sym0 = ___pop_Variant33(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action651::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); -(2, ___symbol, 87) -} -pub(crate) fn ___reduce177< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(652); -let ___sym0 = ___pop_Variant33(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action652::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); -(1, ___symbol, 87) -} -pub(crate) fn ___reduce178< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = TypeParameter => ActionFn(653); -let ___sym0 = ___pop_Variant34(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action653::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); -(1, ___symbol, 88) -} -pub(crate) fn ___reduce179< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(654); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action654::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); -(0, ___symbol, 88) -} -pub(crate) fn ___reduce180< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, TypeParameter => ActionFn(655); -let ___sym1 = ___pop_Variant34(___symbols); -let ___sym0 = ___pop_Variant35(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action655::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); -(2, ___symbol, 88) -} -pub(crate) fn ___reduce181< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(656); -let ___sym0 = ___pop_Variant35(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action656::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); -(1, ___symbol, 88) -} -pub(crate) fn ___reduce182< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = TypeRef => ActionFn(657); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action657::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(1, ___symbol, 89) -} -pub(crate) fn ___reduce183< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(658); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action658::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(0, ___symbol, 89) -} -pub(crate) fn ___reduce184< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, TypeRef => ActionFn(659); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action659::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(2, ___symbol, 89) -} -pub(crate) fn ___reduce185< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(660); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action660::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(1, ___symbol, 89) -} -pub(crate) fn ___reduce186< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = TypeRefOrLifetime => ActionFn(661); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action661::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(1, ___symbol, 90) -} -pub(crate) fn ___reduce187< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = => ActionFn(662); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action662::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(0, ___symbol, 90) -} -pub(crate) fn ___reduce188< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+, TypeRefOrLifetime => ActionFn(663); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action663::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(2, ___symbol, 90) -} -pub(crate) fn ___reduce189< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Comma = ( ",")+ => ActionFn(664); -let ___sym0 = ___pop_Variant36(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action664::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); -(1, ___symbol, 90) -} -pub(crate) fn ___reduce190< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Cond = NotMacroId, CondOp, StringLiteral => ActionFn(425); -let ___sym2 = ___pop_Variant20(___symbols); -let ___sym1 = ___pop_Variant58(___symbols); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action425::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); -(3, ___symbol, 91) -} -pub(crate) fn ___reduce191< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// CondOp = "==" => ActionFn(46); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action46::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); -(1, ___symbol, 92) -} -pub(crate) fn ___reduce192< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// CondOp = "!=" => ActionFn(47); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action47::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); -(1, ___symbol, 92) -} -pub(crate) fn ___reduce193< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// CondOp = "~~" => ActionFn(48); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action48::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); -(1, ___symbol, 92) -} -pub(crate) fn ___reduce194< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// CondOp = "!~" => ActionFn(49); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action49::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); -(1, ___symbol, 92) -} -pub(crate) fn ___reduce196< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Conversion? = Conversion => ActionFn(260); -let ___sym0 = ___pop_Variant12(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action260::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); -(1, ___symbol, 94) -} -pub(crate) fn ___reduce197< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Conversion? = => ActionFn(261); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action261::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); -(0, ___symbol, 94) -} -pub(crate) fn ___reduce198< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(427); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant48(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action427::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); -(5, ___symbol, 95) -} -pub(crate) fn ___reduce199< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Escape = "Escape" => ActionFn(105); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action105::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 96) -} -pub(crate) fn ___reduce200< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExprSymbol = => ActionFn(639); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action639::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); -(0, ___symbol, 97) -} -pub(crate) fn ___reduce201< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExprSymbol = Symbol+ => ActionFn(640); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action640::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); -(1, ___symbol, 97) -} -pub(crate) fn ___reduce202< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", EnumToken, "}" => ActionFn(459); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant60(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(4, ___symbol, 98) -} -pub(crate) fn ___reduce203< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(460); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant47(___symbols); -let ___sym2 = ___pop_Variant60(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(5, ___symbol, 98) -} -pub(crate) fn ___reduce204< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(461); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant60(___symbols); -let ___sym2 = ___pop_Variant47(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(5, ___symbol, 98) -} -pub(crate) fn ___reduce205< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(462); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant47(___symbols); -let ___sym3 = ___pop_Variant60(___symbols); -let ___sym2 = ___pop_Variant47(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(6, ___symbol, 98) -} -pub(crate) fn ___reduce206< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", "}" => ActionFn(463); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(3, ___symbol, 98) -} -pub(crate) fn ___reduce207< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(464); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant47(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(4, ___symbol, 98) -} -pub(crate) fn ___reduce208< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// FieldPattern = Id, ":", Pattern => ActionFn(430); -let ___sym2 = ___pop_Variant26(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); -(3, ___symbol, 99) -} -pub(crate) fn ___reduce209< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// FieldPattern? = FieldPattern => ActionFn(115); -let ___sym0 = ___pop_Variant14(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action115::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); -(1, ___symbol, 100) -} -pub(crate) fn ___reduce210< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// FieldPattern? = => ActionFn(116); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action116::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); -(0, ___symbol, 100) -} -pub(crate) fn ___reduce211< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ForAll = "for", "<", Comma, ">" => ActionFn(13); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant51(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action13::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(4, ___symbol, 101) -} -pub(crate) fn ___reduce212< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ForAll? = ForAll => ActionFn(166); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action166::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); -(1, ___symbol, 102) -} -pub(crate) fn ___reduce213< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ForAll? = => ActionFn(167); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action167::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); -(0, ___symbol, 102) -} -pub(crate) fn ___reduce214< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce215< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(666); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce216< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(667); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce217< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(668); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce218< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(669); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce219< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(670); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce220< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(671); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce221< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(672); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce222< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(673); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant49(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce223< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(674); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce224< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(675); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce225< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(676); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce226< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarParameters, ";" => ActionFn(677); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant49(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce227< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(678); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce228< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(679); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce229< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(680); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce230< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(681); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce231< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(682); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action682::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce232< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(683); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce233< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(684); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce234< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(685); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce235< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(686); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce236< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(687); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce237< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(688); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce238< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(689); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant50(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce239< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(690); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce240< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(691); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce241< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(692); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce242< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", ";" => ActionFn(693); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action693::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(2, ___symbol, 103) -} -pub(crate) fn ___reduce243< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", ";" => ActionFn(694); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce244< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(695); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce245< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(696); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce246< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce247< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(698); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce248< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(699); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce249< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(700); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce250< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(701); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce251< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(702); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce252< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(703); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce253< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(704); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce254< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant49(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce255< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(706); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce256< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(707); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce257< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(708); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce258< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(709); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant49(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce259< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(710); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce260< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(711); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce261< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(712); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce262< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce263< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(714); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce264< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(715); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce265< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(716); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce266< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(717); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce267< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(718); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce268< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(719); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce269< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(720); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce270< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(721); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant50(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce271< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(722); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce272< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(723); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce273< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(724); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce274< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = "grammar", ";", GrammarItem+ => ActionFn(725); -let ___sym2 = ___pop_Variant66(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce275< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(726); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce276< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(727); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce277< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(728); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce278< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce279< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(730); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce280< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(731); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce281< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(732); -let ___sym7 = ___pop_Variant0(___symbols); -let ___sym6 = ___pop_Variant50(___symbols); -let ___sym5 = ___pop_Variant49(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce282< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(733); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce283< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(734); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce284< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(735); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce285< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(736); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant49(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce286< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(737); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce287< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(738); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce288< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(739); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce289< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(740); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce290< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(741); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce291< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(742); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce292< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(743); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce293< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(744); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce294< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(745); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce295< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(746); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce296< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(747); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce297< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(748); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce298< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(749); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce299< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(750); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce300< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(751); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce301< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(752); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce302< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(753); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce303< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(754); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce304< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(755); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce305< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(756); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce306< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", ";" => ActionFn(757); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(3, ___symbol, 103) -} -pub(crate) fn ___reduce307< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(758); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce308< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(759); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce309< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(760); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce310< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce311< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(762); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce312< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(763); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce313< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(764); -let ___sym8 = ___pop_Variant66(___symbols); -let ___sym7 = ___pop_Variant0(___symbols); -let ___sym6 = ___pop_Variant50(___symbols); -let ___sym5 = ___pop_Variant49(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym8.2.clone(); -let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(9, ___symbol, 103) -} -pub(crate) fn ___reduce314< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(765); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce315< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(766); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce316< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(767); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce317< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(768); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant49(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce318< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce319< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(770); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce320< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(771); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce321< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(772); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce322< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(773); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant49(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce323< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(774); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce324< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(775); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant49(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce325< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(776); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant49(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce326< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce327< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(778); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce328< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(779); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce329< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(780); -let ___sym7 = ___pop_Variant66(___symbols); -let ___sym6 = ___pop_Variant0(___symbols); -let ___sym5 = ___pop_Variant50(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym7.2.clone(); -let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(8, ___symbol, 103) -} -pub(crate) fn ___reduce330< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(781); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant56(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce331< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(782); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action782::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce332< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(783); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant56(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action783::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce333< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(784); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant56(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action784::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce334< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(785); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant50(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action785::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce335< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(786); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action786::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce336< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(787); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant50(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action787::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce337< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(788); -let ___sym6 = ___pop_Variant66(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant50(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action788::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(7, ___symbol, 103) -} -pub(crate) fn ___reduce338< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(789); -let ___sym3 = ___pop_Variant66(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action789::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(4, ___symbol, 103) -} -pub(crate) fn ___reduce339< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(790); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action790::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce340< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(791); -let ___sym4 = ___pop_Variant66(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant43(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action791::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(5, ___symbol, 103) -} -pub(crate) fn ___reduce341< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(792); -let ___sym5 = ___pop_Variant66(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant43(___symbols); -let ___sym1 = ___pop_Variant66(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action792::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); -(6, ___symbol, 103) -} -pub(crate) fn ___reduce342< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem = Use => ActionFn(23); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action23::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(1, ___symbol, 104) -} -pub(crate) fn ___reduce343< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem = MatchToken => ActionFn(24); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action24::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(1, ___symbol, 104) -} -pub(crate) fn ___reduce344< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem = ExternToken => ActionFn(25); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action25::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(1, ___symbol, 104) -} -pub(crate) fn ___reduce345< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem = Nonterminal => ActionFn(26); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action26::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(1, ___symbol, 104) -} -pub(crate) fn ___reduce346< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem* = => ActionFn(171); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action171::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(0, ___symbol, 105) -} -pub(crate) fn ___reduce347< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem* = GrammarItem+ => ActionFn(172); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action172::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(1, ___symbol, 105) -} -pub(crate) fn ___reduce348< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem+ = GrammarItem => ActionFn(193); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action193::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(1, ___symbol, 106) -} -pub(crate) fn ___reduce349< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(194); -let ___sym1 = ___pop_Variant62(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action194::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(2, ___symbol, 106) -} -pub(crate) fn ___reduce350< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameter = Id, ":", TypeRef => ActionFn(22); -let ___sym2 = ___pop_Variant3(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action22::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); -(3, ___symbol, 107) -} -pub(crate) fn ___reduce351< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameter? = GrammarParameter => ActionFn(226); -let ___sym0 = ___pop_Variant16(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action226::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); -(1, ___symbol, 108) -} -pub(crate) fn ___reduce352< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameter? = => ActionFn(227); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action227::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); -(0, ___symbol, 108) -} -pub(crate) fn ___reduce353< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameters = "(", Comma, ")" => ActionFn(21); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant49(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); -(3, ___symbol, 109) -} -pub(crate) fn ___reduce354< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameters? = GrammarParameters => ActionFn(175); -let ___sym0 = ___pop_Variant49(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action175::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); -(1, ___symbol, 110) -} -pub(crate) fn ___reduce355< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarParameters? = => ActionFn(176); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action176::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); -(0, ___symbol, 110) -} -pub(crate) fn ___reduce356< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarTypeParameters = "<", Comma, ">" => ActionFn(7); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant56(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action7::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); -(3, ___symbol, 111) -} -pub(crate) fn ___reduce357< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarTypeParameters? = GrammarTypeParameters => ActionFn(177); -let ___sym0 = ___pop_Variant56(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action177::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); -(1, ___symbol, 112) -} -pub(crate) fn ___reduce358< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarTypeParameters? = => ActionFn(178); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action178::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); -(0, ___symbol, 112) -} -pub(crate) fn ___reduce359< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClause = Lifetime, ":", Plus => ActionFn(11); -let ___sym2 = ___pop_Variant51(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action11::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); -(3, ___symbol, 113) -} -pub(crate) fn ___reduce360< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(473); -let ___sym3 = ___pop_Variant83(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action473::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); -(4, ___symbol, 113) -} -pub(crate) fn ___reduce361< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(474); -let ___sym2 = ___pop_Variant83(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action474::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); -(3, ___symbol, 113) -} -pub(crate) fn ___reduce362< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClause? = GrammarWhereClause => ActionFn(200); -let ___sym0 = ___pop_Variant18(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action200::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); -(1, ___symbol, 114) -} -pub(crate) fn ___reduce363< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClause? = => ActionFn(201); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action201::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); -(0, ___symbol, 114) -} -pub(crate) fn ___reduce364< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClauses = "where", Comma => ActionFn(10); -let ___sym1 = ___pop_Variant50(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action10::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); -(2, ___symbol, 115) -} -pub(crate) fn ___reduce365< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClauses? = GrammarWhereClauses => ActionFn(173); -let ___sym0 = ___pop_Variant50(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action173::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); -(1, ___symbol, 116) -} -pub(crate) fn ___reduce366< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// GrammarWhereClauses? = => ActionFn(174); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action174::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); -(0, ___symbol, 116) -} -pub(crate) fn ___reduce367< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Id = "Id" => ActionFn(103); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action103::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 117) -} -pub(crate) fn ___reduce368< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Id = "MacroId" => ActionFn(104); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action104::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 117) -} -pub(crate) fn ___reduce369< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Lifetime = "Lifetime" => ActionFn(106); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action106::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 118) -} -pub(crate) fn ___reduce370< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Lifetime? = Lifetime => ActionFn(133); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action133::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); -(1, ___symbol, 119) -} -pub(crate) fn ___reduce371< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Lifetime? = => ActionFn(134); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action134::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); -(0, ___symbol, 119) -} -pub(crate) fn ___reduce372< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MacroId = "MacroId" => ActionFn(101); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action101::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); -(1, ___symbol, 120) -} -pub(crate) fn ___reduce373< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchContents = Comma => ActionFn(81); -let ___sym0 = ___pop_Variant52(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action81::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); -(1, ___symbol, 121) -} -pub(crate) fn ___reduce374< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchItem = "_" => ActionFn(432); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action432::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); -(1, ___symbol, 122) -} -pub(crate) fn ___reduce375< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchItem = MatchSymbol => ActionFn(433); -let ___sym0 = ___pop_Variant76(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action433::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); -(1, ___symbol, 122) -} -pub(crate) fn ___reduce377< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchItem? = MatchItem => ActionFn(255); -let ___sym0 = ___pop_Variant22(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action255::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); -(1, ___symbol, 123) -} -pub(crate) fn ___reduce378< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchItem? = => ActionFn(256); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action256::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); -(0, ___symbol, 123) -} -pub(crate) fn ___reduce379< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchMapping = Terminal => ActionFn(86); -let ___sym0 = ___pop_Variant75(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action86::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); -(1, ___symbol, 124) -} -pub(crate) fn ___reduce380< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchSymbol = QuotedLiteral => ActionFn(85); -let ___sym0 = ___pop_Variant76(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action85::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); -(1, ___symbol, 125) -} -pub(crate) fn ___reduce381< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchToken = MatchTokenInt => ActionFn(78); -let ___sym0 = ___pop_Variant77(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action78::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(1, ___symbol, 126) -} -pub(crate) fn ___reduce382< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(79); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant73(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant77(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action79::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); -(5, ___symbol, 127) -} -pub(crate) fn ___reduce383< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(435); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant73(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); -(4, ___symbol, 127) -} -pub(crate) fn ___reduce384< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(453); -let ___sym5 = ___pop_Variant41(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant3(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant78(___symbols); -let ___sym0 = ___pop_Variant93(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(6, ___symbol, 128) -} -pub(crate) fn ___reduce385< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(454); -let ___sym6 = ___pop_Variant41(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant3(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant78(___symbols); -let ___sym1 = ___pop_Variant93(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action454::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(7, ___symbol, 128) -} -pub(crate) fn ___reduce386< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(455); -let ___sym3 = ___pop_Variant41(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant78(___symbols); -let ___sym0 = ___pop_Variant93(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action455::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(4, ___symbol, 128) -} -pub(crate) fn ___reduce387< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(456); -let ___sym4 = ___pop_Variant41(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant78(___symbols); -let ___sym1 = ___pop_Variant93(___symbols); -let ___sym0 = ___pop_Variant43(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action456::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(5, ___symbol, 128) -} -pub(crate) fn ___reduce388< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NonterminalName = MacroId, "<", Comma, ">" => ActionFn(34); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant53(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action34::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); -(4, ___symbol, 129) -} -pub(crate) fn ___reduce389< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NonterminalName = NotMacroId => ActionFn(35); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action35::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); -(1, ___symbol, 129) -} -pub(crate) fn ___reduce390< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NonterminalName = "Escape" => ActionFn(36); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action36::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); -(1, ___symbol, 129) -} -pub(crate) fn ___reduce391< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NotMacroId = "Id" => ActionFn(102); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action102::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); -(1, ___symbol, 130) -} -pub(crate) fn ___reduce392< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NotMacroId? = NotMacroId => ActionFn(231); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action231::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); -(1, ___symbol, 131) -} -pub(crate) fn ___reduce393< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// NotMacroId? = => ActionFn(232); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action232::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); -(0, ___symbol, 131) -} -pub(crate) fn ___reduce394< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Path = "::", Id => ActionFn(347); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action347::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); -(2, ___symbol, 132) -} -pub(crate) fn ___reduce395< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Path = "::", ( "::")+, Id => ActionFn(348); -let ___sym2 = ___pop_Variant20(___symbols); -let ___sym1 = ___pop_Variant21(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); -(3, ___symbol, 132) -} -pub(crate) fn ___reduce396< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Path = Id => ActionFn(349); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action349::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); -(1, ___symbol, 132) -} -pub(crate) fn ___reduce397< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Path = ( "::")+, Id => ActionFn(350); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action350::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); -(2, ___symbol, 132) -} -pub(crate) fn ___reduce398< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Pattern = PatternKind => ActionFn(438); -let ___sym0 = ___pop_Variant82(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action438::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); -(1, ___symbol, 133) -} -pub(crate) fn ___reduce399< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Pattern? = Pattern => ActionFn(265); -let ___sym0 = ___pop_Variant26(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action265::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); -(1, ___symbol, 134) -} -pub(crate) fn ___reduce400< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Pattern? = => ActionFn(266); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action266::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); -(0, ___symbol, 134) -} -pub(crate) fn ___reduce401< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "(", Comma, ")" => ActionFn(91); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant54(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action91::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(4, ___symbol, 135) -} -pub(crate) fn ___reduce402< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", FieldPattern, "}" => ActionFn(469); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant14(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(4, ___symbol, 135) -} -pub(crate) fn ___reduce403< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", "}" => ActionFn(470); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action470::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(3, ___symbol, 135) -} -pub(crate) fn ___reduce404< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(471); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant14(___symbols); -let ___sym2 = ___pop_Variant15(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action471::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(5, ___symbol, 135) -} -pub(crate) fn ___reduce405< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", ( ",")+, "}" => ActionFn(472); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant15(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action472::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(4, ___symbol, 135) -} -pub(crate) fn ___reduce406< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", "..", "}" => ActionFn(335); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action335::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(4, ___symbol, 135) -} -pub(crate) fn ___reduce407< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(336); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant15(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action336::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(5, ___symbol, 135) -} -pub(crate) fn ___reduce408< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = "_" => ActionFn(94); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action94::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(1, ___symbol, 135) -} -pub(crate) fn ___reduce409< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = ".." => ActionFn(95); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action95::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(1, ___symbol, 135) -} -pub(crate) fn ___reduce410< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = "<", TypeRef, ">" => ActionFn(96); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action96::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(3, ___symbol, 135) -} -pub(crate) fn ___reduce411< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = "(", Comma, ")" => ActionFn(97); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant54(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action97::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(3, ___symbol, 135) -} -pub(crate) fn ___reduce412< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = "CharLiteral" => ActionFn(98); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action98::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(1, ___symbol, 135) -} -pub(crate) fn ___reduce413< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// PatternKind = Path => ActionFn(99); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action99::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); -(1, ___symbol, 135) -} -pub(crate) fn ___reduce414< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = Lifetime => ActionFn(555); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action555::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(1, ___symbol, 136) -} -pub(crate) fn ___reduce415< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = => ActionFn(556); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action556::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(0, ___symbol, 136) -} -pub(crate) fn ___reduce416< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = ( "+")+, Lifetime => ActionFn(557); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action557::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(2, ___symbol, 136) -} -pub(crate) fn ___reduce417< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = ( "+")+ => ActionFn(558); -let ___sym0 = ___pop_Variant21(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action558::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); -(1, ___symbol, 136) -} -pub(crate) fn ___reduce418< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = TypeBound => ActionFn(645); -let ___sym0 = ___pop_Variant30(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action645::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); -(1, ___symbol, 137) -} -pub(crate) fn ___reduce419< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = => ActionFn(646); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action646::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); -(0, ___symbol, 137) -} -pub(crate) fn ___reduce420< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = ( "+")+, TypeBound => ActionFn(647); -let ___sym1 = ___pop_Variant30(___symbols); -let ___sym0 = ___pop_Variant31(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action647::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); -(2, ___symbol, 137) -} -pub(crate) fn ___reduce421< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Plus = ( "+")+ => ActionFn(648); -let ___sym0 = ___pop_Variant31(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action648::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); -(1, ___symbol, 137) -} -pub(crate) fn ___reduce422< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// QuotedLiteral = StringLiteral => ActionFn(110); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action110::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); -(1, ___symbol, 138) -} -pub(crate) fn ___reduce423< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// QuotedLiteral = RegexLiteral => ActionFn(111); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action111::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); -(1, ___symbol, 138) -} -pub(crate) fn ___reduce424< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// QuotedTerminal = QuotedLiteral => ActionFn(109); -let ___sym0 = ___pop_Variant76(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action109::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); -(1, ___symbol, 139) -} -pub(crate) fn ___reduce425< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// RegexLiteral = "RegexLiteral" => ActionFn(113); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action113::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); -(1, ___symbol, 140) -} -pub(crate) fn ___reduce426< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// RepeatOp = "+" => ActionFn(56); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action56::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); -(1, ___symbol, 141) -} -pub(crate) fn ___reduce427< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// RepeatOp = "*" => ActionFn(57); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action57::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); -(1, ___symbol, 141) -} -pub(crate) fn ___reduce428< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// RepeatOp = "?" => ActionFn(58); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action58::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); -(1, ___symbol, 141) -} -pub(crate) fn ___reduce429< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ShebangAttribute = "#![...]" => ActionFn(114); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action114::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); -(1, ___symbol, 142) -} -pub(crate) fn ___reduce430< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ShebangAttribute* = => ActionFn(185); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action185::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); -(0, ___symbol, 143) -} -pub(crate) fn ___reduce431< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ShebangAttribute* = ShebangAttribute+ => ActionFn(186); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action186::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); -(1, ___symbol, 143) -} -pub(crate) fn ___reduce432< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ShebangAttribute+ = ShebangAttribute => ActionFn(187); -let ___sym0 = ___pop_Variant85(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action187::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); -(1, ___symbol, 144) -} -pub(crate) fn ___reduce433< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(188); -let ___sym1 = ___pop_Variant85(___symbols); -let ___sym0 = ___pop_Variant86(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action188::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); -(2, ___symbol, 144) -} -pub(crate) fn ___reduce435< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(439); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant28(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action439::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(5, ___symbol, 146) -} -pub(crate) fn ___reduce436< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol = "<", Symbol0, ">" => ActionFn(440); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant28(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action440::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(3, ___symbol, 146) -} -pub(crate) fn ___reduce437< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol = Symbol0 => ActionFn(53); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action53::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(1, ___symbol, 146) -} -pub(crate) fn ___reduce438< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol* = => ActionFn(136); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action136::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(0, ___symbol, 147) -} -pub(crate) fn ___reduce439< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol* = Symbol+ => ActionFn(137); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action137::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(1, ___symbol, 147) -} -pub(crate) fn ___reduce440< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol+ = Symbol => ActionFn(143); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action143::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(1, ___symbol, 148) -} -pub(crate) fn ___reduce441< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol+ = Symbol+, Symbol => ActionFn(144); -let ___sym1 = ___pop_Variant28(___symbols); -let ___sym0 = ___pop_Variant29(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action144::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); -(2, ___symbol, 148) -} -pub(crate) fn ___reduce442< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol0 = Symbol1 => ActionFn(54); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action54::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(1, ___symbol, 149) -} -pub(crate) fn ___reduce443< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol0 = Symbol0, RepeatOp => ActionFn(441); -let ___sym1 = ___pop_Variant84(___symbols); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action441::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(2, ___symbol, 149) -} -pub(crate) fn ___reduce444< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol1 = SymbolKind1 => ActionFn(442); -let ___sym0 = ___pop_Variant88(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action442::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); -(1, ___symbol, 150) -} -pub(crate) fn ___reduce445< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol? = Symbol => ActionFn(241); -let ___sym0 = ___pop_Variant28(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action241::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); -(1, ___symbol, 151) -} -pub(crate) fn ___reduce446< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Symbol? = => ActionFn(242); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action242::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); -(0, ___symbol, 151) -} -pub(crate) fn ___reduce447< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(60); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant55(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant24(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action60::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(4, ___symbol, 152) -} -pub(crate) fn ___reduce448< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = QuotedTerminal => ActionFn(61); -let ___sym0 = ___pop_Variant75(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action61::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce449< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = "Id" => ActionFn(62); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action62::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce450< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = Escape => ActionFn(63); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action63::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce451< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(64); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant61(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action64::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(3, ___symbol, 152) -} -pub(crate) fn ___reduce452< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = "@L" => ActionFn(65); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action65::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce453< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = "@R" => ActionFn(66); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action66::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce454< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// SymbolKind1 = "!" => ActionFn(67); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action67::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); -(1, ___symbol, 152) -} -pub(crate) fn ___reduce455< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Terminal = QuotedTerminal => ActionFn(107); -let ___sym0 = ___pop_Variant75(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action107::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); -(1, ___symbol, 153) -} -pub(crate) fn ___reduce456< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Terminal = "Id" => ActionFn(108); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action108::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); -(1, ___symbol, 153) -} -pub(crate) fn ___reduce457< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Top = "StartGrammar", Grammar => ActionFn(1); -let ___sym1 = ___pop_Variant65(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action1::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); -(2, ___symbol, 154) -} -pub(crate) fn ___reduce458< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Top = "StartPattern", Pattern => ActionFn(2); -let ___sym1 = ___pop_Variant26(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action2::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); -(2, ___symbol, 154) -} -pub(crate) fn ___reduce459< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Top = "StartMatchMapping", MatchMapping => ActionFn(3); -let ___sym1 = ___pop_Variant75(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action3::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); -(2, ___symbol, 154) -} -pub(crate) fn ___reduce460< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Top = "StartTypeRef", TypeRef => ActionFn(4); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action4::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); -(2, ___symbol, 154) -} -pub(crate) fn ___reduce461< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Top = "StartGrammarWhereClauses", GrammarWhereClauses => ActionFn(5); -let ___sym1 = ___pop_Variant50(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action5::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); -(2, ___symbol, 154) -} -pub(crate) fn ___reduce462< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = Lifetime => ActionFn(15); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action15::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(1, ___symbol, 155) -} -pub(crate) fn ___reduce463< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(475); -let ___sym6 = ___pop_Variant3(___symbols); -let ___sym5 = ___pop_Variant0(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant57(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant80(___symbols); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym6.2.clone(); -let ___nt = super::___action475::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(7, ___symbol, 155) -} -pub(crate) fn ___reduce464< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(476); -let ___sym5 = ___pop_Variant3(___symbols); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant57(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym5.2.clone(); -let ___nt = super::___action476::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(6, ___symbol, 155) -} -pub(crate) fn ___reduce465< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(477); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant57(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant80(___symbols); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action477::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(5, ___symbol, 155) -} -pub(crate) fn ___reduce466< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = Path, "(", Comma, ")" => ActionFn(478); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant57(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action478::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(4, ___symbol, 155) -} -pub(crate) fn ___reduce467< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(479); -let ___sym4 = ___pop_Variant0(___symbols); -let ___sym3 = ___pop_Variant5(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant80(___symbols); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym4.2.clone(); -let ___nt = super::___action479::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(5, ___symbol, 155) -} -pub(crate) fn ___reduce468< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = Path, "<", Comma, ">" => ActionFn(480); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant5(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action480::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(4, ___symbol, 155) -} -pub(crate) fn ___reduce469< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = ForAll, Path => ActionFn(481); -let ___sym1 = ___pop_Variant80(___symbols); -let ___sym0 = ___pop_Variant51(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action481::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(2, ___symbol, 155) -} -pub(crate) fn ___reduce470< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound = Path => ActionFn(482); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action482::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); -(1, ___symbol, 155) -} -pub(crate) fn ___reduce471< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound? = TypeBound => ActionFn(211); -let ___sym0 = ___pop_Variant30(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action211::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); -(1, ___symbol, 156) -} -pub(crate) fn ___reduce472< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBound? = => ActionFn(212); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action212::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); -(0, ___symbol, 156) -} -pub(crate) fn ___reduce473< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBoundParameter = Lifetime => ActionFn(18); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action18::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); -(1, ___symbol, 157) -} -pub(crate) fn ___reduce474< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBoundParameter = TypeRef => ActionFn(19); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action19::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); -(1, ___symbol, 157) -} -pub(crate) fn ___reduce475< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBoundParameter = Id, "=", TypeRef => ActionFn(20); -let ___sym2 = ___pop_Variant3(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); -(3, ___symbol, 157) -} -pub(crate) fn ___reduce476< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBoundParameter? = TypeBoundParameter => ActionFn(221); -let ___sym0 = ___pop_Variant32(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action221::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant91(___nt), ___end); -(1, ___symbol, 158) -} -pub(crate) fn ___reduce477< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBoundParameter? = => ActionFn(222); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action222::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant91(___nt), ___end); -(0, ___symbol, 158) -} -pub(crate) fn ___reduce478< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeBounds = Plus => ActionFn(14); -let ___sym0 = ___pop_Variant83(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action14::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); -(1, ___symbol, 159) -} -pub(crate) fn ___reduce479< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeParameter = Lifetime => ActionFn(8); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action8::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); -(1, ___symbol, 160) -} -pub(crate) fn ___reduce480< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeParameter = Id => ActionFn(9); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action9::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); -(1, ___symbol, 160) -} -pub(crate) fn ___reduce481< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeParameter? = TypeParameter => ActionFn(195); -let ___sym0 = ___pop_Variant34(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action195::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant92(___nt), ___end); -(1, ___symbol, 161) -} -pub(crate) fn ___reduce482< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeParameter? = => ActionFn(196); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action196::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant92(___nt), ___end); -(0, ___symbol, 161) -} -pub(crate) fn ___reduce483< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "(", Comma, ")" => ActionFn(68); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant57(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action68::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(3, ___symbol, 162) -} -pub(crate) fn ___reduce484< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "#", Symbol, "#" => ActionFn(69); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant28(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(3, ___symbol, 162) -} -pub(crate) fn ___reduce485< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(559); -let ___sym3 = ___pop_Variant3(___symbols); -let ___sym2 = ___pop_Variant0(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action559::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(4, ___symbol, 162) -} -pub(crate) fn ___reduce486< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "&", "mut", TypeRef => ActionFn(560); -let ___sym2 = ___pop_Variant3(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action560::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(3, ___symbol, 162) -} -pub(crate) fn ___reduce487< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "&", Lifetime, TypeRef => ActionFn(561); -let ___sym2 = ___pop_Variant3(___symbols); -let ___sym1 = ___pop_Variant20(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym2.2.clone(); -let ___nt = super::___action561::<>(text, ___sym0, ___sym1, ___sym2); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(3, ___symbol, 162) -} -pub(crate) fn ___reduce488< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = "&", TypeRef => ActionFn(562); -let ___sym1 = ___pop_Variant3(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action562::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(2, ___symbol, 162) -} -pub(crate) fn ___reduce489< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = Path, "<", Comma, ">" => ActionFn(71); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant57(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action71::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(4, ___symbol, 162) -} -pub(crate) fn ___reduce490< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef = Path => ActionFn(72); -let ___sym0 = ___pop_Variant80(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action72::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(1, ___symbol, 162) -} -pub(crate) fn ___reduce491< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef? = TypeRef => ActionFn(216); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action216::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(1, ___symbol, 163) -} -pub(crate) fn ___reduce492< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRef? = => ActionFn(217); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action217::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(0, ___symbol, 163) -} -pub(crate) fn ___reduce493< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRefOrLifetime = TypeRef => ActionFn(73); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action73::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(1, ___symbol, 164) -} -pub(crate) fn ___reduce494< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRefOrLifetime = Lifetime => ActionFn(74); -let ___sym0 = ___pop_Variant20(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action74::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); -(1, ___symbol, 164) -} -pub(crate) fn ___reduce495< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(246); -let ___sym0 = ___pop_Variant3(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action246::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(1, ___symbol, 165) -} -pub(crate) fn ___reduce496< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// TypeRefOrLifetime? = => ActionFn(247); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action247::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); -(0, ___symbol, 165) -} -pub(crate) fn ___reduce497< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Use = "use", ";" => ActionFn(27); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant1(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action27::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); -(2, ___symbol, 166) -} -pub(crate) fn ___reduce498< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Use* = => ActionFn(183); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action183::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(0, ___symbol, 167) -} -pub(crate) fn ___reduce499< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Use* = Use+ => ActionFn(184); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action184::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(1, ___symbol, 167) -} -pub(crate) fn ___reduce500< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Use+ = Use => ActionFn(189); -let ___sym0 = ___pop_Variant62(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action189::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(1, ___symbol, 168) -} -pub(crate) fn ___reduce501< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Use+ = Use+, Use => ActionFn(190); -let ___sym1 = ___pop_Variant62(___symbols); -let ___sym0 = ___pop_Variant66(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym1.2.clone(); -let ___nt = super::___action190::<>(text, ___sym0, ___sym1); -let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); -(2, ___symbol, 168) -} -pub(crate) fn ___reduce502< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Visibility = "pub", "(", Path, ")" => ActionFn(28); -let ___sym3 = ___pop_Variant0(___symbols); -let ___sym2 = ___pop_Variant80(___symbols); -let ___sym1 = ___pop_Variant0(___symbols); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym3.2.clone(); -let ___nt = super::___action28::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); -let ___symbol = (___start, ___Symbol::Variant93(___nt), ___end); -(4, ___symbol, 169) -} -pub(crate) fn ___reduce503< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Visibility = "pub" => ActionFn(29); -let ___sym0 = ___pop_Variant0(___symbols); -let ___start = ___sym0.0.clone(); -let ___end = ___sym0.2.clone(); -let ___nt = super::___action29::<>(text, ___sym0); -let ___symbol = (___start, ___Symbol::Variant93(___nt), ___end); -(1, ___symbol, 169) -} -pub(crate) fn ___reduce504< - 'input, ->( -text: &'input str, -___action: i16, -___lookahead_start: Option<&usize>, -___states: &mut ::std::vec::Vec, -___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, -_: ::std::marker::PhantomData<()>, -) -> (usize, (usize,___Symbol<'input>,usize), usize) -{ -// Visibility = => ActionFn(322); -let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); -let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); -let ___nt = super::___action322::<>(text, &___start, &___end); -let ___symbol = (___start, ___Symbol::Variant93(___nt), ___end); -(0, ___symbol, 169) -} -} -pub use self::___parse___Top::TopParser; - -#[allow(unused_variables)] -fn ___action0< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Top, usize), -) -> Top -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action1< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Grammar, usize), -) -> Top -{ -Top::Grammar(___0) -} - -#[allow(unused_variables)] -fn ___action2< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Pattern, usize), -) -> Top -{ -Top::Pattern(___0) -} - -#[allow(unused_variables)] -fn ___action3< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, TerminalString, usize), -) -> Top -{ -Top::MatchMapping(___0) -} - -#[allow(unused_variables)] -fn ___action4< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, TypeRef, usize), -) -> Top -{ -Top::TypeRef(___0) -} - -#[allow(unused_variables)] -fn ___action5< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec>, usize), -) -> Top -{ -Top::GrammarWhereClauses(___0) -} - -#[allow(unused_variables)] -fn ___action6< - 'input, ->( -text: &'input str, -(_, module_attributes, _): (usize, ::std::vec::Vec, usize), -(_, uses, _): (usize, ::std::vec::Vec, usize), -(_, annotations, _): (usize, ::std::vec::Vec, usize), -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -(_, tps, _): (usize, ::std::option::Option>, usize), -(_, parameters, _): (usize, ::std::option::Option>, usize), -(_, where_clauses, _): (usize, ::std::option::Option>>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, items, _): (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -{ - Grammar { prefix: format!("__"), // adjusted by `parse_grammar` - span: Span(lo, hi), - type_parameters: tps.unwrap_or(vec![]), - parameters: parameters.unwrap_or(vec![]), - where_clauses: where_clauses.unwrap_or(vec![]), - items: uses.into_iter().chain(items).collect(), - annotations: annotations, - module_attributes: module_attributes} - } -} - -#[allow(unused_variables)] -fn ___action7< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Vec -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action8< - 'input, ->( -text: &'input str, -(_, l, _): (usize, Atom, usize), -) -> TypeParameter -{ -TypeParameter::Lifetime(l) -} - -#[allow(unused_variables)] -fn ___action9< - 'input, ->( -text: &'input str, -(_, l, _): (usize, Atom, usize), -) -> TypeParameter -{ -TypeParameter::Id(l) -} - -#[allow(unused_variables)] -fn ___action10< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec>, usize), -) -> Vec> -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action11< - 'input, ->( -text: &'input str, -(_, l, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, bounds, _): (usize, Vec, usize), -) -> WhereClause -{ -WhereClause::Lifetime { lifetime: l, bounds: bounds } -} - -#[allow(unused_variables)] -fn ___action12< - 'input, ->( -text: &'input str, -(_, f, _): (usize, ::std::option::Option>, usize), -(_, ty, _): (usize, TypeRef, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, bounds, _): (usize, Vec>, usize), -) -> WhereClause -{ -WhereClause::Type { forall: f, ty: ty, bounds: bounds } -} - -#[allow(unused_variables)] -fn ___action13< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Vec -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action14< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec>, usize), -) -> Vec> -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action15< - 'input, ->( -text: &'input str, -(_, l, _): (usize, Atom, usize), -) -> TypeBound -{ -TypeBound::Lifetime(l) -} - -#[allow(unused_variables)] -fn ___action16< - 'input, ->( -text: &'input str, -(_, f, _): (usize, ::std::option::Option>, usize), -(_, p, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, params, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ret, _): (usize, ::std::option::Option, usize), -) -> TypeBound -{ -TypeBound::Fn { forall: f, path: p, parameters: params, ret: ret } -} - -#[allow(unused_variables)] -fn ___action17< - 'input, ->( -text: &'input str, -(_, f, _): (usize, ::std::option::Option>, usize), -(_, p, _): (usize, Path, usize), -(_, params, _): (usize, ::std::option::Option>>, usize), -) -> TypeBound -{ -TypeBound::Trait { forall: f, path: p, parameters: params.unwrap_or(vec![]) } -} - -#[allow(unused_variables)] -fn ___action18< - 'input, ->( -text: &'input str, -(_, l, _): (usize, Atom, usize), -) -> TypeBoundParameter -{ -TypeBoundParameter::Lifetime(l) -} - -#[allow(unused_variables)] -fn ___action19< - 'input, ->( -text: &'input str, -(_, ty, _): (usize, TypeRef, usize), -) -> TypeBoundParameter -{ -TypeBoundParameter::TypeParameter(ty) -} - -#[allow(unused_variables)] -fn ___action20< - 'input, ->( -text: &'input str, -(_, id, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ty, _): (usize, TypeRef, usize), -) -> TypeBoundParameter -{ -TypeBoundParameter::Associated(id, ty) -} - -#[allow(unused_variables)] -fn ___action21< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Vec -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action22< - 'input, ->( -text: &'input str, -(_, id, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ty, _): (usize, TypeRef, usize), -) -> Parameter -{ -Parameter { name: id, ty: ty } -} - -#[allow(unused_variables)] -fn ___action23< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> GrammarItem -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action24< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> GrammarItem -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action25< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> GrammarItem -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action26< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> GrammarItem -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action27< - 'input, ->( -text: &'input str, -(_, u, _): (usize, &'input str, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> GrammarItem -{ -GrammarItem::Use(strip(u).to_string()) -} - -#[allow(unused_variables)] -fn ___action28< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, p, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Visibility -{ -Visibility::Pub(Some(p)) -} - -#[allow(unused_variables)] -fn ___action29< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> Visibility -{ -Visibility::Pub(None) -} - -#[allow(unused_variables)] -fn ___action30< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, (), usize), -) -> Visibility -{ -Visibility::Priv -} - -#[allow(unused_variables)] -fn ___action31< - 'input, ->( -text: &'input str, -(_, annotations, _): (usize, ::std::vec::Vec, usize), -(_, v, _): (usize, Visibility, usize), -(_, lo, _): (usize, usize, usize), -(_, n, _): (usize, (NonterminalString, Vec), usize), -(_, hi, _): (usize, usize, usize), -(_, t, _): (usize, ::std::option::Option, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a, _): (usize, Vec, usize), -) -> GrammarItem -{ -{ - GrammarItem::Nonterminal(NonterminalData { visibility: v, - span: Span(lo, hi), - name: n.0, - annotations: annotations, - args: n.1, - type_decl: t, - alternatives: a }) - } -} - -#[allow(unused_variables)] -fn ___action32< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, name, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, value, _): (usize, &'input str, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> (Atom, String) -{ -(name, value.into()) -} - -#[allow(unused_variables)] -fn ___action33< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, lo, _): (usize, usize, usize), -(_, id, _): (usize, Atom, usize), -(_, arg, _): (usize, ::std::option::Option<(Atom, String)>, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Annotation -{ -{ - Annotation { id_span: Span(lo, hi), id, arg } - } -} - -#[allow(unused_variables)] -fn ___action34< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, NonterminalString, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ___1, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> (NonterminalString, Vec) -{ -(___0, ___1) -} - -#[allow(unused_variables)] -fn ___action35< - 'input, ->( -text: &'input str, -(_, n, _): (usize, NonterminalString, usize), -) -> (NonterminalString, Vec) -{ -(n, vec![]) -} - -#[allow(unused_variables)] -fn ___action36< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, &'input str, usize), -) -> (NonterminalString, Vec) -{ -(NonterminalString(Atom::from(___0)), vec![]) -} - -#[allow(unused_variables)] -fn ___action37< - 'input, ->( -text: &'input str, -(_, a, _): (usize, Alternative, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Vec -{ -vec![a] -} - -#[allow(unused_variables)] -fn ___action38< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, ::std::option::Option>, usize), -) -> Vec -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action39< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, s, _): (usize, ::std::vec::Vec, usize), -(_, c, _): (usize, ::std::option::Option, usize), -(_, a, _): (usize, ::std::option::Option, usize), -(_, hi, _): (usize, usize, usize), -) -> Alternative -{ -{ - Alternative { - span: Span(lo, hi), - expr: ExprSymbol { symbols: s }, - condition: c, - action: a - } - } -} - -#[allow(unused_variables)] -fn ___action40< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, c, _): (usize, ::std::option::Option, usize), -(_, a, _): (usize, ActionKind, usize), -(_, hi, _): (usize, usize, usize), -) -> Alternative -{ -{ - Alternative { - span: Span(lo, hi), - expr: ExprSymbol { symbols: vec![] }, - condition: c, - action: Some(a) - } - } -} - -#[allow(unused_variables)] -fn ___action41< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ActionKind -{ -ActionKind::Lookahead -} - -#[allow(unused_variables)] -fn ___action42< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ActionKind -{ -ActionKind::Lookbehind -} - -#[allow(unused_variables)] -fn ___action43< - 'input, ->( -text: &'input str, -(_, c, _): (usize, &'input str, usize), -) -> ActionKind -{ -ActionKind::User(strip(c).to_string()) -} - -#[allow(unused_variables)] -fn ___action44< - 'input, ->( -text: &'input str, -(_, c, _): (usize, &'input str, usize), -) -> ActionKind -{ -ActionKind::Fallible(strip(c).to_string()) -} - -#[allow(unused_variables)] -fn ___action45< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, a, _): (usize, NonterminalString, usize), -(_, op, _): (usize, ConditionOp, usize), -(_, b, _): (usize, Atom, usize), -(_, hi, _): (usize, usize, usize), -) -> Condition -{ -{ - Condition { span:Span(lo, hi), lhs:a, rhs:b, op:op } - } -} - -#[allow(unused_variables)] -fn ___action46< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ConditionOp -{ -ConditionOp::Equals -} - -#[allow(unused_variables)] -fn ___action47< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ConditionOp -{ -ConditionOp::NotEquals -} - -#[allow(unused_variables)] -fn ___action48< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ConditionOp -{ -ConditionOp::Match -} - -#[allow(unused_variables)] -fn ___action49< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ConditionOp -{ -ConditionOp::NotMatch -} - -#[allow(unused_variables)] -fn ___action50< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, ::std::vec::Vec, usize), -) -> ExprSymbol -{ -ExprSymbol { symbols: ___0 } -} - -#[allow(unused_variables)] -fn ___action51< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, usize, usize), -(_, l, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, s, _): (usize, Symbol, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -) -> Symbol -{ -Symbol::new(Span(lo, hi), SymbolKind::Name(l, Box::new(s))) -} - -#[allow(unused_variables)] -fn ___action52< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, s, _): (usize, Symbol, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -) -> Symbol -{ -Symbol::new(Span(lo, hi), SymbolKind::Choose(Box::new(s))) -} - -#[allow(unused_variables)] -fn ___action53< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -) -> Symbol -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action54< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -) -> Symbol -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action55< - 'input, ->( -text: &'input str, -(_, lhs, _): (usize, Symbol, usize), -(_, op, _): (usize, RepeatOp, usize), -(_, hi, _): (usize, usize, usize), -) -> Symbol -{ -Symbol::new(Span(lhs.span.0, hi), - SymbolKind::Repeat(Box::new(RepeatSymbol { symbol: lhs, op: op }))) -} - -#[allow(unused_variables)] -fn ___action56< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> RepeatOp -{ -RepeatOp::Plus -} - -#[allow(unused_variables)] -fn ___action57< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> RepeatOp -{ -RepeatOp::Star -} - -#[allow(unused_variables)] -fn ___action58< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> RepeatOp -{ -RepeatOp::Question -} - -#[allow(unused_variables)] -fn ___action59< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, sk, _): (usize, SymbolKind, usize), -(_, hi, _): (usize, usize, usize), -) -> Symbol -{ -Symbol::new(Span(lo, hi), sk) -} - -#[allow(unused_variables)] -fn ___action60< - 'input, ->( -text: &'input str, -(_, name, _): (usize, NonterminalString, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, args, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> SymbolKind -{ -SymbolKind::Macro(MacroSymbol { name: name, args: args }) -} - -#[allow(unused_variables)] -fn ___action61< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TerminalString, usize), -) -> SymbolKind -{ -SymbolKind::Terminal(___0) -} - -#[allow(unused_variables)] -fn ___action62< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, &'input str, usize), -) -> SymbolKind -{ -SymbolKind::AmbiguousId(Atom::from(___0)) -} - -#[allow(unused_variables)] -fn ___action63< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> SymbolKind -{ -SymbolKind::Nonterminal(NonterminalString(___0)) -} - -#[allow(unused_variables)] -fn ___action64< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, ExprSymbol, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> SymbolKind -{ -SymbolKind::Expr(___0) -} - -#[allow(unused_variables)] -fn ___action65< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> SymbolKind -{ -SymbolKind::Lookahead -} - -#[allow(unused_variables)] -fn ___action66< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> SymbolKind -{ -SymbolKind::Lookbehind -} - -#[allow(unused_variables)] -fn ___action67< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> SymbolKind -{ -SymbolKind::Error -} - -#[allow(unused_variables)] -fn ___action68< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeRef -{ -TypeRef::Tuple(___0) -} - -#[allow(unused_variables)] -fn ___action69< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Symbol, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeRef -{ -{ - TypeRef::OfSymbol(___0.kind) - } -} - -#[allow(unused_variables)] -fn ___action70< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, l, _): (usize, ::std::option::Option, usize), -(_, m, _): (usize, ::std::option::Option>, usize), -(_, t, _): (usize, TypeRef, usize), -) -> TypeRef -{ -TypeRef::Ref { lifetime: l, - mutable: m.is_some(), - referent: Box::new(t) } -} - -#[allow(unused_variables)] -fn ___action71< - 'input, ->( -text: &'input str, -(_, p, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeRef -{ -TypeRef::Nominal { path: p, types: a } -} - -#[allow(unused_variables)] -fn ___action72< - 'input, ->( -text: &'input str, -(_, p, _): (usize, Path, usize), -) -> TypeRef -{ -match p.as_id() { - Some(id) => TypeRef::Id(id), - None => TypeRef::Nominal { path: p, types: vec![] } - } -} - -#[allow(unused_variables)] -fn ___action73< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> TypeRef -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action74< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> TypeRef -{ -TypeRef::Lifetime(___0) -} - -#[allow(unused_variables)] -fn ___action75< - 'input, ->( -text: &'input str, -(_, a, _): (usize, ::std::option::Option>, usize), -(_, h, _): (usize, ::std::vec::Vec, usize), -(_, t, _): (usize, Atom, usize), -) -> Path -{ -{ - Path { absolute: a.is_some(), - ids: h.into_iter().chain(once(t)).collect() } - } -} - -#[allow(unused_variables)] -fn ___action76< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a0, _): (usize, ::std::vec::Vec, usize), -(_, et, _): (usize, EnumToken, usize), -(_, a1, _): (usize, ::std::vec::Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> GrammarItem -{ -{ - GrammarItem::ExternToken(ExternToken { - span: Span(lo, hi), - associated_types: a0.into_iter().chain(a1).collect(), - enum_token: Some(et), - }) - } -} - -#[allow(unused_variables)] -fn ___action77< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a0, _): (usize, ::std::vec::Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> GrammarItem -{ -{ - GrammarItem::ExternToken(ExternToken { - span: Span(lo, hi), - associated_types: a0, - enum_token: None, - }) - } -} - -#[allow(unused_variables)] -fn ___action78< - 'input, ->( -text: &'input str, -(_, t, _): (usize, MatchToken, usize), -) -> GrammarItem -{ -GrammarItem::MatchToken(t) -} - -#[allow(unused_variables)] -fn ___action79< - 'input, ->( -text: &'input str, -(_, t, _): (usize, MatchToken, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, c, _): (usize, MatchContents, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> MatchToken -{ -t.add(c) -} - -#[allow(unused_variables)] -fn ___action80< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, c, _): (usize, MatchContents, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> MatchToken -{ -MatchToken::new(c, Span(lo, hi)) -} - -#[allow(unused_variables)] -fn ___action81< - 'input, ->( -text: &'input str, -(_, items, _): (usize, Vec, usize), -) -> MatchContents -{ -MatchContents { items: items } -} - -#[allow(unused_variables)] -fn ___action82< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, hi, _): (usize, usize, usize), -) -> MatchItem -{ -MatchItem::CatchAll(Span(lo, hi)) -} - -#[allow(unused_variables)] -fn ___action83< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, s, _): (usize, TerminalLiteral, usize), -(_, hi, _): (usize, usize, usize), -) -> MatchItem -{ -MatchItem::Unmapped(s, Span(lo, hi)) -} - -#[allow(unused_variables)] -fn ___action84< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, from, _): (usize, TerminalLiteral, usize), -(_, start, _): (usize, usize, usize), -(_, p, _): (usize, &'input str, usize), -(_, hi, _): (usize, usize, usize), -) -> Result,tok::Error>> -{ -{ - let to = try!(super::parse_match_mapping(p, start + 2)); - Ok(MatchItem::Mapped(from, to, Span(lo, hi))) - } -} - -#[allow(unused_variables)] -fn ___action85< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TerminalLiteral, usize), -) -> TerminalLiteral -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action86< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TerminalString, usize), -) -> TerminalString -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action87< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, lo, _): (usize, usize, usize), -(_, t, _): (usize, TypeRef, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, c, _): (usize, Vec, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> EnumToken -{ -{ - EnumToken { - type_name: t, - type_span: Span(lo, hi), - conversions: c, - } - } -} - -#[allow(unused_variables)] -fn ___action88< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, lo, _): (usize, usize, usize), -(_, n, _): (usize, Atom, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, t, _): (usize, TypeRef, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> AssociatedType -{ -{ - AssociatedType { type_span: Span(lo, hi), - type_name: n, - type_ref: t } - } -} - -#[allow(unused_variables)] -fn ___action89< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, from, _): (usize, TerminalString, usize), -(_, start, _): (usize, usize, usize), -(_, p, _): (usize, &'input str, usize), -(_, hi, _): (usize, usize, usize), -) -> Result,tok::Error>> -{ -{ - let pattern = try!(super::parse_pattern(p, start + 2)); - Ok(Conversion { span: Span(lo, hi), - from: from, - to: pattern }) - } -} - -#[allow(unused_variables)] -fn ___action90< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, k, _): (usize, PatternKind, usize), -(_, hi, _): (usize, usize, usize), -) -> Pattern -{ -Pattern { span: Span(lo, hi), kind: k } -} - -#[allow(unused_variables)] -fn ___action91< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, ___1, _): (usize, Vec>, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Enum(___0, ___1) -} - -#[allow(unused_variables)] -fn ___action92< - 'input, ->( -text: &'input str, -(_, p, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a0, _): (usize, ::std::vec::Vec>, usize), -(_, a1, _): (usize, ::std::option::Option>, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Struct(p, a0.into_iter().chain(a1).collect(), false) -} - -#[allow(unused_variables)] -fn ___action93< - 'input, ->( -text: &'input str, -(_, p, _): (usize, Path, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, a0, _): (usize, ::std::vec::Vec>, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Struct(p, a0, true) -} - -#[allow(unused_variables)] -fn ___action94< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Underscore -} - -#[allow(unused_variables)] -fn ___action95< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::DotDot -} - -#[allow(unused_variables)] -fn ___action96< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, TypeRef, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Choose(___0) -} - -#[allow(unused_variables)] -fn ___action97< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec>, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> PatternKind -{ -PatternKind::Tuple(___0) -} - -#[allow(unused_variables)] -fn ___action98< - 'input, ->( -text: &'input str, -(_, c, _): (usize, &'input str, usize), -) -> PatternKind -{ -PatternKind::CharLiteral(Atom::from(c)) -} - -#[allow(unused_variables)] -fn ___action99< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Path, usize), -) -> PatternKind -{ -PatternKind::Path(___0) -} - -#[allow(unused_variables)] -fn ___action100< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, id, _): (usize, Atom, usize), -(_, hi, _): (usize, usize, usize), -(_, _, _): (usize, Tok<'input>, usize), -(_, pat, _): (usize, Pattern, usize), -) -> FieldPattern -{ -{ - FieldPattern { field_span: Span(lo, hi), - field_name: id, - pattern: pat } - } -} - -#[allow(unused_variables)] -fn ___action101< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> NonterminalString -{ -NonterminalString(Atom::from(i)) -} - -#[allow(unused_variables)] -fn ___action102< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> NonterminalString -{ -NonterminalString(Atom::from(i)) -} - -#[allow(unused_variables)] -fn ___action103< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> Atom -{ -Atom::from(i) -} - -#[allow(unused_variables)] -fn ___action104< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> Atom -{ -Atom::from(i) -} - -#[allow(unused_variables)] -fn ___action105< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> Atom -{ -Atom::from(i) -} - -#[allow(unused_variables)] -fn ___action106< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> Atom -{ -Atom::from(i) -} - -#[allow(unused_variables)] -fn ___action107< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TerminalString, usize), -) -> TerminalString -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action108< - 'input, ->( -text: &'input str, -(_, i, _): (usize, &'input str, usize), -) -> TerminalString -{ -TerminalString::Bare(Atom::from(i)) -} - -#[allow(unused_variables)] -fn ___action109< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TerminalLiteral, usize), -) -> TerminalString -{ -TerminalString::Literal(___0) -} - -#[allow(unused_variables)] -fn ___action110< - 'input, ->( -text: &'input str, -(_, s, _): (usize, Atom, usize), -) -> TerminalLiteral -{ -TerminalLiteral::Quoted(s) -} - -#[allow(unused_variables)] -fn ___action111< - 'input, ->( -text: &'input str, -(_, s, _): (usize, Atom, usize), -) -> TerminalLiteral -{ -TerminalLiteral::Regex(s) -} - -#[allow(unused_variables)] -fn ___action112< - 'input, ->( -text: &'input str, -(_, lo, _): (usize, usize, usize), -(_, s, _): (usize, &'input str, usize), -) -> Result,tok::Error>> -{ -{ - let text = tok::apply_string_escapes(s, lo + 1) - .map_err(|e| ParseError::User { error: e })?; - Ok(Atom::from(text)) - } -} - -#[allow(unused_variables)] -fn ___action113< - 'input, ->( -text: &'input str, -(_, s, _): (usize, &'input str, usize), -) -> Atom -{ -Atom::from(s) -} - -#[allow(unused_variables)] -fn ___action114< - 'input, ->( -text: &'input str, -(_, s, _): (usize, &'input str, usize), -) -> String -{ -s.to_string() -} - -#[allow(unused_variables)] -fn ___action115< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, FieldPattern, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action116< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action117< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec> -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action118< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -) -> ::std::vec::Vec> -{ -v -} - -#[allow(unused_variables)] -fn ___action119< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, FieldPattern, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> FieldPattern -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action120< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec>, usize), -(_, e1, _): (usize, ::std::option::Option>, usize), -) -> Vec> -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action121< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action122< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action123< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action124< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action125< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action126< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action127< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Atom -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action128< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action129< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action130< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action131< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action132< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action133< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action134< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action135< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action136< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action137< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action138< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, ActionKind, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action139< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action140< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Condition, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action141< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action142< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Condition, usize), -) -> Condition -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action143< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action144< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Symbol, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action145< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Tok<'input>, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action146< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action147< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action148< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action149< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, (Atom, String), usize), -) -> ::std::option::Option<(Atom, String)> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action150< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option<(Atom, String)> -{ -None -} - -#[allow(unused_variables)] -fn ___action151< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action152< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action153< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, TypeRef, usize), -) -> TypeRef -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action154< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> () -{ -() -} - -#[allow(unused_variables)] -fn ___action155< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action156< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec>, usize), -) -> ::std::option::Option>> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action157< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option>> -{ -None -} - -#[allow(unused_variables)] -fn ___action158< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, Vec>, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Vec> -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action159< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec>, usize), -(_, e1, _): (usize, ::std::option::Option>, usize), -) -> Vec> -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action160< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action161< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action162< - 'input, ->( -text: &'input str, -(_, _, _): (usize, Tok<'input>, usize), -(_, ___0, _): (usize, TypeRef, usize), -) -> TypeRef -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action163< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action164< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, ::std::option::Option>, usize), -) -> Vec> -{ -match e { - None => v, - Some(e) => { - let mut v = v; - v.push(e); - v - } - } -} - -#[allow(unused_variables)] -fn ___action165< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action166< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action167< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action168< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -match e { - None => v, - Some(e) => { - let mut v = v; - v.push(e); - v - } - } -} - -#[allow(unused_variables)] -fn ___action169< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec>, usize), -(_, e1, _): (usize, ::std::option::Option>, usize), -) -> Vec> -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action170< - 'input, ->( -text: &'input str, -(_, v0, _): (usize, ::std::vec::Vec, usize), -(_, e1, _): (usize, ::std::option::Option, usize), -) -> Vec -{ -v0.into_iter().chain(e1).collect() -} - -#[allow(unused_variables)] -fn ___action171< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action172< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action173< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec>, usize), -) -> ::std::option::Option>> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action174< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option>> -{ -None -} - -#[allow(unused_variables)] -fn ___action175< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action176< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action177< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Vec, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action178< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action179< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> usize -{ -___lookbehind.clone() -} - -#[allow(unused_variables)] -fn ___action180< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> usize -{ -___lookahead.clone() -} - -#[allow(unused_variables)] -fn ___action181< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action182< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action183< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action184< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action185< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action186< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action187< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, String, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action188< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, String, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action189< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action190< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, GrammarItem, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action191< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Annotation, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action192< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Annotation, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action193< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, GrammarItem, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action194< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, GrammarItem, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action195< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeParameter, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action196< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action197< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action198< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action199< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeParameter, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeParameter -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action200< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, WhereClause, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action201< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action202< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec> -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action203< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -) -> ::std::vec::Vec> -{ -v -} - -#[allow(unused_variables)] -fn ___action204< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, WhereClause, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> WhereClause -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action205< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action206< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action207< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Atom -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action208< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action209< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action210< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Atom -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action211< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBound, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action212< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action213< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec> -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action214< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -) -> ::std::vec::Vec> -{ -v -} - -#[allow(unused_variables)] -fn ___action215< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBound, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeBound -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action216< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action217< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action218< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action219< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action220< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeRef -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action221< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBoundParameter, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action222< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action223< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec> -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action224< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -) -> ::std::vec::Vec> -{ -v -} - -#[allow(unused_variables)] -fn ___action225< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBoundParameter, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeBoundParameter -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action226< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Parameter, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action227< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action228< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action229< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action230< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Parameter, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Parameter -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action231< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, NonterminalString, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action232< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action233< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action234< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action235< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, NonterminalString, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> NonterminalString -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action236< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Alternative, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action237< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action238< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action239< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action240< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Alternative, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Alternative -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action241< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action242< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action243< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action244< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action245< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Symbol -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action246< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action247< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action248< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action249< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action250< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> TypeRef -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action251< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action252< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action253< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, AssociatedType, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action254< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, AssociatedType, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action255< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, MatchItem, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action256< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action257< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action258< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action259< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, MatchItem, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> MatchItem -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action260< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Conversion, usize), -) -> ::std::option::Option -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action261< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option -{ -None -} - -#[allow(unused_variables)] -fn ___action262< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action263< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec -{ -v -} - -#[allow(unused_variables)] -fn ___action264< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Conversion, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Conversion -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action265< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Pattern, usize), -) -> ::std::option::Option> -{ -Some(___0) -} - -#[allow(unused_variables)] -fn ___action266< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::option::Option> -{ -None -} - -#[allow(unused_variables)] -fn ___action267< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ::std::vec::Vec> -{ -vec![] -} - -#[allow(unused_variables)] -fn ___action268< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -) -> ::std::vec::Vec> -{ -v -} - -#[allow(unused_variables)] -fn ___action269< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Pattern, usize), -(_, _, _): (usize, Tok<'input>, usize), -) -> Pattern -{ -(___0) -} - -#[allow(unused_variables)] -fn ___action270< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, FieldPattern, usize), -) -> ::std::vec::Vec> -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action271< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, FieldPattern, usize), -) -> ::std::vec::Vec> -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action272< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Pattern, usize), -) -> ::std::vec::Vec> -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action273< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, Pattern, usize), -) -> ::std::vec::Vec> -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action274< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Conversion, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action275< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Conversion, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action276< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, MatchItem, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action277< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, MatchItem, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action278< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action279< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, TypeRef, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action280< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Symbol, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action281< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Symbol, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action282< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Alternative, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action283< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Alternative, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action284< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, NonterminalString, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action285< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, NonterminalString, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action286< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Parameter, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action287< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Parameter, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action288< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBoundParameter, usize), -) -> ::std::vec::Vec> -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action289< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, TypeBoundParameter, usize), -) -> ::std::vec::Vec> -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action290< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeRef, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action291< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, TypeRef, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action292< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeBound, usize), -) -> ::std::vec::Vec> -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action293< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, TypeBound, usize), -) -> ::std::vec::Vec> -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action294< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action295< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action296< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action297< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, Atom, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action298< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, WhereClause, usize), -) -> ::std::vec::Vec> -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action299< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec>, usize), -(_, e, _): (usize, WhereClause, usize), -) -> ::std::vec::Vec> -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action300< - 'input, ->( -text: &'input str, -(_, ___0, _): (usize, TypeParameter, usize), -) -> ::std::vec::Vec -{ -vec![___0] -} - -#[allow(unused_variables)] -fn ___action301< - 'input, ->( -text: &'input str, -(_, v, _): (usize, ::std::vec::Vec, usize), -(_, e, _): (usize, TypeParameter, usize), -) -> ::std::vec::Vec -{ -{ let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -fn ___action302< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action128( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action75( -text, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action303< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action129( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action75( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action304< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Vec -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action145( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action38( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action305< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -) -> Vec -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action146( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action38( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action306< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, ::std::option::Option, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action131( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action70( -text, -___0, -___1, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action307< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, ::std::option::Option, usize), -___2: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action132( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action70( -text, -___0, -___1, -___temp0, -___2, -) -} - -#[allow(unused_variables)] -fn ___action308< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, TypeRef, usize), -) -> ::std::option::Option -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action162( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action160( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action309< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, TypeRef, usize), -) -> TypeBound -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___6.2.clone(); -let ___temp0 = ___action308( -text, -___5, -___6, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action16( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action310< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action161( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action16( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action311< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, TypeRef, usize), -) -> ::std::option::Option -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action153( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action151( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action312< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, usize, usize), -___3: (usize, (NonterminalString, Vec), usize), -___4: (usize, usize, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, TypeRef, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___6.2.clone(); -let ___temp0 = ___action311( -text, -___5, -___6, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action31( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action313< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, usize, usize), -___3: (usize, (NonterminalString, Vec), usize), -___4: (usize, usize, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action152( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action31( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action314< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec>, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::option::Option>> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action158( -text, -___0, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action156( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action315< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action314( -text, -___2, -___3, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action17( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action316< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -___1: (usize, Path, usize), -) -> TypeBound -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action157( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action17( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action317< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Condition, usize), -) -> ::std::option::Option -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action142( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action140( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action318< - 'input, ->( -text: &'input str, -___0: (usize, usize, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Condition, usize), -___4: (usize, ::std::option::Option, usize), -___5: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action317( -text, -___2, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action39( -text, -___0, -___1, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action319< - 'input, ->( -text: &'input str, -___0: (usize, usize, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::option::Option, usize), -___3: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action141( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action39( -text, -___0, -___1, -___temp0, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action320< - 'input, ->( -text: &'input str, -___0: (usize, usize, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Condition, usize), -___3: (usize, ActionKind, usize), -___4: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action317( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action40( -text, -___0, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action321< - 'input, ->( -text: &'input str, -___0: (usize, usize, usize), -___1: (usize, ActionKind, usize), -___2: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action141( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action40( -text, -___0, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action322< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Visibility -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action154( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action30( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action323< - 'input, ->( -text: &'input str, -___0: (usize, Alternative, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action240( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action282( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action324< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Alternative, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action240( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action283( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action325< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action238( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action147( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action326< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action239( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action147( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action327< - 'input, ->( -text: &'input str, -___0: (usize, Conversion, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action264( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action274( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action328< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Conversion, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action264( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action275( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action329< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action262( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action121( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action330< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action263( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action121( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action331< - 'input, ->( -text: &'input str, -___0: (usize, FieldPattern, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action119( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action270( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action332< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, FieldPattern, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action119( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action271( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action333< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::option::Option>, usize), -___3: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action117( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action92( -text, -___0, -___1, -___temp0, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action334< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action118( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action92( -text, -___0, -___1, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action335< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action117( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action93( -text, -___0, -___1, -___temp0, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action336< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action118( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action93( -text, -___0, -___1, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action337< - 'input, ->( -text: &'input str, -___0: (usize, Parameter, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action230( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action286( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action338< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Parameter, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action230( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action287( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action339< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action228( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action155( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action340< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action229( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action155( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action341< - 'input, ->( -text: &'input str, -___0: (usize, WhereClause, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action204( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action298( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action342< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, WhereClause, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action204( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action299( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action343< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action202( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action169( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action344< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action203( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action169( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action345< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action127( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action251( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action346< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action127( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action252( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action347< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action125( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action302( -text, -___0, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action348< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action126( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action302( -text, -___0, -___temp0, -___2, -) -} - -#[allow(unused_variables)] -fn ___action349< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action125( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action303( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action350< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -) -> Path -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action126( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action303( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action351< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action207( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action296( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action352< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action207( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action297( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action353< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action205( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action168( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action354< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action206( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action168( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action355< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action210( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action294( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action356< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action210( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action295( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action357< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action208( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action165( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action358< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action209( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action165( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action359< - 'input, ->( -text: &'input str, -___0: (usize, MatchItem, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action259( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action276( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action360< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, MatchItem, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action259( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action277( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action361< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action257( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action122( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action362< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action258( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action122( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action363< - 'input, ->( -text: &'input str, -___0: (usize, NonterminalString, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action235( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action284( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action364< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, NonterminalString, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action235( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action285( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action365< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action233( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action148( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action366< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action234( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action148( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action367< - 'input, ->( -text: &'input str, -___0: (usize, Pattern, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action269( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action272( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action368< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, Pattern, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action269( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action273( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action369< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action267( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action120( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action370< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action268( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action120( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action371< - 'input, ->( -text: &'input str, -___0: (usize, Symbol, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action245( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action280( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action372< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Symbol, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action245( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action281( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action373< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action243( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action135( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action374< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action244( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action135( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action375< - 'input, ->( -text: &'input str, -___0: (usize, TypeBound, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action215( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action292( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action376< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, TypeBound, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action215( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action293( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action377< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action213( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action164( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action378< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action214( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action164( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action379< - 'input, ->( -text: &'input str, -___0: (usize, TypeBoundParameter, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action225( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action288( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action380< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, TypeBoundParameter, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action225( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action289( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action381< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action223( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action159( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action382< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, ::std::option::Option>, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action224( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action159( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action383< - 'input, ->( -text: &'input str, -___0: (usize, TypeParameter, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action199( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action300( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action384< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeParameter, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action199( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action301( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action385< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action197( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action170( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action386< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action198( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action170( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action387< - 'input, ->( -text: &'input str, -___0: (usize, TypeRef, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action220( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action290( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action388< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeRef, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action220( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action291( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action389< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action218( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action163( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action390< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action219( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action163( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action391< - 'input, ->( -text: &'input str, -___0: (usize, TypeRef, usize), -___1: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action250( -text, -___0, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action278( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action392< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeRef, usize), -___2: (usize, Tok<'input>, usize), -) -> ::std::vec::Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action250( -text, -___1, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action279( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action393< - 'input, ->( -text: &'input str, -___0: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action248( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action130( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action394< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action249( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action130( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action395< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Condition, usize), -___3: (usize, ::std::option::Option, usize), -___4: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action318( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action396< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -___2: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action319( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action397< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Condition, usize), -___2: (usize, ActionKind, usize), -___3: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action320( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action398< - 'input, ->( -text: &'input str, -___0: (usize, ActionKind, usize), -___1: (usize, usize, usize), -) -> Alternative -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action321( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action399< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Atom, usize), -___3: (usize, ::std::option::Option<(Atom, String)>, usize), -___4: (usize, usize, usize), -___5: (usize, Tok<'input>, usize), -) -> Annotation -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action33( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action400< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, usize, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, TypeRef, usize), -___5: (usize, Tok<'input>, usize), -) -> AssociatedType -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action88( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action401< - 'input, ->( -text: &'input str, -___0: (usize, NonterminalString, usize), -___1: (usize, ConditionOp, usize), -___2: (usize, Atom, usize), -___3: (usize, usize, usize), -) -> Condition -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action45( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action402< - 'input, ->( -text: &'input str, -___0: (usize, TerminalString, usize), -___1: (usize, &'input str, usize), -___2: (usize, usize, usize), -) -> Result,tok::Error>> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___start1 = ___0.2.clone(); -let ___end1 = ___1.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action180( -text, -&___start1, -&___end1, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action89( -text, -___temp0, -___0, -___temp1, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action403< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, TypeRef, usize), -___2: (usize, usize, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> EnumToken -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action87( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action404< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, usize, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -___4: (usize, EnumToken, usize), -___5: (usize, ::std::vec::Vec, usize), -___6: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action76( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action405< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, usize, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action77( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action406< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -___1: (usize, usize, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Pattern, usize), -) -> FieldPattern -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action100( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action407< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, usize, usize), -___5: (usize, ::std::option::Option>, usize), -___6: (usize, ::std::option::Option>, usize), -___7: (usize, ::std::option::Option>>, usize), -___8: (usize, Tok<'input>, usize), -___9: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action6( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -___5, -___6, -___7, -___8, -___9, -) -} - -#[allow(unused_variables)] -fn ___action408< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, usize, usize), -) -> MatchItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action82( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action409< - 'input, ->( -text: &'input str, -___0: (usize, TerminalLiteral, usize), -___1: (usize, usize, usize), -) -> MatchItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action83( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action410< - 'input, ->( -text: &'input str, -___0: (usize, TerminalLiteral, usize), -___1: (usize, &'input str, usize), -___2: (usize, usize, usize), -) -> Result,tok::Error>> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___start1 = ___0.2.clone(); -let ___end1 = ___1.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action180( -text, -&___start1, -&___end1, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action84( -text, -___temp0, -___0, -___temp1, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action411< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, usize, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, MatchContents, usize), -___4: (usize, Tok<'input>, usize), -) -> MatchToken -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action80( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action412< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, usize, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, TypeRef, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action312( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action413< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, usize, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action313( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action414< - 'input, ->( -text: &'input str, -___0: (usize, PatternKind, usize), -___1: (usize, usize, usize), -) -> Pattern -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action90( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action415< - 'input, ->( -text: &'input str, -___0: (usize, &'input str, usize), -) -> Result,tok::Error>> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action112( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action416< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Symbol, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, usize, usize), -) -> Symbol -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___start1 = ___0.2.clone(); -let ___end1 = ___1.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action180( -text, -&___start1, -&___end1, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action51( -text, -___temp0, -___0, -___temp1, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action417< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Symbol, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, usize, usize), -) -> Symbol -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action52( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action418< - 'input, ->( -text: &'input str, -___0: (usize, SymbolKind, usize), -___1: (usize, usize, usize), -) -> Symbol -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action180( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action59( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action419< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Condition, usize), -___3: (usize, ::std::option::Option, usize), -) -> Alternative -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action395( -text, -___0, -___1, -___2, -___3, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action420< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::option::Option, usize), -) -> Alternative -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action396( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action421< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Condition, usize), -___2: (usize, ActionKind, usize), -) -> Alternative -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action397( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action422< - 'input, ->( -text: &'input str, -___0: (usize, ActionKind, usize), -) -> Alternative -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action398( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action423< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Atom, usize), -___3: (usize, ::std::option::Option<(Atom, String)>, usize), -___4: (usize, Tok<'input>, usize), -) -> Annotation -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action399( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action424< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, TypeRef, usize), -___4: (usize, Tok<'input>, usize), -) -> AssociatedType -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action400( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action425< - 'input, ->( -text: &'input str, -___0: (usize, NonterminalString, usize), -___1: (usize, ConditionOp, usize), -___2: (usize, Atom, usize), -) -> Condition -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action401( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action426< - 'input, ->( -text: &'input str, -___0: (usize, TerminalString, usize), -___1: (usize, &'input str, usize), -) -> Result,tok::Error>> -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action402( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action427< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, TypeRef, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> EnumToken -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action403( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action428< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, EnumToken, usize), -___4: (usize, ::std::vec::Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action404( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action429< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action405( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action430< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Pattern, usize), -) -> FieldPattern -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action406( -text, -___0, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action431< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action407( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action432< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -) -> MatchItem -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action408( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action433< - 'input, ->( -text: &'input str, -___0: (usize, TerminalLiteral, usize), -) -> MatchItem -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action409( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action434< - 'input, ->( -text: &'input str, -___0: (usize, TerminalLiteral, usize), -___1: (usize, &'input str, usize), -) -> Result,tok::Error>> -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action410( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action435< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, MatchContents, usize), -___3: (usize, Tok<'input>, usize), -) -> MatchToken -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action411( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action436< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, TypeRef, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action412( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action437< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action413( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action438< - 'input, ->( -text: &'input str, -___0: (usize, PatternKind, usize), -) -> Pattern -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action414( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action439< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Symbol, usize), -___4: (usize, Tok<'input>, usize), -) -> Symbol -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action416( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action440< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Symbol, usize), -___2: (usize, Tok<'input>, usize), -) -> Symbol -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action417( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action441< - 'input, ->( -text: &'input str, -___0: (usize, Symbol, usize), -___1: (usize, RepeatOp, usize), -) -> Symbol -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action55( -text, -___0, -___1, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action442< - 'input, ->( -text: &'input str, -___0: (usize, SymbolKind, usize), -) -> Symbol -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action179( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action418( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action443< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Condition, usize), -___3: (usize, ActionKind, usize), -) -> Alternative -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action138( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action419( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action444< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Condition, usize), -) -> Alternative -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action139( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action419( -text, -___0, -___1, -___2, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action445< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ActionKind, usize), -) -> Alternative -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action138( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action420( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action446< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Alternative -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action139( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action420( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action447< - 'input, ->( -text: &'input str, -___0: (usize, Alternative, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action236( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action325( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action448< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action237( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action325( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action449< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Alternative, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action236( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action326( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action450< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action237( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action326( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action451< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action181( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action431( -text, -___0, -___1, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action452< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action182( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action431( -text, -___0, -___1, -___temp0, -___3, -___4, -___5, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action453< - 'input, ->( -text: &'input str, -___0: (usize, Visibility, usize), -___1: (usize, (NonterminalString, Vec), usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, TypeRef, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action181( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action436( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action454< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, TypeRef, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action182( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action436( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action455< - 'input, ->( -text: &'input str, -___0: (usize, Visibility, usize), -___1: (usize, (NonterminalString, Vec), usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action181( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action437( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action456< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Visibility, usize), -___2: (usize, (NonterminalString, Vec), usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -) -> GrammarItem -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action182( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action437( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action457< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Atom, usize), -___3: (usize, (Atom, String), usize), -___4: (usize, Tok<'input>, usize), -) -> Annotation -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action149( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action423( -text, -___0, -___1, -___2, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action458< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Atom, usize), -___3: (usize, Tok<'input>, usize), -) -> Annotation -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action150( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action423( -text, -___0, -___1, -___2, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action459< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, EnumToken, usize), -___3: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___start1 = ___2.2.clone(); -let ___end1 = ___3.0.clone(); -let ___temp0 = ___action123( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action123( -text, -&___start1, -&___end1, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action428( -text, -___0, -___1, -___temp0, -___2, -___temp1, -___3, -) -} - -#[allow(unused_variables)] -fn ___action460< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, EnumToken, usize), -___3: (usize, ::std::vec::Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___start1 = ___3.0.clone(); -let ___end1 = ___3.2.clone(); -let ___temp0 = ___action123( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action124( -text, -___3, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action428( -text, -___0, -___1, -___temp0, -___2, -___temp1, -___4, -) -} - -#[allow(unused_variables)] -fn ___action461< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, EnumToken, usize), -___4: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___start1 = ___3.2.clone(); -let ___end1 = ___4.0.clone(); -let ___temp0 = ___action124( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action123( -text, -&___start1, -&___end1, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action428( -text, -___0, -___1, -___temp0, -___3, -___temp1, -___4, -) -} - -#[allow(unused_variables)] -fn ___action462< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, EnumToken, usize), -___4: (usize, ::std::vec::Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___start1 = ___4.0.clone(); -let ___end1 = ___4.2.clone(); -let ___temp0 = ___action124( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -let ___temp1 = ___action124( -text, -___4, -); -let ___temp1 = (___start1, ___temp1, ___end1); -___action428( -text, -___0, -___1, -___temp0, -___3, -___temp1, -___5, -) -} - -#[allow(unused_variables)] -fn ___action463< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action123( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action429( -text, -___0, -___1, -___temp0, -___2, -) -} - -#[allow(unused_variables)] -fn ___action464< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> GrammarItem -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action124( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action429( -text, -___0, -___1, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action465< - 'input, ->( -text: &'input str, -___0: (usize, Conversion, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action260( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action329( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action466< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action261( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action329( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action467< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Conversion, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action260( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action330( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action468< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action261( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action330( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action469< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, FieldPattern, usize), -___3: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___2.0.clone(); -let ___end0 = ___2.2.clone(); -let ___temp0 = ___action115( -text, -___2, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action333( -text, -___0, -___1, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action470< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___1.2.clone(); -let ___end0 = ___2.0.clone(); -let ___temp0 = ___action116( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action333( -text, -___0, -___1, -___temp0, -___2, -) -} - -#[allow(unused_variables)] -fn ___action471< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec>, usize), -___3: (usize, FieldPattern, usize), -___4: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action115( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action334( -text, -___0, -___1, -___2, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action472< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> PatternKind -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action116( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action334( -text, -___0, -___1, -___2, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action473< - 'input, ->( -text: &'input str, -___0: (usize, Vec, usize), -___1: (usize, TypeRef, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -) -> WhereClause -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action166( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action12( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action474< - 'input, ->( -text: &'input str, -___0: (usize, TypeRef, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -) -> WhereClause -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action167( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action12( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action475< - 'input, ->( -text: &'input str, -___0: (usize, Vec, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, TypeRef, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action166( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action309( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action476< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, TypeRef, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action167( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action309( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action477< - 'input, ->( -text: &'input str, -___0: (usize, Vec, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action166( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action310( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action478< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action167( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action310( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action479< - 'input, ->( -text: &'input str, -___0: (usize, Vec, usize), -___1: (usize, Path, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action166( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action315( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action480< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action167( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action315( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action481< - 'input, ->( -text: &'input str, -___0: (usize, Vec, usize), -___1: (usize, Path, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action166( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action316( -text, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action482< - 'input, ->( -text: &'input str, -___0: (usize, Path, usize), -) -> TypeBound -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action167( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action316( -text, -___temp0, -___0, -) -} - -#[allow(unused_variables)] -fn ___action483< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___6.2.clone(); -let ___end0 = ___6.2.clone(); -let ___temp0 = ___action171( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action451( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action484< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___7.0.clone(); -let ___end0 = ___7.2.clone(); -let ___temp0 = ___action172( -text, -___7, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action451( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action485< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___7.2.clone(); -let ___end0 = ___7.2.clone(); -let ___temp0 = ___action171( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action452( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action486< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___8.0.clone(); -let ___end0 = ___8.2.clone(); -let ___temp0 = ___action172( -text, -___8, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action452( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action487< - 'input, ->( -text: &'input str, -___0: (usize, Parameter, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action226( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action339( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action488< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action227( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action339( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action489< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Parameter, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action226( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action340( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action490< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action227( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action340( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action491< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action175( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action483( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action492< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action176( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action483( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action493< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action175( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action484( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action494< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action176( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action484( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action495< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, Vec, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action175( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action485( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action496< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action176( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action485( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action497< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, Vec, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action175( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action486( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action498< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action176( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action486( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action499< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action177( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action491( -text, -___0, -___1, -___2, -___temp0, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action500< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action491( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action501< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action177( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action492( -text, -___0, -___1, -___2, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action502< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action492( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action503< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action177( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action493( -text, -___0, -___1, -___2, -___temp0, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action504< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action493( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action505< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action177( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action494( -text, -___0, -___1, -___2, -___temp0, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action506< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::option::Option>>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action494( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action507< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action177( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action495( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action508< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action495( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action509< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action177( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action496( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action510< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action496( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action511< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, ::std::option::Option>>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action177( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action497( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action512< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action497( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action513< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, ::std::option::Option>>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action177( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action498( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action514< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::option::Option>>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action178( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action498( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action515< - 'input, ->( -text: &'input str, -___0: (usize, WhereClause, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action200( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action343( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action516< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec> -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action201( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action343( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action517< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, WhereClause, usize), -) -> Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action200( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action344( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action518< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -) -> Vec> -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action201( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action344( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action519< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action499( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -) -} - -#[allow(unused_variables)] -fn ___action520< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action499( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action521< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action500( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action522< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action500( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action523< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action501( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action524< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action501( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action525< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action173( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action502( -text, -___0, -___1, -___2, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action526< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action502( -text, -___0, -___1, -___2, -___temp0, -___3, -) -} - -#[allow(unused_variables)] -fn ___action527< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action503( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action528< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action503( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action529< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action504( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action530< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action504( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action531< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action505( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action532< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action505( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action533< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.0.clone(); -let ___end0 = ___3.2.clone(); -let ___temp0 = ___action173( -text, -___3, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action506( -text, -___0, -___1, -___2, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action534< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___2.2.clone(); -let ___end0 = ___3.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action506( -text, -___0, -___1, -___2, -___temp0, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action535< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___6.0.clone(); -let ___end0 = ___6.2.clone(); -let ___temp0 = ___action173( -text, -___6, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action507( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___temp0, -___7, -) -} - -#[allow(unused_variables)] -fn ___action536< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___5.2.clone(); -let ___end0 = ___6.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action507( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___temp0, -___6, -) -} - -#[allow(unused_variables)] -fn ___action537< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action508( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -) -} - -#[allow(unused_variables)] -fn ___action538< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action508( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action539< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action509( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -) -} - -#[allow(unused_variables)] -fn ___action540< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action509( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action541< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action510( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -) -} - -#[allow(unused_variables)] -fn ___action542< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action510( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -) -} - -#[allow(unused_variables)] -fn ___action543< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___6.0.clone(); -let ___end0 = ___6.2.clone(); -let ___temp0 = ___action173( -text, -___6, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action511( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___temp0, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action544< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___5.2.clone(); -let ___end0 = ___6.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action511( -text, -___0, -___1, -___2, -___3, -___4, -___5, -___temp0, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action545< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action512( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action546< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action512( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action547< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___5.0.clone(); -let ___end0 = ___5.2.clone(); -let ___temp0 = ___action173( -text, -___5, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action513( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action548< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.2.clone(); -let ___end0 = ___5.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action513( -text, -___0, -___1, -___2, -___3, -___4, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action549< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___4.0.clone(); -let ___end0 = ___4.2.clone(); -let ___temp0 = ___action173( -text, -___4, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action514( -text, -___0, -___1, -___2, -___3, -___temp0, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action550< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___3.2.clone(); -let ___end0 = ___4.0.clone(); -let ___temp0 = ___action174( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action514( -text, -___0, -___1, -___2, -___3, -___temp0, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action551< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action133( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action357( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action552< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action357( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action553< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action133( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action358( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action554< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action358( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action555< - 'input, ->( -text: &'input str, -___0: (usize, Atom, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action133( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action353( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action556< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action353( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action557< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Atom, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action133( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action354( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action558< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action354( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action559< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action133( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action306( -text, -___0, -___temp0, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action560< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action306( -text, -___0, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action561< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Atom, usize), -___2: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action133( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action307( -text, -___0, -___temp0, -___2, -) -} - -#[allow(unused_variables)] -fn ___action562< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, TypeRef, usize), -) -> TypeRef -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action134( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action307( -text, -___0, -___temp0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action563< - 'input, ->( -text: &'input str, -___0: (usize, MatchItem, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action255( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action361( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action564< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action256( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action361( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action565< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, MatchItem, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action255( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action362( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action566< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action256( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action362( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action567< - 'input, ->( -text: &'input str, -___0: (usize, NonterminalString, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action231( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action365( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action568< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action232( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action365( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action569< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, NonterminalString, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action231( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action366( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action570< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action232( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action366( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action571< - 'input, ->( -text: &'input str, -___0: (usize, Pattern, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action265( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action369( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action572< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec> -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action266( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action369( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action573< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, Pattern, usize), -) -> Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action265( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action370( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action574< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -) -> Vec> -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action266( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action370( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action575< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action519( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action576< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action519( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action577< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action520( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action578< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action520( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action579< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action521( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action580< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action521( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action581< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action522( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action582< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action522( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action583< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action523( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action584< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action523( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action585< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action524( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action586< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action524( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action587< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action525( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action588< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action525( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action589< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action526( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action590< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action526( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action591< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action527( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action592< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action527( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action593< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action528( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action594< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action528( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action595< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action529( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action596< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action529( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action597< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action530( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action598< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action530( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action599< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action531( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action600< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action531( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action601< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action532( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action602< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action532( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action603< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action533( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action604< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action533( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action605< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action534( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action606< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action534( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action607< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action535( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action608< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action535( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action609< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action536( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action610< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action536( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action611< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action537( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action612< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action537( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action613< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action538( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action614< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action538( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action615< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action539( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action616< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action539( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action617< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action540( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action618< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action540( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action619< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action541( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action620< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action541( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action621< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action542( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action622< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action542( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action623< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action543( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action624< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action543( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action625< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action544( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action626< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action544( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action627< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action545( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action628< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action545( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action629< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action546( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action630< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action546( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action631< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action547( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action632< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action547( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action633< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action548( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action634< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action548( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action635< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action549( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action636< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action549( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action637< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action185( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action550( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action638< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action186( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action550( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action639< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> ExprSymbol -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action136( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action50( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action640< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> ExprSymbol -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action137( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action50( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action641< - 'input, ->( -text: &'input str, -___0: (usize, Symbol, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action241( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action373( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action642< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action242( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action373( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action643< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Symbol, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action241( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action374( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action644< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action242( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action374( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action645< - 'input, ->( -text: &'input str, -___0: (usize, TypeBound, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action211( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action377( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action646< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec> -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action212( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action377( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action647< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, TypeBound, usize), -) -> Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action211( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action378( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action648< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -) -> Vec> -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action212( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action378( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action649< - 'input, ->( -text: &'input str, -___0: (usize, TypeBoundParameter, usize), -) -> Vec> -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action221( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action381( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action650< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec> -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action222( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action381( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action651< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -___1: (usize, TypeBoundParameter, usize), -) -> Vec> -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action221( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action382( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action652< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec>, usize), -) -> Vec> -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action222( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action382( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action653< - 'input, ->( -text: &'input str, -___0: (usize, TypeParameter, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action195( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action385( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action654< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action196( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action385( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action655< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeParameter, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action195( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action386( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action656< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action196( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action386( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action657< - 'input, ->( -text: &'input str, -___0: (usize, TypeRef, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action216( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action389( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action658< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action217( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action389( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action659< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeRef, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action216( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action390( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action660< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action217( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action390( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action661< - 'input, ->( -text: &'input str, -___0: (usize, TypeRef, usize), -) -> Vec -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action246( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action393( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action662< - 'input, ->( -text: &'input str, -___lookbehind: &usize, -___lookahead: &usize, -) -> Vec -{ -let ___start0 = ___lookbehind.clone(); -let ___end0 = ___lookahead.clone(); -let ___temp0 = ___action247( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action393( -text, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action663< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, TypeRef, usize), -) -> Vec -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action246( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action394( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action664< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -) -> Vec -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action247( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action394( -text, -___0, -___temp0, -) -} - -#[allow(unused_variables)] -fn ___action665< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action575( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action666< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action575( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action667< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action576( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action668< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action576( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action669< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action577( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action670< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action577( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action671< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action578( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action672< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action578( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action673< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action579( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action674< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action579( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action675< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action580( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action676< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action580( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action677< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action581( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action678< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action581( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action679< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action582( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action680< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action582( -text, -___0, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action681< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action583( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action682< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action583( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action683< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action584( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action684< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action584( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action685< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action585( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action686< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action585( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action687< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action586( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action688< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action586( -text, -___0, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action689< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec>, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action587( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action690< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action587( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action691< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action588( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action692< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action588( -text, -___0, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action693< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action589( -text, -___temp0, -___0, -___1, -) -} - -#[allow(unused_variables)] -fn ___action694< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action589( -text, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action695< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action590( -text, -___0, -___temp0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action696< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action590( -text, -___0, -___temp0, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action697< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action591( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action698< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action591( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action699< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action592( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action700< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action592( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action701< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action593( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action702< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action593( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action703< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action594( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action704< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action594( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action705< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action595( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action706< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action595( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action707< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action596( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action708< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action596( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action709< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action597( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action710< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action597( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action711< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action598( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action712< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action598( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action713< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action599( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action714< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action599( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action715< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action600( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action716< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action600( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action717< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action601( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action718< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action601( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action719< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action602( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action720< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action602( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action721< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Vec>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action603( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action722< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action603( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action723< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action604( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action724< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action604( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action725< - 'input, ->( -text: &'input str, -___0: (usize, Tok<'input>, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action605( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action726< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action605( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action727< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action606( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action728< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action606( -text, -___0, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action729< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action607( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action730< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action607( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action731< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action608( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action732< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action608( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action733< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action609( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action734< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action609( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action735< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action610( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action736< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action610( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action737< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action611( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action738< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action611( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action739< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action612( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action740< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action612( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action741< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action613( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action742< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action613( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action743< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action614( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action744< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action614( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action745< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action615( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action746< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action615( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action747< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action616( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action748< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action616( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action749< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action617( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action750< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action617( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action751< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action618( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action752< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action618( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action753< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action619( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action754< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action619( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action755< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action620( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action756< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action620( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action757< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action621( -text, -___temp0, -___0, -___1, -___2, -) -} - -#[allow(unused_variables)] -fn ___action758< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action621( -text, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action759< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action622( -text, -___0, -___temp0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action760< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action622( -text, -___0, -___temp0, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action761< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action623( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action762< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action623( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action763< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action624( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action764< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Vec>, usize), -___7: (usize, Tok<'input>, usize), -___8: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action624( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -___8, -) -} - -#[allow(unused_variables)] -fn ___action765< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action625( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action766< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action625( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action767< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action626( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action768< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action626( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action769< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action627( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action770< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action627( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action771< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action628( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action772< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action628( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action773< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action629( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action774< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action629( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action775< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action630( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action776< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action630( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action777< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action631( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action778< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action631( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action779< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action632( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action780< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Vec>, usize), -___6: (usize, Tok<'input>, usize), -___7: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action632( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -___7, -) -} - -#[allow(unused_variables)] -fn ___action781< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action633( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action782< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action633( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action783< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action634( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action784< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action634( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action785< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Vec>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action635( -text, -___temp0, -___0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action786< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action635( -text, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action787< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Vec>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action636( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -___5, -) -} - -#[allow(unused_variables)] -fn ___action788< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Vec>, usize), -___5: (usize, Tok<'input>, usize), -___6: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action636( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -___6, -) -} - -#[allow(unused_variables)] -fn ___action789< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, Tok<'input>, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action637( -text, -___temp0, -___0, -___1, -___2, -___3, -) -} - -#[allow(unused_variables)] -fn ___action790< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.0.clone(); -let ___end0 = ___0.2.clone(); -let ___temp0 = ___action184( -text, -___0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action637( -text, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action791< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, Tok<'input>, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___0.2.clone(); -let ___end0 = ___1.0.clone(); -let ___temp0 = ___action183( -text, -&___start0, -&___end0, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action638( -text, -___0, -___temp0, -___1, -___2, -___3, -___4, -) -} - -#[allow(unused_variables)] -fn ___action792< - 'input, ->( -text: &'input str, -___0: (usize, ::std::vec::Vec, usize), -___1: (usize, ::std::vec::Vec, usize), -___2: (usize, ::std::vec::Vec, usize), -___3: (usize, Tok<'input>, usize), -___4: (usize, Tok<'input>, usize), -___5: (usize, ::std::vec::Vec, usize), -) -> Grammar -{ -let ___start0 = ___1.0.clone(); -let ___end0 = ___1.2.clone(); -let ___temp0 = ___action184( -text, -___1, -); -let ___temp0 = (___start0, ___temp0, ___end0); -___action638( -text, -___0, -___temp0, -___2, -___3, -___4, -___5, -) -} - -pub trait ___ToTriple<'input, > { -type Error; -fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),Self::Error>; -} - -impl<'input, > ___ToTriple<'input, > for (usize, Tok<'input>, usize) { -type Error = tok::Error; -fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),tok::Error> { -Ok(value) -} -} -impl<'input, > ___ToTriple<'input, > for Result<(usize, Tok<'input>, usize),tok::Error> { -type Error = tok::Error; -fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),tok::Error> { -value -} -} diff --git a/third_party/rust/lalrpop/src/parser/mod.rs b/third_party/rust/lalrpop/src/parser/mod.rs index 6d2a8958901a..de42629649d7 100644 --- a/third_party/rust/lalrpop/src/parser/mod.rs +++ b/third_party/rust/lalrpop/src/parser/mod.rs @@ -1,84 +1,54 @@ -use std::iter; - -use grammar::parse_tree::*; -use grammar::pattern::*; -use lalrpop_util; -use tok; - -#[cfg(not(any(feature = "test", test)))] -#[allow(dead_code)] -mod lrgrammar; - -#[cfg(any(feature = "test", test))] -lalrpop_mod!( - // --------------------------------------------------------------------------------------- - // NOTE: Run `cargo build -p lalrpop` once before running `cargo test` to create this file - // --------------------------------------------------------------------------------------- - #[allow(dead_code)] - lrgrammar, - "/src/parser/lrgrammar.rs" -); - -#[cfg(test)] -mod test; - -pub enum Top { - Grammar(Grammar), - Pattern(Pattern), - MatchMapping(TerminalString), - TypeRef(TypeRef), - GrammarWhereClauses(Vec>), -} - -pub type ParseError<'input> = lalrpop_util::ParseError, tok::Error>; - -macro_rules! parser { - ($input: expr, $offset: expr, $pat: ident, $tok: ident) => {{ - let input = $input; - let tokenizer = - iter::once(Ok((0, tok::Tok::$tok, 0))).chain(tok::Tokenizer::new(input, $offset)); - lrgrammar::TopParser::new() - .parse(input, tokenizer) - .map(|top| match top { - Top::$pat(x) => x, - _ => unreachable!(), - }) - }}; -} - -pub fn parse_grammar<'input>(input: &'input str) -> Result> { - let mut grammar = try!(parser!(input, 0, Grammar, StartGrammar)); - - // find a unique prefix that does not appear anywhere in the input - while input.contains(&grammar.prefix) { - grammar.prefix.push('_'); - } - - Ok(grammar) -} - -fn parse_pattern<'input>( - input: &'input str, - offset: usize, -) -> Result, ParseError<'input>> { - parser!(input, offset, Pattern, StartPattern) -} - -fn parse_match_mapping<'input>( - input: &'input str, - offset: usize, -) -> Result> { - parser!(input, offset, MatchMapping, StartMatchMapping) -} - -#[cfg(test)] -pub fn parse_type_ref<'input>(input: &'input str) -> Result> { - parser!(input, 0, TypeRef, StartTypeRef) -} - -#[cfg(test)] -pub fn parse_where_clauses<'input>( - input: &'input str, -) -> Result>, ParseError<'input>> { - parser!(input, 0, GrammarWhereClauses, StartGrammarWhereClauses) -} +use grammar::parse_tree::*; +use grammar::pattern::*; +use lalrpop_util; +use tok; + +#[allow(dead_code)] +mod lrgrammar; + +#[cfg(test)] +mod test; + +pub type ParseError<'input> = lalrpop_util::ParseError, tok::Error>; + +pub fn parse_grammar<'input>(input: &'input str) -> Result> { + let tokenizer = tok::Tokenizer::new(input, 0); + let mut grammar = try!(lrgrammar::GrammarParser::new().parse(input, tokenizer)); + + // find a unique prefix that does not appear anywhere in the input + while input.contains(&grammar.prefix) { + grammar.prefix.push('_'); + } + + Ok(grammar) +} + +fn parse_pattern<'input>( + input: &'input str, + offset: usize, +) -> Result, ParseError<'input>> { + let tokenizer = tok::Tokenizer::new(input, offset); + lrgrammar::PatternParser::new().parse(input, tokenizer) +} + +fn parse_match_mapping<'input>( + input: &'input str, + offset: usize, +) -> Result> { + let tokenizer = tok::Tokenizer::new(input, offset); + lrgrammar::MatchMappingParser::new().parse(input, tokenizer) +} + +#[cfg(test)] +pub fn parse_type_ref<'input>(input: &'input str) -> Result> { + let tokenizer = tok::Tokenizer::new(input, 0); + lrgrammar::TypeRefParser::new().parse(input, tokenizer) +} + +#[cfg(test)] +pub fn parse_where_clauses<'input>( + input: &'input str, +) -> Result>, ParseError<'input>> { + let tokenizer = tok::Tokenizer::new(input, 0); + lrgrammar::GrammarWhereClausesParser::new().parse(input, tokenizer) +} diff --git a/third_party/rust/lalrpop/src/parser/test.rs b/third_party/rust/lalrpop/src/parser/test.rs index 722b36088ae4..ce37e57ba7dd 100644 --- a/third_party/rust/lalrpop/src/parser/test.rs +++ b/third_party/rust/lalrpop/src/parser/test.rs @@ -1,5 +1,5 @@ -use grammar::parse_tree::{GrammarItem, MatchItem}; use parser; +use grammar::parse_tree::{GrammarItem, MatchItem}; #[test] fn match_block() { @@ -40,8 +40,7 @@ fn match_complex() { _ } "#, - ) - .unwrap(); + ).unwrap(); // We could probably make some nice system for testing this let first_item = parsed.items.first().expect("has item"); diff --git a/third_party/rust/lalrpop/src/rust/mod.rs b/third_party/rust/lalrpop/src/rust/mod.rs index c7b3e392d081..928fba792657 100644 --- a/third_party/rust/lalrpop/src/rust/mod.rs +++ b/third_party/rust/lalrpop/src/rust/mod.rs @@ -1,196 +1,191 @@ -//! Simple Rust AST. This is what the various code generators create, -//! which then gets serialized. - -use grammar::parse_tree::Visibility; -use grammar::repr::Grammar; -use std::fmt; -use std::io::{self, Write}; -use tls::Tls; - -macro_rules! rust { - ($w:expr, $($args:tt)*) => { - try!(($w).writeln(&::std::fmt::format(format_args!($($args)*)))) - } -} - -/// A wrapper around a Write instance that handles indentation for -/// Rust code. It expects Rust code to be written in a stylized way, -/// with lots of braces and newlines (example shown here with no -/// indentation). Over time maybe we can extend this to make things -/// look prettier, but seems like...meh, just run it through some -/// rustfmt tool. -/// -/// ```ignore -/// fn foo( -/// arg1: Type1, -/// arg2: Type2, -/// arg3: Type3) -/// -> ReturnType -/// { -/// match foo { -/// Variant => { -/// } -/// } -/// } -/// ``` -pub struct RustWrite { - write: W, - indent: usize, -} - -const TAB: usize = 4; - -impl RustWrite { - pub fn new(w: W) -> RustWrite { - RustWrite { - write: w, - indent: 0, - } - } - - pub fn into_inner(self) -> W { - self.write - } - - fn write_indentation(&mut self) -> io::Result<()> { - if Tls::session().emit_whitespace { - write!(self.write, "{0:1$}", "", self.indent)?; - } - Ok(()) - } - - fn write_indented(&mut self, out: &str) -> io::Result<()> { - self.write_indentation()?; - writeln!(self.write, "{}", out) - } - - pub fn write_table_row(&mut self, iterable: I) -> io::Result<()> - where - I: IntoIterator, - C: fmt::Display, - { - let session = Tls::session(); - if session.emit_comments { - for (i, comment) in iterable { - try!(self.write_indentation()); - try!(writeln!(self.write, "{}, {}", i, comment)); - } - } else { - try!(self.write_indentation()); - let mut first = true; - for (i, _comment) in iterable { - if !first && session.emit_whitespace { - try!(write!(self.write, " ")); - } - try!(write!(self.write, "{},", i)); - first = false; - } - } - writeln!(self.write, "") - } - - pub fn writeln(&mut self, out: &str) -> io::Result<()> { - let buf = out.as_bytes(); - - // pass empty lines through with no indentation - if buf.is_empty() { - return self.write.write_all("\n".as_bytes()); - } - - let n = buf.len() - 1; - - // If the line begins with a `}`, `]`, or `)`, first decrement the indentation. - if buf[0] == ('}' as u8) || buf[0] == (']' as u8) || buf[0] == (')' as u8) { - self.indent -= TAB; - } - - try!(self.write_indented(out)); - - // Detect a line that ends in a `{` or `(` and increase indentation for future lines. - if buf[n] == ('{' as u8) || buf[n] == ('[' as u8) || buf[n] == ('(' as u8) { - self.indent += TAB; - } - - Ok(()) - } - - pub fn write_fn_header( - &mut self, - grammar: &Grammar, - visibility: &Visibility, - name: String, - type_parameters: Vec, - first_parameter: Option, - parameters: Vec, - return_type: String, - where_clauses: Vec, - ) -> io::Result<()> { - rust!(self, "{}fn {}<", visibility, name); - - for type_parameter in &grammar.type_parameters { - rust!(self, "{0:1$}{2},", "", TAB, type_parameter); - } - - for type_parameter in type_parameters { - rust!(self, "{0:1$}{2},", "", TAB, type_parameter); - } - - rust!(self, ">("); - - if let Some(param) = first_parameter { - rust!(self, "{},", param); - } - for parameter in &grammar.parameters { - rust!(self, "{}: {},", parameter.name, parameter.ty); - } - - for parameter in ¶meters { - rust!(self, "{},", parameter); - } - - if !grammar.where_clauses.is_empty() || !where_clauses.is_empty() { - rust!(self, ") -> {} where", return_type); - - for where_clause in &grammar.where_clauses { - rust!(self, " {},", where_clause); - } - - for where_clause in &where_clauses { - rust!(self, " {},", where_clause); - } - } else { - rust!(self, ") -> {}", return_type); - } - - Ok(()) - } - - pub fn write_module_attributes(&mut self, grammar: &Grammar) -> io::Result<()> { - for attribute in grammar.module_attributes.iter() { - rust!(self, "{}", attribute); - } - Ok(()) - } - - pub fn write_uses(&mut self, super_prefix: &str, grammar: &Grammar) -> io::Result<()> { - // things the user wrote - for u in &grammar.uses { - if u.starts_with("super::") { - rust!(self, "use {}{};", super_prefix, u); - } else { - rust!(self, "use {};", u); - } - } - - self.write_standard_uses(&grammar.prefix) - } - - pub fn write_standard_uses(&mut self, prefix: &str) -> io::Result<()> { - // Stuff that we plan to use. - // Occasionally we happen to not use it after all, hence the allow. - rust!(self, "#[allow(unused_extern_crates)]"); - rust!(self, "extern crate lalrpop_util as {}lalrpop_util;", prefix); - - Ok(()) - } -} +//! Simple Rust AST. This is what the various code generators create, +//! which then gets serialized. + +use grammar::repr::Grammar; +use grammar::parse_tree::Visibility; +use tls::Tls; +use std::fmt; +use std::io::{self, Write}; + +macro_rules! rust { + ($w:expr, $($args:tt)*) => { + try!(($w).writeln(&::std::fmt::format(format_args!($($args)*)))) + } +} + +/// A wrapper around a Write instance that handles indentation for +/// Rust code. It expects Rust code to be written in a stylized way, +/// with lots of braces and newlines (example shown here with no +/// indentation). Over time maybe we can extend this to make things +/// look prettier, but seems like...meh, just run it through some +/// rustfmt tool. +/// +/// ```ignore +/// fn foo( +/// arg1: Type1, +/// arg2: Type2, +/// arg3: Type3) +/// -> ReturnType +/// { +/// match foo { +/// Variant => { +/// } +/// } +/// } +/// ``` +pub struct RustWrite { + write: W, + indent: usize, +} + +const TAB: usize = 4; + +impl RustWrite { + pub fn new(w: W) -> RustWrite { + RustWrite { + write: w, + indent: 0, + } + } + + pub fn into_inner(self) -> W { + self.write + } + + fn write_indentation(&mut self) -> io::Result<()> { + write!(self.write, "{0:1$}", "", self.indent) + } + + fn write_indented(&mut self, out: &str) -> io::Result<()> { + writeln!(self.write, "{0:1$}{2}", "", self.indent, out) + } + + pub fn write_table_row(&mut self, iterable: I) -> io::Result<()> + where + I: IntoIterator, + C: fmt::Display, + { + if Tls::session().emit_comments { + for (i, comment) in iterable { + try!(self.write_indentation()); + try!(writeln!(self.write, "{}, {}", i, comment)); + } + } else { + try!(self.write_indentation()); + let mut first = true; + for (i, _comment) in iterable { + if !first { + try!(write!(self.write, " ")); + } + try!(write!(self.write, "{},", i)); + first = false; + } + } + writeln!(self.write, "") + } + + pub fn writeln(&mut self, out: &str) -> io::Result<()> { + let buf = out.as_bytes(); + + // pass empty lines through with no indentation + if buf.is_empty() { + return self.write.write_all("\n".as_bytes()); + } + + let n = buf.len() - 1; + + // If the line begins with a `}`, `]`, or `)`, first decrement the indentation. + if buf[0] == ('}' as u8) || buf[0] == (']' as u8) || buf[0] == (')' as u8) { + self.indent -= TAB; + } + + try!(self.write_indented(out)); + + // Detect a line that ends in a `{` or `(` and increase indentation for future lines. + if buf[n] == ('{' as u8) || buf[n] == ('[' as u8) || buf[n] == ('(' as u8) { + self.indent += TAB; + } + + Ok(()) + } + + pub fn write_fn_header( + &mut self, + grammar: &Grammar, + visibility: &Visibility, + name: String, + type_parameters: Vec, + first_parameter: Option, + parameters: Vec, + return_type: String, + where_clauses: Vec, + ) -> io::Result<()> { + rust!(self, "{}fn {}<", visibility, name); + + for type_parameter in &grammar.type_parameters { + rust!(self, "{0:1$}{2},", "", TAB, type_parameter); + } + + for type_parameter in type_parameters { + rust!(self, "{0:1$}{2},", "", TAB, type_parameter); + } + + rust!(self, ">("); + + if let Some(param) = first_parameter { + rust!(self, "{},", param); + } + for parameter in &grammar.parameters { + rust!(self, "{}: {},", parameter.name, parameter.ty); + } + + for parameter in ¶meters { + rust!(self, "{},", parameter); + } + + if !grammar.where_clauses.is_empty() || !where_clauses.is_empty() { + rust!(self, ") -> {} where", return_type); + + for where_clause in &grammar.where_clauses { + rust!(self, " {},", where_clause); + } + + for where_clause in &where_clauses { + rust!(self, " {},", where_clause); + } + } else { + rust!(self, ") -> {}", return_type); + } + + Ok(()) + } + + pub fn write_module_attributes(&mut self, grammar: &Grammar) -> io::Result<()> { + for attribute in grammar.module_attributes.iter() { + rust!(self, "{}", attribute); + } + Ok(()) + } + + pub fn write_uses(&mut self, super_prefix: &str, grammar: &Grammar) -> io::Result<()> { + // things the user wrote + for u in &grammar.uses { + if u.starts_with("super::") { + rust!(self, "use {}{};", super_prefix, u); + } else { + rust!(self, "use {};", u); + } + } + + self.write_standard_uses(&grammar.prefix) + } + + pub fn write_standard_uses(&mut self, prefix: &str) -> io::Result<()> { + // Stuff that we plan to use. + // Occasionally we happen to not use it after all, hence the allow. + rust!(self, "#[allow(unused_extern_crates)]"); + rust!(self, "extern crate lalrpop_util as {}lalrpop_util;", prefix); + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop/src/session.rs b/third_party/rust/lalrpop/src/session.rs index f6d2b5ad456e..495157c5293d 100644 --- a/third_party/rust/lalrpop/src/session.rs +++ b/third_party/rust/lalrpop/src/session.rs @@ -1,165 +1,154 @@ -//! Internal configuration and session-specific settings. This is similar -//! to `configuration::Configuration`, but it is not exported outside the -//! crate. Note that all fields are public and so forth for convenience. - -use log::{Level, Log}; -use std::collections::BTreeSet; -use std::default::Default; -use std::path; -use style::{self, Style}; - -// These two, ubiquitous types are defined here so that their fields can be private -// across crate, but visible within the crate: - -#[derive(Copy, Clone)] -pub enum ColorConfig { - /// Use ANSI colors. - Yes, - - /// Do NOT use ANSI colors. - No, - - /// Use them if we detect a TTY output (default). - IfTty, -} - -/// Various options to control debug output. Although this struct is -/// technically part of LALRPOP's exported interface, it is not -/// considered part of the semver guarantees as end-users are not -/// expected to use it. -#[derive(Clone)] -pub struct Session { - pub log: Log, - - pub force_build: bool, - - pub in_dir: Option, - - pub out_dir: Option, - - /// Emit comments in generated code explaining the states and so - /// forth. - pub emit_comments: bool, - - /// Emit whitespace in the generated code to improve readability. - pub emit_whitespace: bool, - - /// Emit report file about generated code - pub emit_report: bool, - - pub color_config: ColorConfig, - - /// Stop after you find `max_errors` errors. If this value is 0, - /// report *all* errors. Note that we MAY always report more than - /// this value if we so choose. - pub max_errors: usize, - - // Styles to use when formatting error reports - /// Applied to the heading in a message. - pub heading: Style, - - /// Applied to symbols in an ambiguity report (where there is no cursor) - pub ambig_symbols: Style, - - /// Applied to symbols before the cursor in a local ambiguity report - pub observed_symbols: Style, - - /// Applied to symbols at the cursor in a local ambiguity report, - /// if it is a non-terminal - pub cursor_symbol: Style, - - /// Applied to symbols after the cursor in a local ambiguity report - pub unobserved_symbols: Style, - - /// Applied to terminal symbols, in addition to the above styles - pub terminal_symbol: Style, - - /// Applied to nonterminal symbols, in addition to the above styles - pub nonterminal_symbol: Style, - - /// Style to use when printing "Hint:" - pub hint_text: Style, - - /// Unit testing (lalrpop-test) configuration - pub unit_test: bool, - - /// Features used for conditional compilation - pub features: Option>, -} - -impl Session { - pub fn new() -> Session { - Session { - log: Log::new(Level::Informative), - in_dir: None, - out_dir: None, - force_build: false, - emit_comments: false, - emit_whitespace: true, - emit_report: false, - color_config: ColorConfig::default(), - max_errors: 1, - heading: style::FG_WHITE.with(style::BOLD), - ambig_symbols: style::FG_WHITE, - observed_symbols: style::FG_BRIGHT_GREEN, - cursor_symbol: style::FG_BRIGHT_WHITE, - unobserved_symbols: style::FG_BRIGHT_RED, - terminal_symbol: style::BOLD, - nonterminal_symbol: style::DEFAULT, - hint_text: style::FG_BRIGHT_MAGENTA.with(style::BOLD), - unit_test: false, - features: Default::default(), - } - } - - /// A session suitable for use in testing. - #[cfg(test)] - pub fn test() -> Session { - Session { - log: Log::new(Level::Debug), - in_dir: None, - out_dir: None, - force_build: false, - emit_comments: false, - emit_whitespace: true, - emit_report: false, - color_config: ColorConfig::IfTty, - max_errors: 1, - heading: Style::new(), - ambig_symbols: Style::new(), - observed_symbols: Style::new(), - cursor_symbol: Style::new(), - unobserved_symbols: Style::new(), - terminal_symbol: Style::new(), - nonterminal_symbol: Style::new(), - hint_text: Style::new(), - unit_test: true, - features: Default::default(), - } - } - - /// Indicates whether we should stop after `actual_errors` number - /// of errors have been reported. - pub fn stop_after(&self, actual_errors: usize) -> bool { - self.max_errors != 0 && actual_errors >= self.max_errors - } - - pub fn log(&self, level: Level, message: M) - where - M: FnOnce() -> String, - { - self.log.log(level, message) - } -} - -impl Default for Session { - fn default() -> Self { - Session::new() - } -} - -impl Default for ColorConfig { - fn default() -> Self { - ColorConfig::IfTty - } -} +//! Internal configuration and session-specific settings. This is similar +//! to `configuration::Configuration`, but it is not exported outside the +//! crate. Note that all fields are public and so forth for convenience. + +use std::default::Default; +use std::path; +use style::{self, Style}; +use log::{Level, Log}; + +// These two, ubiquitous types are defined here so that their fields can be private +// across crate, but visible within the crate: + +#[derive(Copy, Clone)] +pub enum ColorConfig { + /// Use ANSI colors. + Yes, + + /// Do NOT use ANSI colors. + No, + + /// Use them if we detect a TTY output (default). + IfTty, +} + +/// Various options to control debug output. Although this struct is +/// technically part of LALRPOP's exported interface, it is not +/// considered part of the semver guarantees as end-users are not +/// expected to use it. +#[derive(Clone)] +pub struct Session { + pub log: Log, + + pub force_build: bool, + + pub in_dir: Option, + + pub out_dir: Option, + + /// Emit comments in generated code explaining the states and so + /// forth. + pub emit_comments: bool, + + /// Emit report file about generated code + pub emit_report: bool, + + pub color_config: ColorConfig, + + /// Stop after you find `max_errors` errors. If this value is 0, + /// report *all* errors. Note that we MAY always report more than + /// this value if we so choose. + pub max_errors: usize, + + // Styles to use when formatting error reports + /// Applied to the heading in a message. + pub heading: Style, + + /// Applied to symbols in an ambiguity report (where there is no cursor) + pub ambig_symbols: Style, + + /// Applied to symbols before the cursor in a local ambiguity report + pub observed_symbols: Style, + + /// Applied to symbols at the cursor in a local ambiguity report, + /// if it is a non-terminal + pub cursor_symbol: Style, + + /// Applied to symbols after the cursor in a local ambiguity report + pub unobserved_symbols: Style, + + /// Applied to terminal symbols, in addition to the above styles + pub terminal_symbol: Style, + + /// Applied to nonterminal symbols, in addition to the above styles + pub nonterminal_symbol: Style, + + /// Style to use when printing "Hint:" + pub hint_text: Style, + + /// Unit testing (lalrpop-test) configuration + pub unit_test: bool, +} + +impl Session { + pub fn new() -> Session { + Session { + log: Log::new(Level::Informative), + in_dir: None, + out_dir: None, + force_build: false, + emit_comments: false, + emit_report: false, + color_config: ColorConfig::default(), + max_errors: 1, + heading: style::FG_WHITE.with(style::BOLD), + ambig_symbols: style::FG_WHITE, + observed_symbols: style::FG_BRIGHT_GREEN, + cursor_symbol: style::FG_BRIGHT_WHITE, + unobserved_symbols: style::FG_BRIGHT_RED, + terminal_symbol: style::BOLD, + nonterminal_symbol: style::DEFAULT, + hint_text: style::FG_BRIGHT_MAGENTA.with(style::BOLD), + unit_test: false, + } + } + + /// A session suitable for use in testing. + #[cfg(test)] + pub fn test() -> Session { + Session { + log: Log::new(Level::Debug), + in_dir: None, + out_dir: None, + force_build: false, + emit_comments: false, + emit_report: false, + color_config: ColorConfig::IfTty, + max_errors: 1, + heading: Style::new(), + ambig_symbols: Style::new(), + observed_symbols: Style::new(), + cursor_symbol: Style::new(), + unobserved_symbols: Style::new(), + terminal_symbol: Style::new(), + nonterminal_symbol: Style::new(), + hint_text: Style::new(), + unit_test: true, + } + } + + /// Indicates whether we should stop after `actual_errors` number + /// of errors have been reported. + pub fn stop_after(&self, actual_errors: usize) -> bool { + self.max_errors != 0 && actual_errors >= self.max_errors + } + + pub fn log(&self, level: Level, message: M) + where + M: FnOnce() -> String, + { + self.log.log(level, message) + } +} + +impl Default for Session { + fn default() -> Self { + Session::new() + } +} + +impl Default for ColorConfig { + fn default() -> Self { + ColorConfig::IfTty + } +} diff --git a/third_party/rust/lalrpop/src/test_util.rs b/third_party/rust/lalrpop/src/test_util.rs index 865552dddebb..d4e2505bdee7 100644 --- a/third_party/rust/lalrpop/src/test_util.rs +++ b/third_party/rust/lalrpop/src/test_util.rs @@ -1,68 +1,68 @@ -use diff; -use grammar::parse_tree as pt; -use grammar::repr as r; -use normalize::NormError; -use regex::Regex; -use std::fmt::{Debug, Error, Formatter}; - -thread_local! { - static SPAN: Regex = - Regex::new(r"Span\([0-9 ,]*\)").unwrap() -} - -struct ExpectedDebug<'a>(&'a str); - -impl<'a> Debug for ExpectedDebug<'a> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - write!(fmt, "{}", self.0) - } -} - -pub fn expect_debug(actual: D, expected: &str) { - compare( - ExpectedDebug(&format!("{:#?}", actual)), - ExpectedDebug(expected), - ) -} - -pub fn compare(actual: D, expected: E) { - let actual_s = format!("{:?}", actual); - let expected_s = format!("{:?}", expected); - - SPAN.with(|span| { - let actual_s = span.replace_all(&actual_s, "Span(..)"); - let expected_s = span.replace_all(&expected_s, "Span(..)"); - if actual_s != expected_s { - let actual_s = format!("{:#?}", actual); - let expected_s = format!("{:#?}", expected); - - for diff in diff::lines(&actual_s, &expected_s) { - match diff { - diff::Result::Right(r) => println!("- {}", r), - diff::Result::Left(l) => println!("+ {}", l), - diff::Result::Both(l, _) => println!(" {}", l), - } - } - - assert!(false); - } - }); -} - -pub fn normalized_grammar(s: &str) -> r::Grammar { - ::normalize::normalize_without_validating(::parser::parse_grammar(s).unwrap()).unwrap() -} - -pub fn check_norm_err(expected_err: &str, span: &str, err: NormError) { - let expected_err = Regex::new(expected_err).unwrap(); - let start_index = span.find("~").unwrap(); - let end_index = span.rfind("~").unwrap() + 1; - assert!(start_index <= end_index); - assert_eq!(err.span, pt::Span(start_index, end_index)); - assert!( - expected_err.is_match(&err.message), - "unexpected error text `{}`, which did not match regular expression `{}`", - err.message, - expected_err - ); -} +use diff; +use grammar::parse_tree as pt; +use grammar::repr as r; +use normalize::NormError; +use regex::Regex; +use std::fmt::{Debug, Error, Formatter}; + +thread_local! { + static SPAN: Regex = + Regex::new(r"Span\([0-9 ,]*\)").unwrap() +} + +struct ExpectedDebug<'a>(&'a str); + +impl<'a> Debug for ExpectedDebug<'a> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +pub fn expect_debug(actual: D, expected: &str) { + compare( + ExpectedDebug(&format!("{:#?}", actual)), + ExpectedDebug(expected), + ) +} + +pub fn compare(actual: D, expected: E) { + let actual_s = format!("{:?}", actual); + let expected_s = format!("{:?}", expected); + + SPAN.with(|span| { + let actual_s = span.replace_all(&actual_s, "Span(..)"); + let expected_s = span.replace_all(&expected_s, "Span(..)"); + if actual_s != expected_s { + let actual_s = format!("{:#?}", actual); + let expected_s = format!("{:#?}", expected); + + for diff in diff::lines(&actual_s, &expected_s) { + match diff { + diff::Result::Right(r) => println!("- {}", r), + diff::Result::Left(l) => println!("+ {}", l), + diff::Result::Both(l, _) => println!(" {}", l), + } + } + + assert!(false); + } + }); +} + +pub fn normalized_grammar(s: &str) -> r::Grammar { + ::normalize::normalize_without_validating(::parser::parse_grammar(s).unwrap()).unwrap() +} + +pub fn check_norm_err(expected_err: &str, span: &str, err: NormError) { + let expected_err = Regex::new(expected_err).unwrap(); + let start_index = span.find("~").unwrap(); + let end_index = span.rfind("~").unwrap() + 1; + assert!(start_index <= end_index); + assert_eq!(err.span, pt::Span(start_index, end_index)); + assert!( + expected_err.is_match(&err.message), + "unexpected error text `{}`, which did not match regular expression `{}`", + err.message, + expected_err + ); +} diff --git a/third_party/rust/lalrpop/src/tls/mod.rs b/third_party/rust/lalrpop/src/tls/mod.rs index 3b6ee658f949..5fb32fc741c6 100644 --- a/third_party/rust/lalrpop/src/tls/mod.rs +++ b/third_party/rust/lalrpop/src/tls/mod.rs @@ -1,77 +1,77 @@ -//! Certain bits of environmental state are too annoying to thread -//! around everywhere, so pack them into TLS. - -use file_text::FileText; -use session::Session; -use std::cell::RefCell; -use std::rc::Rc; - -pub struct Tls { - _dummy: (), -} - -#[derive(Clone)] -struct TlsFields { - session: Rc, - file_text: Rc, -} - -thread_local! { - static THE_TLS_FIELDS: RefCell> = - RefCell::new(None) -} - -impl Tls { - #[cfg(test)] - pub fn test() -> Tls { - Self::install(Rc::new(Session::test()), Rc::new(FileText::test())) - } - - #[cfg(test)] - pub fn test_string(text: &str) -> Tls { - use std::path::PathBuf; - Self::install( - Rc::new(Session::test()), - Rc::new(FileText::new(PathBuf::from("tmp.txt"), String::from(text))), - ) - } - - /// Installs `Tls` and returns a placeholder value. When this - /// value is dropped, the `Tls` entries will be removed. To access - /// the values from `Tls`, call `Tls::session()` or - /// `Tls::file_text()`. - pub fn install(session: Rc, file_text: Rc) -> Tls { - let fields = TlsFields { - session: session, - file_text: file_text, - }; - - THE_TLS_FIELDS.with(|s| { - let mut s = s.borrow_mut(); - assert!(s.is_none()); - *s = Some(fields.clone()); - }); - - Tls { _dummy: () } - } - - fn fields() -> TlsFields { - THE_TLS_FIELDS.with(|s| s.borrow().clone().expect("TLS is not installed")) - } - - pub fn session() -> Rc { - Self::fields().session - } - - pub fn file_text() -> Rc { - Self::fields().file_text - } -} - -impl Drop for Tls { - fn drop(&mut self) { - THE_TLS_FIELDS.with(|s| { - *s.borrow_mut() = None; - }) - } -} +//! Certain bits of environmental state are too annoying to thread +//! around everywhere, so pack them into TLS. + +use file_text::FileText; +use session::Session; +use std::cell::RefCell; +use std::rc::Rc; + +pub struct Tls { + _dummy: (), +} + +#[derive(Clone)] +struct TlsFields { + session: Rc, + file_text: Rc, +} + +thread_local! { + static THE_TLS_FIELDS: RefCell> = + RefCell::new(None) +} + +impl Tls { + #[cfg(test)] + pub fn test() -> Tls { + Self::install(Rc::new(Session::test()), Rc::new(FileText::test())) + } + + #[cfg(test)] + pub fn test_string(text: &str) -> Tls { + use std::path::PathBuf; + Self::install( + Rc::new(Session::test()), + Rc::new(FileText::new(PathBuf::from("tmp.txt"), String::from(text))), + ) + } + + /// Installs `Tls` and returns a placeholder value. When this + /// value is dropped, the `Tls` entries will be removed. To access + /// the values from `Tls`, call `Tls::session()` or + /// `Tls::file_text()`. + pub fn install(session: Rc, file_text: Rc) -> Tls { + let fields = TlsFields { + session: session, + file_text: file_text, + }; + + THE_TLS_FIELDS.with(|s| { + let mut s = s.borrow_mut(); + assert!(s.is_none()); + *s = Some(fields.clone()); + }); + + Tls { _dummy: () } + } + + fn fields() -> TlsFields { + THE_TLS_FIELDS.with(|s| s.borrow().clone().expect("TLS is not installed")) + } + + pub fn session() -> Rc { + Self::fields().session + } + + pub fn file_text() -> Rc { + Self::fields().file_text + } +} + +impl Drop for Tls { + fn drop(&mut self) { + THE_TLS_FIELDS.with(|s| { + *s.borrow_mut() = None; + }) + } +} diff --git a/third_party/rust/lalrpop/src/tok/mod.rs b/third_party/rust/lalrpop/src/tok/mod.rs index 9b75216833b0..8aa288558260 100644 --- a/third_party/rust/lalrpop/src/tok/mod.rs +++ b/third_party/rust/lalrpop/src/tok/mod.rs @@ -1,774 +1,738 @@ -//! A tokenizer for use in LALRPOP itself. - -use std::borrow::Cow; -use std::str::CharIndices; -use unicode_xid::UnicodeXID; - -use self::ErrorCode::*; -use self::Tok::*; - -#[cfg(test)] -mod test; - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct Error { - pub location: usize, - pub code: ErrorCode, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum ErrorCode { - UnrecognizedToken, - UnterminatedEscape, - UnrecognizedEscape, - UnterminatedStringLiteral, - UnterminatedCharacterLiteral, - UnterminatedAttribute, - UnterminatedCode, - ExpectedStringLiteral, -} - -fn error(c: ErrorCode, l: usize) -> Result { - Err(Error { - location: l, - code: c, - }) -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum Tok<'input> { - // Keywords; - Enum, - Extern, - Grammar, - Match, - Else, - If, - Mut, - Pub, - Type, - Where, - For, - - // Special keywords: these are accompanied by a series of - // uninterpreted strings representing imports and stuff. - Use(&'input str), - - // Identifiers of various kinds: - Escape(&'input str), - Id(&'input str), - MacroId(&'input str), // identifier followed immediately by `<` - Lifetime(&'input str), // includes the `'` - StringLiteral(&'input str), // excludes the `"` - CharLiteral(&'input str), // excludes the `'` - RegexLiteral(&'input str), // excludes the `r"` and `"` - - // Symbols: - Ampersand, - BangEquals, - BangTilde, - Colon, - ColonColon, - Comma, - DotDot, - Equals, - EqualsEquals, - EqualsGreaterThanCode(&'input str), - EqualsGreaterThanQuestionCode(&'input str), - EqualsGreaterThanLookahead, - EqualsGreaterThanLookbehind, - Hash, - GreaterThan, - LeftBrace, - LeftBracket, - LeftParen, - LessThan, - Lookahead, // @L - Lookbehind, // @R - MinusGreaterThan, - Plus, - Question, - RightBrace, - RightBracket, - RightParen, - Semi, - Star, - TildeTilde, - Underscore, - Bang, - ShebangAttribute(&'input str), // #![...] - - // Dummy tokens for parser sharing - StartGrammar, - StartPattern, - StartMatchMapping, - #[allow(dead_code)] - StartGrammarWhereClauses, - #[allow(dead_code)] - StartTypeRef, -} - -pub struct Tokenizer<'input> { - text: &'input str, - chars: CharIndices<'input>, - lookahead: Option<(usize, char)>, - shift: usize, -} - -pub type Spanned = (usize, T, usize); - -const KEYWORDS: &'static [(&'static str, Tok<'static>)] = &[ - ("enum", Enum), - ("extern", Extern), - ("grammar", Grammar), - ("match", Match), - ("else", Else), - ("if", If), - ("mut", Mut), - ("pub", Pub), - ("type", Type), - ("where", Where), - ("for", For), -]; - -/* - * Helper for backtracking. - */ -macro_rules! first { - ($this:expr, $action:expr, $fallback:expr) => {{ - let fallback_state = ($this.chars.clone(), $this.lookahead); - let result = $action; - match result { - Ok(_) => Some(result), - _ => { - $this.chars = fallback_state.0; - $this.lookahead = fallback_state.1; - Some($fallback) - } - } - }}; -} - -macro_rules! try_opt { - ($e:expr, $err:expr) => {{ - let r = $e; - match r { - Some(Ok(val)) => val, - Some(Err(err)) => return Err(err), - None => return $err, - } - }}; -} - -impl<'input> Tokenizer<'input> { - pub fn new(text: &'input str, shift: usize) -> Tokenizer<'input> { - let mut t = Tokenizer { - text: text, - chars: text.char_indices(), - lookahead: None, - shift: shift, - }; - t.bump(); - t - } - - fn shebang_attribute(&mut self, idx0: usize) -> Result>, Error> { - try_opt!( - self.expect_char('!'), - error(ErrorCode::UnrecognizedToken, idx0) - ); - try_opt!( - self.expect_char('['), - error(ErrorCode::UnterminatedAttribute, idx0) - ); - let mut sq_bracket_counter = 1; - while let Some((idx1, c)) = self.lookahead { - match c { - '[' => { - self.bump(); - sq_bracket_counter += 1 - } - ']' => { - self.bump(); - sq_bracket_counter -= 1; - match sq_bracket_counter { - 0 => { - let idx2 = idx1 + 1; - let data = &self.text[idx0..idx2]; - self.bump(); - return Ok((idx0, ShebangAttribute(data), idx2)); - } - n if n < 0 => return error(UnrecognizedToken, idx0), - _ => (), - } - } - '"' => { - self.bump(); - let _ = try!(self.string_literal(idx1)); - } - '\n' => return error(UnrecognizedToken, idx0), - _ => { - self.bump(); - } - } - } - error(UnrecognizedToken, idx0) - } - - fn next_unshifted(&mut self) -> Option>, Error>> { - loop { - return match self.lookahead { - Some((idx0, '&')) => { - self.bump(); - Some(Ok((idx0, Ampersand, idx0 + 1))) - } - Some((idx0, '!')) => match self.bump() { - Some((idx1, '=')) => { - self.bump(); - Some(Ok((idx0, BangEquals, idx1 + 1))) - } - Some((idx1, '~')) => { - self.bump(); - Some(Ok((idx0, BangTilde, idx1 + 1))) - } - _ => Some(Ok((idx0, Bang, idx0 + 1))), - }, - Some((idx0, ':')) => match self.bump() { - Some((idx1, ':')) => { - self.bump(); - Some(Ok((idx0, ColonColon, idx1 + 1))) - } - _ => Some(Ok((idx0, Colon, idx0 + 1))), - }, - Some((idx0, ',')) => { - self.bump(); - Some(Ok((idx0, Comma, idx0 + 1))) - } - Some((idx0, '.')) => match self.bump() { - Some((idx1, '.')) => { - self.bump(); - Some(Ok((idx0, DotDot, idx1 + 1))) - } - _ => Some(error(UnrecognizedToken, idx0)), - }, - Some((idx0, '=')) => match self.bump() { - Some((idx1, '=')) => { - self.bump(); - Some(Ok((idx0, EqualsEquals, idx1 + 1))) - } - Some((_, '>')) => { - self.bump(); - Some(self.right_arrow(idx0)) - } - _ => Some(Ok((idx0, Equals, idx0 + 1))), - }, - Some((idx0, '#')) => { - self.bump(); - first!(self, { self.shebang_attribute(idx0) }, { - Ok((idx0, Hash, idx0 + 1)) - }) - } - Some((idx0, '>')) => { - self.bump(); - Some(Ok((idx0, GreaterThan, idx0 + 1))) - } - Some((idx0, '{')) => { - self.bump(); - Some(Ok((idx0, LeftBrace, idx0 + 1))) - } - Some((idx0, '[')) => { - self.bump(); - Some(Ok((idx0, LeftBracket, idx0 + 1))) - } - Some((idx0, '(')) => { - self.bump(); - Some(Ok((idx0, LeftParen, idx0 + 1))) - } - Some((idx0, '<')) => { - self.bump(); - Some(Ok((idx0, LessThan, idx0 + 1))) - } - Some((idx0, '@')) => match self.bump() { - Some((idx1, 'L')) => { - self.bump(); - Some(Ok((idx0, Lookahead, idx1 + 1))) - } - Some((idx1, 'R')) => { - self.bump(); - Some(Ok((idx0, Lookbehind, idx1 + 1))) - } - _ => Some(error(UnrecognizedToken, idx0)), - }, - Some((idx0, '+')) => { - self.bump(); - Some(Ok((idx0, Plus, idx0 + 1))) - } - Some((idx0, '?')) => { - self.bump(); - Some(Ok((idx0, Question, idx0 + 1))) - } - Some((idx0, '}')) => { - self.bump(); - Some(Ok((idx0, RightBrace, idx0 + 1))) - } - Some((idx0, ']')) => { - self.bump(); - Some(Ok((idx0, RightBracket, idx0 + 1))) - } - Some((idx0, ')')) => { - self.bump(); - Some(Ok((idx0, RightParen, idx0 + 1))) - } - Some((idx0, ';')) => { - self.bump(); - Some(Ok((idx0, Semi, idx0 + 1))) - } - Some((idx0, '*')) => { - self.bump(); - Some(Ok((idx0, Star, idx0 + 1))) - } - Some((idx0, '~')) => match self.bump() { - Some((idx1, '~')) => { - self.bump(); - Some(Ok((idx0, TildeTilde, idx1 + 1))) - } - _ => Some(error(UnrecognizedToken, idx0)), - }, - Some((idx0, '`')) => { - self.bump(); - Some(self.escape(idx0)) - } - Some((idx0, '\'')) => { - self.bump(); - Some(self.lifetimeish(idx0)) - } - Some((idx0, '"')) => { - self.bump(); - Some(self.string_literal(idx0)) - } - Some((idx0, '/')) => match self.bump() { - Some((_, '/')) => { - self.take_until(|c| c == '\n'); - continue; - } - _ => Some(error(UnrecognizedToken, idx0)), - }, - Some((idx0, '-')) => match self.bump() { - Some((idx1, '>')) => { - self.bump(); - Some(Ok((idx0, MinusGreaterThan, idx1 + 1))) - } - _ => Some(error(UnrecognizedToken, idx0)), - }, - Some((idx0, c)) if is_identifier_start(c) => { - if c == 'r' { - // watch out for r"..." or r#"..."# strings - self.bump(); - match self.lookahead { - Some((_, '#')) | Some((_, '"')) => Some(self.regex_literal(idx0)), - _ => { - // due to the particulars of how identifierish works, - // it's ok that we already consumed the 'r', because the - // identifier will run from idx0 (the 'r') to the end - Some(self.identifierish(idx0)) - } - } - } else { - Some(self.identifierish(idx0)) - } - } - Some((_, c)) if c.is_whitespace() => { - self.bump(); - continue; - } - Some((idx, _)) => Some(error(UnrecognizedToken, idx)), - None => None, - }; - } - } - - fn bump(&mut self) -> Option<(usize, char)> { - self.lookahead = self.chars.next(); - self.lookahead - } - - fn right_arrow(&mut self, idx0: usize) -> Result>, Error> { - // we've seen =>, now we have to choose between: - // - // => code - // =>? code - // =>@L - // =>@R - - match self.lookahead { - Some((_, '@')) => match self.bump() { - Some((idx2, 'L')) => { - self.bump(); - Ok((idx0, EqualsGreaterThanLookahead, idx2 + 1)) - } - Some((idx2, 'R')) => { - self.bump(); - Ok((idx0, EqualsGreaterThanLookbehind, idx2 + 1)) - } - _ => error(UnrecognizedToken, idx0), - }, - - Some((idx1, '?')) => { - self.bump(); - let idx2 = try!(self.code(idx0, "([{", "}])")); - let code = &self.text[idx1 + 1..idx2]; - Ok((idx0, EqualsGreaterThanQuestionCode(code), idx2)) - } - - Some((idx1, _)) => { - let idx2 = try!(self.code(idx0, "([{", "}])")); - let code = &self.text[idx1..idx2]; - Ok((idx0, EqualsGreaterThanCode(code), idx2)) - } - - None => error(UnterminatedCode, idx0), - } - } - - fn code(&mut self, idx0: usize, open_delims: &str, close_delims: &str) -> Result { - // This is the interesting case. To find the end of the code, - // we have to scan ahead, matching (), [], and {}, and looking - // for a suitable terminator: `,`, `;`, `]`, `}`, or `)`. - // Additionaly we had to take into account that we can encounter an character literal - // equal to one of delimiters. - let mut balance = 0; // number of unclosed `(` etc - loop { - if let Some((idx, c)) = self.lookahead { - if c == '"' { - self.bump(); - try!(self.string_literal(idx)); // discard the produced token - continue; - } else if c == '\'' { - self.bump(); - if self.take_lifetime_or_character_literal().is_none() { - return error(UnterminatedCharacterLiteral, idx); - } - continue; - } else if c == 'r' { - self.bump(); - if let Some((idx, '#')) = self.lookahead { - try!(self.regex_literal(idx)); - } - continue; - } else if c == '/' { - self.bump(); - if let Some((_, '/')) = self.lookahead { - self.take_until(|c| c == '\n'); - } - continue; - } else if open_delims.find(c).is_some() { - balance += 1; - } else if balance > 0 { - if close_delims.find(c).is_some() { - balance -= 1; - } - } else { - debug_assert!(balance == 0); - - if c == ',' || c == ';' || close_delims.find(c).is_some() { - // Note: we do not consume the - // terminator. The code is everything *up - // to but not including* the terminating - // `,`, `;`, etc. - return Ok(idx); - } - } - } else if balance > 0 { - // the input should not end with an - // unbalanced number of `{` etc! - return error(UnterminatedCode, idx0); - } else { - debug_assert!(balance == 0); - return Ok(self.text.len()); - } - - self.bump(); - } - } - - fn escape(&mut self, idx0: usize) -> Result>, Error> { - match self.take_until(|c| c == '`') { - Some(idx1) => { - self.bump(); // consume the '`' - let text: &'input str = &self.text[idx0 + 1..idx1]; // do not include the `` in the str - Ok((idx0, Escape(text), idx1 + 1)) - } - None => error(UnterminatedEscape, idx0), - } - } - - fn take_lifetime_or_character_literal(&mut self) -> Option { - // Try to decide whether `'` is the start of a lifetime or a character literal. - - let forget_character = |p: (usize, char)| p.0; - - self.lookahead.and_then(|(_, c)| { - if c == '\\' { - // escape after `'` => it had to be character literal token, consume - // the backslash and escaped character, then consume until `'` - self.bump(); - self.bump(); - self.take_until_and_consume_terminating_character(|c: char| c == '\'') - } else { - // no escape, then we require to see next `'` or we assume it was lifetime - self.bump().and_then(|(idx, c)| { - if c == '\'' { - self.bump().map(forget_character) - } else { - Some(idx) - } - }) - } - }) - } - - fn string_or_char_literal( - &mut self, - idx0: usize, - quote: char, - variant: fn(&'input str) -> Tok<'input>, - ) -> Option>> { - let mut escape = false; - let terminate = |c: char| { - if escape { - escape = false; - false - } else if c == '\\' { - escape = true; - false - } else if c == quote { - true - } else { - false - } - }; - match self.take_until(terminate) { - Some(idx1) => { - self.bump(); // consume the closing quote - let text = &self.text[idx0 + 1..idx1]; // do not include quotes in the str - Some((idx0, variant(text), idx1 + 1)) - } - None => None, - } - } - - fn string_literal(&mut self, idx0: usize) -> Result>, Error> { - match self.string_or_char_literal(idx0, '"', StringLiteral) { - Some(x) => Ok(x), - None => error(UnterminatedStringLiteral, idx0), - } - } - - // parses `r#"..."#` (for some number of #), starts after the `r` - // has been consumed; idx0 points at the `r` - fn regex_literal(&mut self, idx0: usize) -> Result>, Error> { - match self.take_while(|c| c == '#') { - Some(idx1) if self.lookahead == Some((idx1, '"')) => { - self.bump(); - let hashes = idx1 - idx0 - 1; - let mut state = 0; - let end_of_regex = |c: char| { - if state > 0 { - // state N>0 means: observed n-1 hashes - if c == '#' { - state += 1; - } else { - state = 0; - } - } - - // state 0 means: not yet seen the `"` - if state == 0 && c == '"' { - state = 1; - } - - state == (hashes + 1) - }; - match self.take_until(end_of_regex) { - Some(idx1) => { - // idx1 is the closing quote - self.bump(); - let start = idx0 + 2 + hashes; // skip the `r###"` - let end = idx1 - hashes; // skip the `###`. - Ok((idx0, RegexLiteral(&self.text[start..end]), idx1 + 1)) - } - None => error(UnterminatedStringLiteral, idx0), - } - } - Some(idx1) => error(ExpectedStringLiteral, idx1), - None => error(UnterminatedStringLiteral, idx0), - } - } - - // Saw a `'`, could either be: `'a` or `'a'`. - fn lifetimeish(&mut self, idx0: usize) -> Result>, Error> { - match self.lookahead { - None => error(UnterminatedCharacterLiteral, idx0), - - Some((_, c)) => { - if is_identifier_start(c) { - let (start, word, end) = self.word(idx0); - match self.lookahead { - Some((idx2, '\'')) => { - self.bump(); - let text = &self.text[idx0 + 1..idx2]; - Ok((idx0, CharLiteral(text), idx2 + 1)) - } - _ => Ok((start, Lifetime(word), end)), - } - } else { - match self.string_or_char_literal(idx0, '\'', CharLiteral) { - Some(x) => Ok(x), - None => error(UnterminatedCharacterLiteral, idx0), - } - } - } - } - } - - fn identifierish(&mut self, idx0: usize) -> Result>, Error> { - let (start, word, end) = self.word(idx0); - - if word == "_" { - return Ok((idx0, Underscore, idx0 + 1)); - } - - if word == "use" { - let code_end = try!(self.code(idx0, "([{", "}])")); - let code = &self.text[end..code_end]; - return Ok((start, Tok::Use(code), code_end)); - } - - let tok = - // search for a keyword first; if none are found, this is - // either a MacroId or an Id, depending on whether there - // is a `<` immediately afterwards - KEYWORDS.iter() - .filter(|&&(w, _)| w == word) - .map(|&(_, ref t)| t.clone()) - .next() - .unwrap_or_else(|| { - match self.lookahead { - Some((_, '<')) => MacroId(word), - _ => Id(word), - } - }); - - Ok((start, tok, end)) - } - - fn word(&mut self, idx0: usize) -> Spanned<&'input str> { - match self.take_while(is_identifier_continue) { - Some(end) => (idx0, &self.text[idx0..end], end), - None => (idx0, &self.text[idx0..], self.text.len()), - } - } - - fn take_while(&mut self, mut keep_going: F) -> Option - where - F: FnMut(char) -> bool, - { - self.take_until(|c| !keep_going(c)) - } - - fn take_until(&mut self, mut terminate: F) -> Option - where - F: FnMut(char) -> bool, - { - loop { - match self.lookahead { - None => { - return None; - } - Some((idx1, c)) => { - if terminate(c) { - return Some(idx1); - } else { - self.bump(); - } - } - } - } - } - - fn take_until_and_consume_terminating_character(&mut self, terminate: F) -> Option - where - F: FnMut(char) -> bool, - { - self.take_until(terminate) - .and_then(|_| self.bump().map(|p| p.0)) - } - - fn expect_char(&mut self, c: char) -> Option> { - match self.lookahead { - Some((idx0, cc)) if c == cc => { - self.bump(); - Some(Ok((idx0))) - } - Some((idx0, _)) => { - self.bump(); - Some(error(UnrecognizedToken, idx0)) - } - None => None, - } - } -} - -impl<'input> Iterator for Tokenizer<'input> { - type Item = Result>, Error>; - - fn next(&mut self) -> Option>, Error>> { - match self.next_unshifted() { - None => None, - Some(Ok((l, t, r))) => Some(Ok((l + self.shift, t, r + self.shift))), - Some(Err(Error { location, code })) => Some(Err(Error { - location: location + self.shift, - code: code, - })), - } - } -} - -fn is_identifier_start(c: char) -> bool { - UnicodeXID::is_xid_start(c) || c == '_' -} - -fn is_identifier_continue(c: char) -> bool { - UnicodeXID::is_xid_continue(c) || c == '_' -} - -/// Expand escape characters in a string literal, converting the source code -/// representation to the text it represents. The `idx0` argument should be the -/// position in the input stream of the first character of `text`, the position -/// after the opening double-quote. -pub fn apply_string_escapes(code: &str, idx0: usize) -> Result, Error> { - if !code.contains('\\') { - Ok(code.into()) - } else { - let mut iter = code.char_indices(); - let mut text = String::new(); - while let Some((_, mut ch)) = iter.next() { - if ch == '\\' { - // The parser should never have accepted an ill-formed string - // literal, so we know it can't end in a backslash. - let (offset, next_ch) = iter.next().unwrap(); - ch = match next_ch { - '\\' | '\"' => next_ch, - 'n' => '\n', - 'r' => '\r', - 't' => '\t', - _ => { - return error(UnrecognizedEscape, idx0 + offset); - } - } - } - text.push(ch); - } - Ok(text.into()) - } -} +//! A tokenizer for use in LALRPOP itself. + +use std::str::CharIndices; +use unicode_xid::UnicodeXID; + +use self::ErrorCode::*; +use self::Tok::*; + +#[cfg(test)] +mod test; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Error { + pub location: usize, + pub code: ErrorCode, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ErrorCode { + UnrecognizedToken, + UnterminatedEscape, + UnterminatedStringLiteral, + UnterminatedCharacterLiteral, + UnterminatedAttribute, + UnterminatedCode, + ExpectedStringLiteral, +} + +fn error(c: ErrorCode, l: usize) -> Result { + Err(Error { + location: l, + code: c, + }) +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Tok<'input> { + // Keywords; + Enum, + Extern, + Grammar, + Match, + Else, + If, + Mut, + Pub, + Type, + Where, + For, + + // Special keywords: these are accompanied by a series of + // uninterpreted strings representing imports and stuff. + Use(&'input str), + + // Identifiers of various kinds: + Escape(&'input str), + Id(&'input str), + MacroId(&'input str), // identifier followed immediately by `<` + Lifetime(&'input str), // includes the `'` + StringLiteral(&'input str), // excludes the `"` + CharLiteral(&'input str), // excludes the `'` + RegexLiteral(&'input str), // excludes the `r"` and `"` + + // Symbols: + Ampersand, + BangEquals, + BangTilde, + Colon, + ColonColon, + Comma, + DotDot, + Equals, + EqualsEquals, + EqualsGreaterThanCode(&'input str), + EqualsGreaterThanQuestionCode(&'input str), + EqualsGreaterThanLookahead, + EqualsGreaterThanLookbehind, + Hash, + GreaterThan, + LeftBrace, + LeftBracket, + LeftParen, + LessThan, + Lookahead, // @L + Lookbehind, // @R + MinusGreaterThan, + Plus, + Question, + RightBrace, + RightBracket, + RightParen, + Semi, + Star, + TildeTilde, + Underscore, + Bang, + ShebangAttribute(&'input str), // #![...] +} + +pub struct Tokenizer<'input> { + text: &'input str, + chars: CharIndices<'input>, + lookahead: Option<(usize, char)>, + shift: usize, +} + +pub type Spanned = (usize, T, usize); + +const KEYWORDS: &'static [(&'static str, Tok<'static>)] = &[ + ("enum", Enum), + ("extern", Extern), + ("grammar", Grammar), + ("match", Match), + ("else", Else), + ("if", If), + ("mut", Mut), + ("pub", Pub), + ("type", Type), + ("where", Where), + ("for", For), +]; + +/* + * Helper for backtracking. + */ +macro_rules! first { + ($this:expr, $action:expr, $fallback:expr) => { + { + let fallback_state = ($this.chars.clone(), $this.lookahead); + let result = $action; + match result { + Ok(_) => { + Some(result) + } + _ => { + $this.chars = fallback_state.0; + $this.lookahead = fallback_state.1; + Some($fallback) + } + } + } + } +} + +macro_rules! try_opt { + ($e:expr, $err:expr) => { + { + let r = $e; + match r { + Some(Ok(val)) => val, + Some(Err(err)) => return Err(err), + None => return $err, + } + } + } +} + +impl<'input> Tokenizer<'input> { + pub fn new(text: &'input str, shift: usize) -> Tokenizer<'input> { + let mut t = Tokenizer { + text: text, + chars: text.char_indices(), + lookahead: None, + shift: shift, + }; + t.bump(); + t + } + + fn shebang_attribute(&mut self, idx0: usize) -> Result>, Error> { + try_opt!( + self.expect_char('!'), + error(ErrorCode::UnrecognizedToken, idx0) + ); + try_opt!( + self.expect_char('['), + error(ErrorCode::UnterminatedAttribute, idx0) + ); + let mut sq_bracket_counter = 1; + while let Some((idx1, c)) = self.lookahead { + match c { + '[' => { + self.bump(); + sq_bracket_counter += 1 + }, + ']' => { + self.bump(); + sq_bracket_counter -= 1; + match sq_bracket_counter { + 0 => { + let idx2 = idx1 + 1; + let data = &self.text[idx0..idx2]; + self.bump(); + return Ok((idx0, ShebangAttribute(data), idx2)); + }, + n if n < 0 => return error(UnrecognizedToken, idx0), + _ => (), + } + }, + '"' => { + self.bump(); + let _ = try!(self.string_literal(idx1)); + }, + '\n' => return error(UnrecognizedToken, idx0), + _ => { + self.bump(); + }, + } + } + error(UnrecognizedToken, idx0) + } + + fn next_unshifted(&mut self) -> Option>, Error>> { + loop { + return match self.lookahead { + Some((idx0, '&')) => { + self.bump(); + Some(Ok((idx0, Ampersand, idx0 + 1))) + }, + Some((idx0, '!')) => match self.bump() { + Some((idx1, '=')) => { + self.bump(); + Some(Ok((idx0, BangEquals, idx1 + 1))) + }, + Some((idx1, '~')) => { + self.bump(); + Some(Ok((idx0, BangTilde, idx1 + 1))) + }, + _ => Some(Ok((idx0, Bang, idx0 + 1))), + }, + Some((idx0, ':')) => match self.bump() { + Some((idx1, ':')) => { + self.bump(); + Some(Ok((idx0, ColonColon, idx1 + 1))) + }, + _ => Some(Ok((idx0, Colon, idx0 + 1))), + }, + Some((idx0, ',')) => { + self.bump(); + Some(Ok((idx0, Comma, idx0 + 1))) + }, + Some((idx0, '.')) => match self.bump() { + Some((idx1, '.')) => { + self.bump(); + Some(Ok((idx0, DotDot, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '=')) => match self.bump() { + Some((idx1, '=')) => { + self.bump(); + Some(Ok((idx0, EqualsEquals, idx1 + 1))) + }, + Some((_, '>')) => { + self.bump(); + Some(self.right_arrow(idx0)) + }, + _ => Some(Ok((idx0, Equals, idx0 + 1))), + }, + Some((idx0, '#')) => { + self.bump(); + first!(self, { self.shebang_attribute(idx0) }, { + Ok((idx0, Hash, idx0 + 1)) + }) + }, + Some((idx0, '>')) => { + self.bump(); + Some(Ok((idx0, GreaterThan, idx0 + 1))) + }, + Some((idx0, '{')) => { + self.bump(); + Some(Ok((idx0, LeftBrace, idx0 + 1))) + }, + Some((idx0, '[')) => { + self.bump(); + Some(Ok((idx0, LeftBracket, idx0 + 1))) + }, + Some((idx0, '(')) => { + self.bump(); + Some(Ok((idx0, LeftParen, idx0 + 1))) + }, + Some((idx0, '<')) => { + self.bump(); + Some(Ok((idx0, LessThan, idx0 + 1))) + }, + Some((idx0, '@')) => match self.bump() { + Some((idx1, 'L')) => { + self.bump(); + Some(Ok((idx0, Lookahead, idx1 + 1))) + }, + Some((idx1, 'R')) => { + self.bump(); + Some(Ok((idx0, Lookbehind, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '+')) => { + self.bump(); + Some(Ok((idx0, Plus, idx0 + 1))) + }, + Some((idx0, '?')) => { + self.bump(); + Some(Ok((idx0, Question, idx0 + 1))) + }, + Some((idx0, '}')) => { + self.bump(); + Some(Ok((idx0, RightBrace, idx0 + 1))) + }, + Some((idx0, ']')) => { + self.bump(); + Some(Ok((idx0, RightBracket, idx0 + 1))) + }, + Some((idx0, ')')) => { + self.bump(); + Some(Ok((idx0, RightParen, idx0 + 1))) + }, + Some((idx0, ';')) => { + self.bump(); + Some(Ok((idx0, Semi, idx0 + 1))) + }, + Some((idx0, '*')) => { + self.bump(); + Some(Ok((idx0, Star, idx0 + 1))) + }, + Some((idx0, '~')) => match self.bump() { + Some((idx1, '~')) => { + self.bump(); + Some(Ok((idx0, TildeTilde, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '`')) => { + self.bump(); + Some(self.escape(idx0)) + }, + Some((idx0, '\'')) => { + self.bump(); + Some(self.lifetimeish(idx0)) + }, + Some((idx0, '"')) => { + self.bump(); + Some(self.string_literal(idx0)) + }, + Some((idx0, '/')) => match self.bump() { + Some((_, '/')) => { + self.take_until(|c| c == '\n'); + continue; + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '-')) => match self.bump() { + Some((idx1, '>')) => { + self.bump(); + Some(Ok((idx0, MinusGreaterThan, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, c)) if is_identifier_start(c) => { + if c == 'r' { + // watch out for r"..." or r#"..."# strings + self.bump(); + match self.lookahead { + Some((_, '#')) | Some((_, '"')) => Some(self.regex_literal(idx0)), + _ => { + // due to the particulars of how identifierish works, + // it's ok that we already consumed the 'r', because the + // identifier will run from idx0 (the 'r') to the end + Some(self.identifierish(idx0)) + }, + } + } else { + Some(self.identifierish(idx0)) + } + }, + Some((_, c)) if c.is_whitespace() => { + self.bump(); + continue; + }, + Some((idx, _)) => Some(error(UnrecognizedToken, idx)), + None => None, + }; + } + } + + fn bump(&mut self) -> Option<(usize, char)> { + self.lookahead = self.chars.next(); + self.lookahead + } + + fn right_arrow(&mut self, idx0: usize) -> Result>, Error> { + // we've seen =>, now we have to choose between: + // + // => code + // =>? code + // =>@L + // =>@R + + match self.lookahead { + Some((_, '@')) => match self.bump() { + Some((idx2, 'L')) => { + self.bump(); + Ok((idx0, EqualsGreaterThanLookahead, idx2 + 1)) + }, + Some((idx2, 'R')) => { + self.bump(); + Ok((idx0, EqualsGreaterThanLookbehind, idx2 + 1)) + }, + _ => error(UnrecognizedToken, idx0), + }, + + Some((idx1, '?')) => { + self.bump(); + let idx2 = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[idx1 + 1..idx2]; + Ok((idx0, EqualsGreaterThanQuestionCode(code), idx2)) + }, + + Some((idx1, _)) => { + let idx2 = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[idx1..idx2]; + Ok((idx0, EqualsGreaterThanCode(code), idx2)) + }, + + None => error(UnterminatedCode, idx0), + } + } + + fn code(&mut self, idx0: usize, open_delims: &str, close_delims: &str) -> Result { + // This is the interesting case. To find the end of the code, + // we have to scan ahead, matching (), [], and {}, and looking + // for a suitable terminator: `,`, `;`, `]`, `}`, or `)`. + // Additionaly we had to take into account that we can encounter an character literal + // equal to one of delimeters. + let mut balance = 0; // number of unclosed `(` etc + loop { + if let Some((idx, c)) = self.lookahead { + if c == '"' { + self.bump(); + try!(self.string_literal(idx)); // discard the produced token + continue; + } else if c == '\'' { + self.bump(); + if self.take_lifetime_or_character_literal().is_none() { + return error(UnterminatedCharacterLiteral, idx); + } + continue; + } else if c == 'r' { + self.bump(); + if let Some((idx, '#')) = self.lookahead { + try!(self.regex_literal(idx)); + } + continue; + } else if c == '/' { + self.bump(); + if let Some((_, '/')) = self.lookahead { + self.take_until(|c| c == '\n'); + } + continue; + } else if open_delims.find(c).is_some() { + balance += 1; + } else if balance > 0 { + if close_delims.find(c).is_some() { + balance -= 1; + } + } else { + debug_assert!(balance == 0); + + if c == ',' || c == ';' || close_delims.find(c).is_some() { + // Note: we do not consume the + // terminator. The code is everything *up + // to but not including* the terminating + // `,`, `;`, etc. + return Ok(idx); + } + } + } else if balance > 0 { + // the input should not end with an + // unbalanced number of `{` etc! + return error(UnterminatedCode, idx0); + } else { + debug_assert!(balance == 0); + return Ok(self.text.len()); + } + + self.bump(); + } + } + + fn escape(&mut self, idx0: usize) -> Result>, Error> { + match self.take_until(|c| c == '`') { + Some(idx1) => { + self.bump(); // consume the '`' + let text: &'input str = &self.text[idx0 + 1..idx1]; // do not include the `` in the str + Ok((idx0, Escape(text), idx1 + 1)) + }, + None => error(UnterminatedEscape, idx0), + } + } + + fn take_lifetime_or_character_literal(&mut self) -> Option { + // try to decide if `'` is for lifetime or it oppens a character literal + + let forget_character = |p: (usize, char)| p.0; + + self.lookahead.and_then(|(_, c)| { + if c == '\\' { + // escape after `'` => it had to be character literal token, consume + // the backslash and escaped character, then consume until `'` + self.bump(); + self.bump(); + self.take_until_and_consume_terminating_character(|c: char| c == '\'') + } else { + // no escape, then we require to see next `'` or we assume it was lifetime + self.bump().and_then(|(idx, c)| { + if c == '\'' { + self.bump().map(forget_character) + } else { + Some(idx) + } + }) + } + }) + } + + fn string_or_char_literal( + &mut self, + idx0: usize, + quote: char, + variant: fn(&'input str) -> Tok<'input>, + ) -> Option>> { + let mut escape = false; + let terminate = |c: char| { + if escape { + escape = false; + false + } else if c == '\\' { + escape = true; + false + } else if c == quote { + true + } else { + false + } + }; + match self.take_until(terminate) { + Some(idx1) => { + self.bump(); // consume the closing quote + let text = &self.text[idx0 + 1..idx1]; // do not include quotes in the str + Some((idx0, variant(text), idx1 + 1)) + }, + None => None, + } + } + + fn string_literal(&mut self, idx0: usize) -> Result>, Error> { + match self.string_or_char_literal(idx0, '"', StringLiteral) { + Some(x) => Ok(x), + None => error(UnterminatedStringLiteral, idx0), + } + } + + // parses `r#"..."#` (for some number of #), starts after the `r` + // has been consumed; idx0 points at the `r` + fn regex_literal(&mut self, idx0: usize) -> Result>, Error> { + match self.take_while(|c| c == '#') { + Some(idx1) if self.lookahead == Some((idx1, '"')) => { + self.bump(); + let hashes = idx1 - idx0 - 1; + let mut state = 0; + let end_of_regex = |c: char| { + if state > 0 { + // state N>0 means: observed n-1 hashes + if c == '#' { + state += 1; + } else { + state = 0; + } + } + + // state 0 means: not yet seen the `"` + if state == 0 && c == '"' { + state = 1; + } + + state == (hashes + 1) + }; + match self.take_until(end_of_regex) { + Some(idx1) => { + // idx1 is the closing quote + self.bump(); + let start = idx0 + 2 + hashes; // skip the `r###"` + let end = idx1 - hashes; // skip the `###`. + Ok((idx0, RegexLiteral(&self.text[start..end]), idx1 + 1)) + }, + None => error(UnterminatedStringLiteral, idx0), + } + }, + Some(idx1) => error(ExpectedStringLiteral, idx1), + None => error(UnterminatedStringLiteral, idx0), + } + } + + // Saw a `'`, could either be: `'a` or `'a'`. + fn lifetimeish(&mut self, idx0: usize) -> Result>, Error> { + match self.lookahead { + None => error(UnterminatedCharacterLiteral, idx0), + + Some((_, c)) => { + if is_identifier_start(c) { + let (start, word, end) = self.word(idx0); + match self.lookahead { + Some((idx2, '\'')) => { + self.bump(); + let text = &self.text[idx0 + 1..idx2]; + Ok((idx0, CharLiteral(text), idx2 + 1)) + }, + _ => Ok((start, Lifetime(word), end)), + } + } else { + match self.string_or_char_literal(idx0, '\'', CharLiteral) { + Some(x) => Ok(x), + None => error(UnterminatedCharacterLiteral, idx0), + } + } + }, + } + } + + fn identifierish(&mut self, idx0: usize) -> Result>, Error> { + let (start, word, end) = self.word(idx0); + + if word == "_" { + return Ok((idx0, Underscore, idx0 + 1)); + } + + if word == "use" { + let code_end = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[end..code_end]; + return Ok((start, Tok::Use(code), code_end)); + } + + let tok = + // search for a keyword first; if none are found, this is + // either a MacroId or an Id, depending on whether there + // is a `<` immediately afterwards + KEYWORDS.iter() + .filter(|&&(w, _)| w == word) + .map(|&(_, ref t)| t.clone()) + .next() + .unwrap_or_else(|| { + match self.lookahead { + Some((_, '<')) => MacroId(word), + _ => Id(word), + } + }); + + Ok((start, tok, end)) + } + + fn word(&mut self, idx0: usize) -> Spanned<&'input str> { + match self.take_while(is_identifier_continue) { + Some(end) => (idx0, &self.text[idx0..end], end), + None => (idx0, &self.text[idx0..], self.text.len()), + } + } + + fn take_while(&mut self, mut keep_going: F) -> Option + where + F: FnMut(char) -> bool, + { + self.take_until(|c| !keep_going(c)) + } + + fn take_until(&mut self, mut terminate: F) -> Option + where + F: FnMut(char) -> bool, + { + loop { + match self.lookahead { + None => { + return None; + }, + Some((idx1, c)) => { + if terminate(c) { + return Some(idx1); + } else { + self.bump(); + } + }, + } + } + } + + fn take_until_and_consume_terminating_character(&mut self, terminate: F) -> Option + where + F: FnMut(char) -> bool, + { + self.take_until(terminate) + .and_then(|_| self.bump().map(|p| p.0)) + } + + fn expect_char(&mut self, c: char) -> Option> { + match self.lookahead { + Some((idx0, cc)) if c == cc => { + self.bump(); + Some(Ok((idx0))) + }, + Some((idx0, _)) => { + self.bump(); + Some(error(UnrecognizedToken, idx0)) + }, + None => None, + } + } +} + +impl<'input> Iterator for Tokenizer<'input> { + type Item = Result>, Error>; + + fn next(&mut self) -> Option>, Error>> { + match self.next_unshifted() { + None => None, + Some(Ok((l, t, r))) => Some(Ok((l + self.shift, t, r + self.shift))), + Some(Err(Error { location, code })) => Some(Err(Error { + location: location + self.shift, + code: code, + })), + } + } +} + +fn is_identifier_start(c: char) -> bool { + UnicodeXID::is_xid_start(c) || c == '_' +} + +fn is_identifier_continue(c: char) -> bool { + UnicodeXID::is_xid_continue(c) || c == '_' +} diff --git a/third_party/rust/lalrpop/src/tok/test.rs b/third_party/rust/lalrpop/src/tok/test.rs index 3206fee01ada..d09c3d674a4c 100644 --- a/third_party/rust/lalrpop/src/tok/test.rs +++ b/third_party/rust/lalrpop/src/tok/test.rs @@ -1,5 +1,5 @@ -use super::Tok::*; use super::{Error, ErrorCode, Tok, Tokenizer}; +use super::Tok::*; enum Expectation<'a> { ExpectTok(Tok<'a>), @@ -22,7 +22,7 @@ fn gen_test(input: &str, expected: Vec<(&str, Expectation)>) { match expectation { ExpectTok(expected_tok) => { assert_eq!(Ok((expected_start, expected_tok, expected_end)), token); - } + }, ExpectErr(expected_ec) => assert_eq!( Err(Error { location: expected_start, @@ -624,10 +624,12 @@ fn shebang_attribute_normal_text() { fn shebang_attribute_special_characters_without_quotes() { test( r#" #![set width = 80] "#, - vec![( - r#" ~~~~~~~~~~~~~~~~~~ "#, - ShebangAttribute("#![set width = 80]"), - )], + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute("#![set width = 80]"), + ), + ], ); } @@ -635,10 +637,12 @@ fn shebang_attribute_special_characters_without_quotes() { fn shebang_attribute_special_characters_with_quotes() { test( r#" #![set width = "80"] "#, - vec![( - r#" ~~~~~~~~~~~~~~~~~~~~ "#, - ShebangAttribute(r#"#![set width = "80"]"#), - )], + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "80"]"#), + ), + ], ); } @@ -646,10 +650,12 @@ fn shebang_attribute_special_characters_with_quotes() { fn shebang_attribute_special_characters_closing_sqbracket_in_string_literal() { test( r#" #![set width = "80]"] "#, - vec![( - r#" ~~~~~~~~~~~~~~~~~~~~~ "#, - ShebangAttribute(r#"#![set width = "80]"]"#), - )], + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "80]"]"#), + ), + ], ); } @@ -657,10 +663,12 @@ fn shebang_attribute_special_characters_closing_sqbracket_in_string_literal() { fn shebang_attribute_special_characters_opening_sqbracket_in_string_literal() { test( r#" #![set width = "[80"] "#, - vec![( - r#" ~~~~~~~~~~~~~~~~~~~~~ "#, - ShebangAttribute(r#"#![set width = "[80"]"#), - )], + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "[80"]"#), + ), + ], ); } @@ -668,10 +676,12 @@ fn shebang_attribute_special_characters_opening_sqbracket_in_string_literal() { fn shebang_attribute_special_characters_nested_sqbrackets() { test( r#" #![set width = [80]] "#, - vec![( - r#" ~~~~~~~~~~~~~~~~~~~~ "#, - ShebangAttribute(r#"#![set width = [80]]"#), - )], + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = [80]]"#), + ), + ], ); } @@ -695,48 +705,3 @@ fn char_literals() { ], ); } - -#[test] -fn string_escapes() { - use super::apply_string_escapes; - use std::borrow::Cow; - - assert_eq!(apply_string_escapes(r#"foo"#, 5), Ok(Cow::Borrowed("foo"))); - assert_eq!( - apply_string_escapes(r#"\\"#, 10), - Ok(Cow::Owned::(r#"\"#.into())) - ); - assert_eq!( - apply_string_escapes(r#"\""#, 15), - Ok(Cow::Owned::(r#"""#.into())) - ); - assert_eq!( - apply_string_escapes(r#"up\ndown"#, 25), - Ok(Cow::Owned::("up\ndown".into())) - ); - assert_eq!( - apply_string_escapes(r#"forth\rback"#, 25), - Ok(Cow::Owned::("forth\rback".into())) - ); - assert_eq!( - apply_string_escapes(r#"left\tright"#, 40), - Ok(Cow::Owned::("left\tright".into())) - ); - - // Errors. - assert_eq!( - apply_string_escapes("\u{192}\\oo", 65), // "ƒ\oo" - Err(Error { - location: 68, - code: ErrorCode::UnrecognizedEscape - }) - ); - // LALRPOP doesn't support the other Rust escape sequences. - assert_eq!( - apply_string_escapes(r#"star: \u{2a}"#, 105), - Err(Error { - location: 112, - code: ErrorCode::UnrecognizedEscape - }) - ); -} diff --git a/third_party/rust/lalrpop/src/util.rs b/third_party/rust/lalrpop/src/util.rs index dbbc998da2de..f400dd37cd2c 100644 --- a/third_party/rust/lalrpop/src/util.rs +++ b/third_party/rust/lalrpop/src/util.rs @@ -1,52 +1,52 @@ -use std::fmt::{Display, Error, Formatter}; - -pub use std::collections::btree_map as map; -pub struct Sep(pub &'static str, pub S); - -impl<'a, S: Display> Display for Sep<&'a Vec> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let &Sep(sep, vec) = self; - let mut elems = vec.iter(); - if let Some(elem) = elems.next() { - try!(write!(fmt, "{}", elem)); - while let Some(elem) = elems.next() { - try!(write!(fmt, "{}{}", sep, elem)); - } - } - Ok(()) - } -} - -pub struct Escape(pub S); - -impl Display for Escape { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let tmp = format!("{}", self.0); - for c in tmp.chars() { - match c { - 'a'...'z' | '0'...'9' | 'A'...'Z' => try!(write!(fmt, "{}", c)), - '_' => try!(write!(fmt, "__")), - _ => try!(write!(fmt, "_{:x}", c as usize)), - } - } - Ok(()) - } -} - -pub struct Prefix(pub &'static str, pub S); - -impl<'a, S: Display> Display for Prefix<&'a [S]> { - fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { - let &Prefix(prefix, vec) = self; - let mut elems = vec.iter(); - while let Some(elem) = elems.next() { - try!(write!(fmt, "{}{}", prefix, elem)); - } - Ok(()) - } -} - -/// Strip leading and trailing whitespace. -pub fn strip(s: &str) -> &str { - s.trim_matches(char::is_whitespace) -} +use std::fmt::{Display, Error, Formatter}; + +pub use std::collections::btree_map as map; +pub struct Sep(pub &'static str, pub S); + +impl<'a, S: Display> Display for Sep<&'a Vec> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let &Sep(sep, vec) = self; + let mut elems = vec.iter(); + if let Some(elem) = elems.next() { + try!(write!(fmt, "{}", elem)); + while let Some(elem) = elems.next() { + try!(write!(fmt, "{}{}", sep, elem)); + } + } + Ok(()) + } +} + +pub struct Escape(pub S); + +impl Display for Escape { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let tmp = format!("{}", self.0); + for c in tmp.chars() { + match c { + 'a'...'z' | '0'...'9' | 'A'...'Z' => try!(write!(fmt, "{}", c)), + '_' => try!(write!(fmt, "__")), + _ => try!(write!(fmt, "_{:x}", c as usize)), + } + } + Ok(()) + } +} + +pub struct Prefix(pub &'static str, pub S); + +impl<'a, S: Display> Display for Prefix<&'a [S]> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let &Prefix(prefix, vec) = self; + let mut elems = vec.iter(); + while let Some(elem) = elems.next() { + try!(write!(fmt, "{}{}", prefix, elem)); + } + Ok(()) + } +} + +/// Strip leading and trailing whitespace. +pub fn strip(s: &str) -> &str { + s.trim_matches(char::is_whitespace) +} diff --git a/third_party/rust/regex/.cargo-checksum.json b/third_party/rust/regex/.cargo-checksum.json index 37f322c28a1f..85a81b8feada 100644 --- a/third_party/rust/regex/.cargo-checksum.json +++ b/third_party/rust/regex/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"CHANGELOG.md":"42fc0cade5e708e2d9d8f24d622f460a984608e0f67db09aacaaf141ec6a80a3","Cargo.toml":"38edd348a69c491b2f35c93b18498cb38284c59cb4afcff754ae733793375826","HACKING.md":"33e3e555fbcf70d7c235068a10c0d9c3d53c02d71712eda52d252d0b20f70eb3","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","PERFORMANCE.md":"c776b18758b6dc8f2f9d37e9a95261f75c5f744925e8ddf216b83953bf7467b7","README.md":"35e3481785806be3422bf52369249146c80d6a8922bb166650561d9e8bf5d4c7","UNICODE.md":"d7992c142299cb79f524c964ca8d4cf247b5db99fcf4103e4eebaf6c54cf06f6","appveyor.yml":"3cc9496bd76b8ce1cd4be1c369974fd43798352aad595a36d6f4229bdeeb13d7","build.rs":"cebf7813476c332764ab9f26f8e0e7d9b5460ff1468e7ab2703eec812f82bdee","ci/after_success.sh":"9a6089e0a64057e97b11158219921c664a6ac956c0fad20f007da29ef11c19af","ci/run-kcov":"a81cad2c3de4c6d704502cdc4227d7432b7765613c7b8c426db66ab03fe23bfb","ci/run-shootout-test":"be7edb66a4a65eaef6a2b7e6036b4b732effa8dcd931bf4cbd591d0ca32b8264","ci/script.sh":"c7171c4e0f678aef40824c9f1c71f51cd4c73c9ebbfcfc4650c4172da9bee8fd","ci/test-regex-capi":"a46d41fd47b817611f8a442971671c999b3be4d3d37fe0fd71c530ae0d633e93","examples/regexdna-input.txt":"156a49710bb3e1ed4bc2bbb0af0f383b747b3d0281453cfff39c296124c598f8","examples/regexdna-output.txt":"35e85b19b70a893d752fd43e54e1e9da08bac43559191cea85b33387c24c4cc1","examples/shootout-regex-dna-bytes.rs":"f097a923fef2e9bd9a9abd3686eea84830e8050bb750bcab840b6575873227ff","examples/shootout-regex-dna-cheat.rs":"4b5a590ec88a9ba67cc4a34621cb038a400d45e64a15a354f3e07fdaf41a935b","examples/shootout-regex-dna-replace.rs":"15677e7de356427fe2b983e918de073a7a730337b090d4ab0e815e1e66f74f73","examples/shootout-regex-dna-single-cheat.rs":"5e743b3a6ec968713ce064a289b1fbd11c302add824d1c749a2ffb546c73128e","examples/shootout-regex-dna-single.rs":"c86969adb0fb08c5e23f749ec6922a58404da7d0e1925c848957a5144ddc8815","examples/shootout-regex-dna.rs":"e627f1e5e24c1cf4e9c9d52b844b6d971c59b7169b0e8762d8d9d1cb7debc6e6","scripts/frequencies.py":"df2cac150bc4ed42d2d97762535a5f260f3fe06d9d516721f68a52671a3b7a3b","scripts/generate.py":"35e83c13fdf7bc3b068601feb9b1eb2f9cb291944a95e05fe350dea502d7ce51","scripts/regex-match-tests.py":"f1b3ad870c893510172bd84f8328b66ee99cd7aee7715a95a858468ff3e33635","scripts/scrape_crates_io.py":"ba4bcd130708358144a821d577451a72489526a191bf7cc60f8a055010db9b1e","src/backtrack.rs":"0372ada608dca9c8d3e1fabf56e33498f8ff4fbdfd445873c4a4be6657465c68","src/compile.rs":"32667252ac4b687d9ef1c9dd0f055f0616ab49050870daca338809d32616409b","src/dfa.rs":"163aa4ec0dcdb1ffc7dd687debc1d64acffeeca7861cb4bb303d2da0ad33b3a6","src/error.rs":"d26673a95e372665863c7e01558836ef6e957aadf421d5056525720e16a9683d","src/exec.rs":"08c9a2dceb42f88bf8bfabd2628ad98661f9541505d895de027676f1a423ea3c","src/expand.rs":"4333da32d6fbb05ec05bead810eb659c5b012e2d361a9bb9e24bb30e8939fb88","src/freqs.rs":"e25871eec51d1c02c15abbc04d61dbea71fb2dbc15f370c98279687416c969de","src/input.rs":"9b092fe88a66b46dee0dfe0a2e67e4b78b01a32f53b28443b5f382b8514d0cfb","src/lib.rs":"66ab592814fd3349c8e927d4a4377bb8c0e64c9648f98acbc11b32a68d9d1441","src/literal/mod.rs":"c395221efe19f36edd9d92c8f8283e5b30553e0e9b408ccb1430d11f038730f8","src/literal/teddy_avx2/fallback.rs":"f24b70f9dd028eefe2802b7bbc6b2dca97663b03a931058e3a59750f0693a15c","src/literal/teddy_avx2/imp.rs":"b0e4634bc9fbc793e3b0938b97a236df4b8fb17a0ac08040a6394bc73042aa8b","src/literal/teddy_avx2/mod.rs":"b7373cb7bc823e60be4e585b93fe15e7a477c2cb16a45563f66c2e5c0d7e660d","src/literal/teddy_ssse3/fallback.rs":"f24b70f9dd028eefe2802b7bbc6b2dca97663b03a931058e3a59750f0693a15c","src/literal/teddy_ssse3/imp.rs":"be4565c47a3807ab09343f2da4ef0e3297d4776719472efb60dee8e55380c2ec","src/literal/teddy_ssse3/mod.rs":"34dba2fde2ec15c1b37faae164a1475b92227ad5c1010bc619d0c318bc30e332","src/pattern.rs":"4e820c17a2b983050f47d3fd13282094ce9f27b75fd852fcec438d61f07f0b0b","src/pikevm.rs":"9600a8b135075f8cf62683e6b08c73834873a203347d275f1e9ca3a97221dbeb","src/prog.rs":"7fdfa764562867c3b051554921fbf6452d08e6f860ade6657cf021b6a734b899","src/re_builder.rs":"94b348b7b6aa9f8502b01240cebc50434d9f460f4f63bd0aec013cc9f9b3eec1","src/re_bytes.rs":"2ec070c29827cf8c390a619ffd0e0fb3b514f5eea76433bdc812239ad2249715","src/re_set.rs":"0b8df90c7a9ce94c4af5962fcdc647958a8e42f50a86c22fcf043292f1d2fe72","src/re_trait.rs":"45b2e81076cce0b87bace2c05e125d44b8e3b71ff8d5c94130a7ae2c915f237d","src/re_unicode.rs":"11db29c508e5e2768b699a1bad56fba85c222e6034b5e9d26abe83d06aa1ab1c","src/sparse.rs":"04e70bb0bd006f806e8c9cf19825625e907036304823bc03b6c8f2e5046a38ef","src/testdata/LICENSE":"58cf078acc03da3e280a938c2bd9943f554fc9b6ced89ad93ba35ca436872899","src/testdata/README":"45f869e37f798905c773bfbe0ef19a5fb7e585cbf0b7c21b5b5a784e8cec3c14","src/testdata/basic.dat":"3756a5bdd6f387ed34731197fbdaab8521b0ae1726250100ba235756cb42b4b1","src/testdata/nullsubexpr.dat":"496ac0278eec3b6d9170faace14554569032dd3d909618364d9326156de39ecf","src/testdata/repetition.dat":"1f7959063015b284b18a4a2c1c8b416d438a2d6c4b1a362da43406b865f50e69","src/utf8.rs":"1a2d7bc43ab139bfc2b2610627efd59a7ead2a959492ba73eebb743d482c7957","src/vector/avx2.rs":"1ef39371a9215144b69bf72df9aa3533ea6be44d7425cdc5c8192de79dfc5e96","src/vector/mod.rs":"fc238d33117c500381f57d2d1fbaba14bd6ab855ba3fe55304c37256b1c0e965","src/vector/ssse3.rs":"f8549244fddfcb73f538761c0ae5a81c535e5ae5e129cebf8e3e6f9db4fa79f4","tests/api.rs":"803faacd9ac5efc149959ff63a2132f5ca155f75a246b79807c549b464b5c497","tests/api_str.rs":"8ccb6c3dfe0220229ad33fcaf9dea420b414aea17c7498d978efd1b8aceaa980","tests/bytes.rs":"3564a933f12f84d65488c220d71067a9902ed9860522a7d9139a713f818a0b1c","tests/consistent.rs":"51b12bfec3ec2b49471b508dec537dbbd50823673a34a16b98e38dc3ae2a0793","tests/crates_regex.rs":"7812e91c25a2aad48ba024bcbeb8b922ffc1cfa3113a33615885d72d8a2cae64","tests/crazy.rs":"b0c593be5022341606ddb15b3d28aa39d2d52977db4b1b72c41c6133a7f7a7e0","tests/flags.rs":"cd3788760defc667b32adb2732b6657b289372e1051fc240dfd0e435e2835353","tests/fowler.rs":"e0b7420fa5b636301d4c11cd4dfb803ec09fa7b27be47c594d231167de1241e3","tests/macros.rs":"f021b62e3ce8d122f6450a5aab36972eccf4c21c62a53c604924d4d01d90c0d8","tests/macros_bytes.rs":"dffa91e2e572f5b223b83eba4d32732b1d76cfcfebfbd7f836eeaa929f637657","tests/macros_str.rs":"4f665f039cd5408fc7b4c0fab2983ef3ebd3dc1cd52f7b7e46d7644a2e85b428","tests/misc.rs":"c8cc85ac916980ebd053df2444fe9b795a00f2ac42c5cd828fc3df487f689265","tests/multiline.rs":"4e872a9473bc229d955716c18c77aa3530625a8f3a28ecaefdb70b9aff0f0a8b","tests/noparse.rs":"8850d31cb95e413e3a67edecce8590cd158f49779abcc2e5722381113346179c","tests/regression.rs":"c8293a778591a7862de4d526d856843b4e3f105bba0b7ebca0ed7ae5e0346232","tests/replace.rs":"f1b8ce1a6fede222c6151d37416458515541da285ec2720d6ac950cbad7991e2","tests/searcher.rs":"124c9909a1e8fcfddee8ecfae3a1fb9d76f9ddac62fda23d9b895744728a0aa8","tests/set.rs":"0cecf5d2acb3d0df2b051e0ab56a4a853bb58c0e922480f5e460b9a05a0d16af","tests/shortest_match.rs":"7ca223e0a61b1a26a1f36465ab49de021475295e18f4d6421497461af1e107be","tests/suffix_reverse.rs":"cd497c1a51246a8fc727062133470e0c6300620ad80333d20d63c0ee4224ef1c","tests/test_backtrack.rs":"b07a114b2eb7f1f17357629be9c8458e31f7952fb2c327d66d9415f08855c624","tests/test_backtrack_bytes.rs":"dd3cec3c630d6f41892c9111bee87227bf47126651b2402672c30b084fa9c28c","tests/test_backtrack_utf8bytes.rs":"b576b933d6be21f8cedb281e456441d4278350b0145a139dbccb1861639a54f9","tests/test_crates_regex.rs":"6d7f2cfade28ebab6a831282882b83e4b3d66a5171411730505e2a8bb95074a8","tests/test_default.rs":"dc819a5973dd03a58165afa37da20727e8bf7085f1482414290654483fe20aa1","tests/test_default_bytes.rs":"c5228278e0a1d8fab5157dfd2b52642fd0ec68db346dc133f4c16f178d63e856","tests/test_nfa.rs":"aad36ca01f3f7eb23633a1207056e9056d686be2ef6e3661fad83805fa482927","tests/test_nfa_bytes.rs":"198f7b58c5c7dd0a05f16ddb3b9b63dab29ef2a56448378ac602c5d087c01e4e","tests/test_nfa_utf8bytes.rs":"854d80114ca1bed14d4ad3f2b3bf292ff0fa44e12d7d3f2ec6dd17cbbaa82175","tests/unicode.rs":"cadd620a5d70216d6a3100d18f21598bd3ed6c343023697a7d3c57b7dc45149e","tests/word_boundary.rs":"7081317ddcec1e82dd4a2090a571c6abf2ff4bbfa8cd10395e1eb3f386157fae","tests/word_boundary_ascii.rs":"cd0be5b5b485de0ba7994b42e2864585556c3d2d8bf5eab05b58931d9aaf4b87","tests/word_boundary_unicode.rs":"75dbcc35d3abc0f9795c2ea99e216dc227b0a5b58e9ca5eef767815ff0513921"},"package":"3d8c9f33201f46669484bacc312b00e7541bed6aaf296dffe2bb4e0ac6b8ce2a"} \ No newline at end of file +{"files":{"CHANGELOG.md":"9c14dc291bd9c0d9834b2e7675d634066e2e077ccf5b6b36ac14b0e3565d956e","Cargo.toml":"ed770dfa3a16e64bef3b19f2032bf3121745d44de899b7e2199c34c8788ec5a8","HACKING.md":"2e32478f02437c77376e79c697bc871e364d55ef296d246e8e9cc23e68384b5e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","PERFORMANCE.md":"c776b18758b6dc8f2f9d37e9a95261f75c5f744925e8ddf216b83953bf7467b7","README.md":"0cac07f6d9c515387c53bf327f89626fb52770e71bc579f83408ea088d90295d","UNICODE.md":"d7992c142299cb79f524c964ca8d4cf247b5db99fcf4103e4eebaf6c54cf06f6","appveyor.yml":"3cc9496bd76b8ce1cd4be1c369974fd43798352aad595a36d6f4229bdeeb13d7","build.rs":"2ad6bc9ef140544c1e99a14318459a763d1f9f0d659e769439968589d5137626","ci/after_success.sh":"9a6089e0a64057e97b11158219921c664a6ac956c0fad20f007da29ef11c19af","ci/run-kcov":"a81cad2c3de4c6d704502cdc4227d7432b7765613c7b8c426db66ab03fe23bfb","ci/run-shootout-test":"be7edb66a4a65eaef6a2b7e6036b4b732effa8dcd931bf4cbd591d0ca32b8264","ci/script.sh":"b045557bd690a11b93e02bbacf7e84477378f3403dded9bb59746b24691a7ccf","examples/regexdna-input.txt":"156a49710bb3e1ed4bc2bbb0af0f383b747b3d0281453cfff39c296124c598f8","examples/regexdna-output.txt":"35e85b19b70a893d752fd43e54e1e9da08bac43559191cea85b33387c24c4cc1","examples/shootout-regex-dna-bytes.rs":"f097a923fef2e9bd9a9abd3686eea84830e8050bb750bcab840b6575873227ff","examples/shootout-regex-dna-cheat.rs":"4b5a590ec88a9ba67cc4a34621cb038a400d45e64a15a354f3e07fdaf41a935b","examples/shootout-regex-dna-replace.rs":"15677e7de356427fe2b983e918de073a7a730337b090d4ab0e815e1e66f74f73","examples/shootout-regex-dna-single-cheat.rs":"5e743b3a6ec968713ce064a289b1fbd11c302add824d1c749a2ffb546c73128e","examples/shootout-regex-dna-single.rs":"c86969adb0fb08c5e23f749ec6922a58404da7d0e1925c848957a5144ddc8815","examples/shootout-regex-dna.rs":"e627f1e5e24c1cf4e9c9d52b844b6d971c59b7169b0e8762d8d9d1cb7debc6e6","scripts/frequencies.py":"df2cac150bc4ed42d2d97762535a5f260f3fe06d9d516721f68a52671a3b7a3b","scripts/regex-match-tests.py":"f1b3ad870c893510172bd84f8328b66ee99cd7aee7715a95a858468ff3e33635","src/backtrack.rs":"0372ada608dca9c8d3e1fabf56e33498f8ff4fbdfd445873c4a4be6657465c68","src/compile.rs":"32667252ac4b687d9ef1c9dd0f055f0616ab49050870daca338809d32616409b","src/dfa.rs":"163aa4ec0dcdb1ffc7dd687debc1d64acffeeca7861cb4bb303d2da0ad33b3a6","src/error.rs":"d26673a95e372665863c7e01558836ef6e957aadf421d5056525720e16a9683d","src/exec.rs":"94d4f72ead069720aee90625929a2aad237f978e431359f1c3c5ae73580d3266","src/expand.rs":"4333da32d6fbb05ec05bead810eb659c5b012e2d361a9bb9e24bb30e8939fb88","src/freqs.rs":"e25871eec51d1c02c15abbc04d61dbea71fb2dbc15f370c98279687416c969de","src/input.rs":"9b092fe88a66b46dee0dfe0a2e67e4b78b01a32f53b28443b5f382b8514d0cfb","src/lib.rs":"5a31b01bc633a724d9429ed5b455d75600b5d787a352609da2c9e7b23e13201c","src/literal/mod.rs":"c395221efe19f36edd9d92c8f8283e5b30553e0e9b408ccb1430d11f038730f8","src/literal/teddy_avx2/fallback.rs":"f24b70f9dd028eefe2802b7bbc6b2dca97663b03a931058e3a59750f0693a15c","src/literal/teddy_avx2/imp.rs":"b0e4634bc9fbc793e3b0938b97a236df4b8fb17a0ac08040a6394bc73042aa8b","src/literal/teddy_avx2/mod.rs":"2feb1a41e3df8a77e8dbb3a08492ee3cf0bac2f05abddc0e35b964d6f5a86c0c","src/literal/teddy_ssse3/fallback.rs":"f24b70f9dd028eefe2802b7bbc6b2dca97663b03a931058e3a59750f0693a15c","src/literal/teddy_ssse3/imp.rs":"be4565c47a3807ab09343f2da4ef0e3297d4776719472efb60dee8e55380c2ec","src/literal/teddy_ssse3/mod.rs":"7554e6598326f3662f7632cc0c7d05aa48baed4a765f4b99647fab3c1b40f750","src/pattern.rs":"4e820c17a2b983050f47d3fd13282094ce9f27b75fd852fcec438d61f07f0b0b","src/pikevm.rs":"9600a8b135075f8cf62683e6b08c73834873a203347d275f1e9ca3a97221dbeb","src/prog.rs":"7fdfa764562867c3b051554921fbf6452d08e6f860ade6657cf021b6a734b899","src/re_builder.rs":"45ce0a6b243d63f6ebb53ea3082df4bf45a9e20fbb00aa477dbd95f4bdbcdf2f","src/re_bytes.rs":"07e5a01581e304072dc710458211eefa84fa5984b9a33f46c605e4f7695f568e","src/re_set.rs":"f0fa1a98f8aa1eeee209fae70f9efd3f9043557de30dc1a940279555b21b688b","src/re_trait.rs":"8ecbdd8db8c8e4194acd71e4a751aa8409bbd495015a01bb7c8b425677f3fa39","src/re_unicode.rs":"02c95c63842144aacb6c74bc17e75266ad621b0fe993f29c8d6144fe24ff6179","src/sparse.rs":"04e70bb0bd006f806e8c9cf19825625e907036304823bc03b6c8f2e5046a38ef","src/testdata/LICENSE":"58cf078acc03da3e280a938c2bd9943f554fc9b6ced89ad93ba35ca436872899","src/testdata/README":"45f869e37f798905c773bfbe0ef19a5fb7e585cbf0b7c21b5b5a784e8cec3c14","src/testdata/basic.dat":"3756a5bdd6f387ed34731197fbdaab8521b0ae1726250100ba235756cb42b4b1","src/testdata/nullsubexpr.dat":"496ac0278eec3b6d9170faace14554569032dd3d909618364d9326156de39ecf","src/testdata/repetition.dat":"1f7959063015b284b18a4a2c1c8b416d438a2d6c4b1a362da43406b865f50e69","src/utf8.rs":"1a2d7bc43ab139bfc2b2610627efd59a7ead2a959492ba73eebb743d482c7957","src/vector/avx2.rs":"1ef39371a9215144b69bf72df9aa3533ea6be44d7425cdc5c8192de79dfc5e96","src/vector/mod.rs":"8fe24ee6848eb7bf14c33ed26f13221ea00a868c9857fda3784a71147087cd55","src/vector/ssse3.rs":"f8549244fddfcb73f538761c0ae5a81c535e5ae5e129cebf8e3e6f9db4fa79f4","tests/api.rs":"803faacd9ac5efc149959ff63a2132f5ca155f75a246b79807c549b464b5c497","tests/api_str.rs":"8ccb6c3dfe0220229ad33fcaf9dea420b414aea17c7498d978efd1b8aceaa980","tests/bytes.rs":"3564a933f12f84d65488c220d71067a9902ed9860522a7d9139a713f818a0b1c","tests/crazy.rs":"b0c593be5022341606ddb15b3d28aa39d2d52977db4b1b72c41c6133a7f7a7e0","tests/flags.rs":"cd3788760defc667b32adb2732b6657b289372e1051fc240dfd0e435e2835353","tests/fowler.rs":"e0b7420fa5b636301d4c11cd4dfb803ec09fa7b27be47c594d231167de1241e3","tests/macros.rs":"f021b62e3ce8d122f6450a5aab36972eccf4c21c62a53c604924d4d01d90c0d8","tests/macros_bytes.rs":"dffa91e2e572f5b223b83eba4d32732b1d76cfcfebfbd7f836eeaa929f637657","tests/macros_str.rs":"4f665f039cd5408fc7b4c0fab2983ef3ebd3dc1cd52f7b7e46d7644a2e85b428","tests/misc.rs":"c8cc85ac916980ebd053df2444fe9b795a00f2ac42c5cd828fc3df487f689265","tests/multiline.rs":"4e872a9473bc229d955716c18c77aa3530625a8f3a28ecaefdb70b9aff0f0a8b","tests/noparse.rs":"8850d31cb95e413e3a67edecce8590cd158f49779abcc2e5722381113346179c","tests/regression.rs":"c8293a778591a7862de4d526d856843b4e3f105bba0b7ebca0ed7ae5e0346232","tests/replace.rs":"f1b8ce1a6fede222c6151d37416458515541da285ec2720d6ac950cbad7991e2","tests/searcher.rs":"124c9909a1e8fcfddee8ecfae3a1fb9d76f9ddac62fda23d9b895744728a0aa8","tests/set.rs":"0cecf5d2acb3d0df2b051e0ab56a4a853bb58c0e922480f5e460b9a05a0d16af","tests/shortest_match.rs":"7ca223e0a61b1a26a1f36465ab49de021475295e18f4d6421497461af1e107be","tests/suffix_reverse.rs":"cd497c1a51246a8fc727062133470e0c6300620ad80333d20d63c0ee4224ef1c","tests/test_backtrack.rs":"b07a114b2eb7f1f17357629be9c8458e31f7952fb2c327d66d9415f08855c624","tests/test_backtrack_bytes.rs":"dd3cec3c630d6f41892c9111bee87227bf47126651b2402672c30b084fa9c28c","tests/test_backtrack_utf8bytes.rs":"b576b933d6be21f8cedb281e456441d4278350b0145a139dbccb1861639a54f9","tests/test_default.rs":"dc819a5973dd03a58165afa37da20727e8bf7085f1482414290654483fe20aa1","tests/test_default_bytes.rs":"c5228278e0a1d8fab5157dfd2b52642fd0ec68db346dc133f4c16f178d63e856","tests/test_nfa.rs":"aad36ca01f3f7eb23633a1207056e9056d686be2ef6e3661fad83805fa482927","tests/test_nfa_bytes.rs":"198f7b58c5c7dd0a05f16ddb3b9b63dab29ef2a56448378ac602c5d087c01e4e","tests/test_nfa_utf8bytes.rs":"854d80114ca1bed14d4ad3f2b3bf292ff0fa44e12d7d3f2ec6dd17cbbaa82175","tests/unicode.rs":"cadd620a5d70216d6a3100d18f21598bd3ed6c343023697a7d3c57b7dc45149e","tests/word_boundary.rs":"7081317ddcec1e82dd4a2090a571c6abf2ff4bbfa8cd10395e1eb3f386157fae","tests/word_boundary_ascii.rs":"cd0be5b5b485de0ba7994b42e2864585556c3d2d8bf5eab05b58931d9aaf4b87","tests/word_boundary_unicode.rs":"75dbcc35d3abc0f9795c2ea99e216dc227b0a5b58e9ca5eef767815ff0513921"},"package":"75ecf88252dce580404a22444fc7d626c01815debba56a7f4f536772a5ff19d3"} \ No newline at end of file diff --git a/third_party/rust/regex/CHANGELOG.md b/third_party/rust/regex/CHANGELOG.md index 79710e3b0cf2..9432c314a0c0 100644 --- a/third_party/rust/regex/CHANGELOG.md +++ b/third_party/rust/regex/CHANGELOG.md @@ -1,50 +1,3 @@ -1.0.2 (2018-07-18) -================== -This release exposes some new lower level APIs on `Regex` that permit -amortizing allocation and controlling the location at which a search is -performed in a more granular way. Most users of the regex crate will not -need or want to use these APIs. - -New features: - -* [FEATURE #493](https://github.com/rust-lang/regex/pull/493): - Add a few lower level APIs for amortizing allocation and more fine grained - searching. - -Bug fixes: - -* [BUG 3981d2ad](https://github.com/rust-lang/regex/commit/3981d2ad): - Correct outdated documentation on `RegexBuilder::dot_matches_new_line`. -* [BUG 7ebe4ae0](https://github.com/rust-lang/regex/commit/7ebe4ae0): - Correct outdated documentation on `Parser::allow_invalid_utf8` in the - `regex-syntax` crate. -* [BUG 24c7770b](https://github.com/rust-lang/regex/commit/24c7770b): - Fix a bug in the HIR printer where it wouldn't correctly escape meta - characters in character classes. - - -1.0.1 (2018-06-19) -================== -This release upgrades regex's Unicode tables to Unicode 11, and enables SIMD -optimizations automatically on Rust stable (1.27 or newer). - -New features: - -* [FEATURE #486](https://github.com/rust-lang/regex/pull/486): - Implement `size_hint` on `RegexSet` match iterators. -* [FEATURE #488](https://github.com/rust-lang/regex/pull/488): - Update Unicode tables for Unicode 11. -* [FEATURE #490](https://github.com/rust-lang/regex/pull/490): - SIMD optimizations are now enabled automatically in Rust stable, for versions - 1.27 and up. No compilation flags or features need to be set. CPU support - SIMD is detected automatically at runtime. - -Bug fixes: - -* [BUG #482](https://github.com/rust-lang/regex/pull/482): - Present a better compilation error when the `use_std` feature isn't used. - - 1.0.0 (2018-05-01) ================== This release marks the 1.0 release of regex. diff --git a/third_party/rust/regex/Cargo.toml b/third_party/rust/regex/Cargo.toml index 7d4ded9ad907..af99fd1c616d 100644 --- a/third_party/rust/regex/Cargo.toml +++ b/third_party/rust/regex/Cargo.toml @@ -12,9 +12,8 @@ [package] name = "regex" -version = "1.0.3" +version = "1.0.0" authors = ["The Rust Project Developers"] -autotests = false description = "An implementation of regular expressions for Rust. This implementation uses\nfinite automata and guarantees linear time matching on all inputs.\n" homepage = "https://github.com/rust-lang/regex" documentation = "https://docs.rs/regex" @@ -65,10 +64,6 @@ path = "tests/test_backtrack_utf8bytes.rs" [[test]] name = "backtrack-bytes" path = "tests/test_backtrack_bytes.rs" - -[[test]] -name = "crates-regex" -path = "tests/test_crates_regex.rs" [dependencies.aho-corasick] version = "0.6.0" @@ -79,7 +74,7 @@ version = "2.0.0" version = "0.6.0" [dependencies.thread_local] -version = "0.3.6" +version = "0.3.2" [dependencies.utf8-ranges] version = "1.0.0" diff --git a/third_party/rust/regex/HACKING.md b/third_party/rust/regex/HACKING.md index 160bbc328b49..b216d0d1fc58 100644 --- a/third_party/rust/regex/HACKING.md +++ b/third_party/rust/regex/HACKING.md @@ -249,11 +249,6 @@ matching engine we want to test. The entry points are: backtracking on every regex and use *arbitrary* byte based programs. * `tests/test_backtrack_utf8bytes.rs` - tests `Regex::new`, forced to use backtracking on every regex and use *UTF-8* byte based programs. -* `tests/test_crates_regex.rs` - tests to make sure that all of the - backends behave in the same way against a number of quickcheck - generated random inputs. These tests need to be enabled through - the `RUST_REGEX_RANDOM_TEST` environment variable (see - below). The lazy DFA and pure literal engines are absent from this list because they cannot be used on every regular expression. Instead, we rely on @@ -264,12 +259,6 @@ entry points, it can take a while to compile everything. To reduce compile times slightly, try using `cargo test --test default`, which will only use the `tests/test_default.rs` entry point. -The random testing takes quite a while, so it is not enabled by default. -In order to run the random testing you can set the -`RUST_REGEX_RANDOM_TEST` environment variable to anything before -invoking `cargo test`. Note that this variable is inspected at compile -time, so if the tests don't seem to be running, you may need to run -`cargo clean`. ## Benchmarking diff --git a/third_party/rust/regex/README.md b/third_party/rust/regex/README.md index 82420bd377cd..8828183014c7 100644 --- a/third_party/rust/regex/README.md +++ b/third_party/rust/regex/README.md @@ -29,7 +29,7 @@ Add this to your `Cargo.toml`: ```toml [dependencies] -regex = "1" +regex = "0.2" ``` and this to your crate root: @@ -191,9 +191,13 @@ assert!(matches.matched(6)); ### Usage: enable SIMD optimizations -SIMD optimizations are enabled automatically on Rust stable 1.27 and newer. -For nightly versions of Rust, this requires a recent version with the SIMD -features stabilized. +This crate provides an `unstable` feature that can only be enabled on nightly +Rust. When this feature is enabled, the regex crate will use SIMD optimizations +if your CPU supports them. No additional compile time flags are required; the +regex crate will detect your CPU support at runtime. + +When `std::arch` becomes stable, then these optimizations will be enabled +automatically. ### Usage: a regular expression parser @@ -212,11 +216,11 @@ recommended for general use. This crate's minimum supported `rustc` version is `1.20.0`. -The current **tentative** policy is that the minimum Rust version required -to use this crate can be increased in minor version updates. For example, if -regex 1.0 requires Rust 1.20.0, then regex 1.0.z for all values of `z` will -also require Rust 1.20.0 or newer. However, regex 1.y for `y > 0` may require a -newer minimum version of Rust. +The current **tentative** policy is that the minimum Rust version required to +use this crate can be increased in minor version updates. For example, if +regex 1.0.0 requires Rust 1.20.0, then regex 1.0.z for all values of `z` will +also require Rust 1.20.0 or newer. However, regex 1.y for `y > 0` may require +a newer minimum version of Rust. In general, this crate will be conservative with respect to the minimum supported version of Rust. diff --git a/third_party/rust/regex/build.rs b/third_party/rust/regex/build.rs index 9440ab92d734..a5d12a108b65 100644 --- a/third_party/rust/regex/build.rs +++ b/third_party/rust/regex/build.rs @@ -11,76 +11,17 @@ fn main() { .stdout; let version = String::from_utf8(output).unwrap(); - enable_simd_optimizations(&version); -} - -fn enable_simd_optimizations(version: &str) { - // We don't activate SIMD optimizations these if we've explicitly disabled - // them. Disabling auto optimizations is intended for use in tests, so that - // we can reliably test fallback implementations. - if env::var_os("CARGO_CFG_REGEX_DISABLE_AUTO_OPTIMIZATIONS").is_some() { - return; - } - let parsed = match Version::parse(&version) { - Ok(parsed) => parsed, - Err(err) => { - eprintln!("failed to parse `rustc --version`: {}", err); - return; + // If we're using nightly Rust, then we can enable vector optimizations. + // Note that these aren't actually activated unless the `unstable` feature + // is enabled. + // + // We also don't activate these if we've explicitly disabled auto + // optimizations. Disabling auto optimizations is intended for use in + // tests, so that we can reliably test fallback implementations. + if env::var_os("CARGO_CFG_REGEX_DISABLE_AUTO_OPTIMIZATIONS").is_none() { + if version.contains("nightly") { + println!("cargo:rustc-cfg=regex_runtime_teddy_ssse3"); + println!("cargo:rustc-cfg=regex_runtime_teddy_avx2"); } - }; - let minimum = Version { major: 1, minor: 27, patch: 0 }; - if version.contains("nightly") || parsed >= minimum { - println!("cargo:rustc-cfg=regex_runtime_teddy_ssse3"); - println!("cargo:rustc-cfg=regex_runtime_teddy_avx2"); - } -} - -#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)] -struct Version { - major: u32, - minor: u32, - patch: u32, -} - -impl Version { - fn parse(mut s: &str) -> Result { - if !s.starts_with("rustc ") { - return Err(format!("unrecognized version string: {}", s)); - } - s = &s["rustc ".len()..]; - - let parts: Vec<&str> = s.split(".").collect(); - if parts.len() < 3 { - return Err(format!("not enough version parts: {:?}", parts)); - } - - let mut num = String::new(); - for c in parts[0].chars() { - if !c.is_digit(10) { - break; - } - num.push(c); - } - let major = num.parse::().map_err(|e| e.to_string())?; - - num.clear(); - for c in parts[1].chars() { - if !c.is_digit(10) { - break; - } - num.push(c); - } - let minor = num.parse::().map_err(|e| e.to_string())?; - - num.clear(); - for c in parts[2].chars() { - if !c.is_digit(10) { - break; - } - num.push(c); - } - let patch = num.parse::().map_err(|e| e.to_string())?; - - Ok(Version { major, minor, patch }) } } diff --git a/third_party/rust/regex/ci/script.sh b/third_party/rust/regex/ci/script.sh index 9fa43079bf96..64fafc0d3798 100755 --- a/third_party/rust/regex/ci/script.sh +++ b/third_party/rust/regex/ci/script.sh @@ -9,18 +9,11 @@ cargo build --verbose cargo doc --verbose # Run tests. If we have nightly, then enable our nightly features. -# Right now there are no nightly features, but that may change in the -# future. -CARGO_TEST_EXTRA_FLAGS="" if [ "$TRAVIS_RUST_VERSION" = "nightly" ]; then - CARGO_TEST_EXTRA_FLAGS="" + cargo test --verbose --features unstable +else + cargo test --verbose fi -cargo test --verbose ${CARGO_TEST_EXTRA_FLAGS} - -# Run the random tests in release mode, as this is faster. -RUST_REGEX_RANDOM_TEST=1 \ - cargo test --release --verbose \ - ${CARGO_TEST_EXTRA_FLAGS} --test crates-regex # Run a test that confirms the shootout benchmarks are correct. ci/run-shootout-test @@ -30,7 +23,9 @@ cargo test --verbose --manifest-path regex-syntax/Cargo.toml cargo doc --verbose --manifest-path regex-syntax/Cargo.toml # Run tests on regex-capi crate. -ci/test-regex-capi +cargo build --verbose --manifest-path regex-capi/Cargo.toml +(cd regex-capi/ctest && ./compile && LD_LIBRARY_PATH=../../target/debug ./test) +(cd regex-capi/examples && ./compile && LD_LIBRARY_PATH=../../target/debug ./iter) # Make sure benchmarks compile. Don't run them though because they take a # very long time. Also, check that we can build the regex-debug tool. diff --git a/third_party/rust/regex/ci/test-regex-capi b/third_party/rust/regex/ci/test-regex-capi deleted file mode 100755 index f643aad0dde7..000000000000 --- a/third_party/rust/regex/ci/test-regex-capi +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -set -e - -cargo build --verbose --manifest-path regex-capi/Cargo.toml -(cd regex-capi/ctest && ./compile && LD_LIBRARY_PATH=../../target/debug ./test) -(cd regex-capi/examples && ./compile && LD_LIBRARY_PATH=../../target/debug ./iter) diff --git a/third_party/rust/regex/scripts/generate.py b/third_party/rust/regex/scripts/generate.py deleted file mode 100755 index 7dbd065add27..000000000000 --- a/third_party/rust/regex/scripts/generate.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 - -# This uses `ucd-generate` to generate all of the internal tables. - -import argparse -import os -import subprocess -import sys - - -def eprint(*args, **kwargs): - kwargs['file'] = sys.stderr - print(*args, **kwargs) - - -def main(): - p = argparse.ArgumentParser() - p.add_argument('ucd', metavar='DIR', nargs=1) - args = p.parse_args() - ucd = args.ucd[0] - - def generate(subcmd, *args, **kwargs): - subprocess.run(("ucd-generate", subcmd, ucd) + args, check=True, **kwargs) - - def generate_file(path, subcmd, *args, filename=None, **kwargs): - if filename is None: - filename = subcmd.replace('-', '_') + ".rs" - eprint('-', filename) - with open(os.path.join(path, filename), "w") as f: - generate(subcmd, *args, stdout=f, **kwargs) - - eprint('generating regex-syntax tables') - path = os.path.join("regex-syntax", "src", "unicode_tables") - generate_file(path, "age", "--chars") - generate_file(path, "case-folding-simple", "--chars", "--all-pairs") - generate_file(path, "general-category", "--chars", "--exclude", "surrogate") - generate_file(path, "perl-word", "--chars") - generate_file(path, "property-bool", "--chars") - generate_file(path, "property-names") - generate_file(path, "property-values", "--include", "gc,script,scx,age") - generate_file(path, "script", "--chars") - generate_file(path, "script-extension", "--chars") - -if __name__ == '__main__': - main() diff --git a/third_party/rust/regex/scripts/scrape_crates_io.py b/third_party/rust/regex/scripts/scrape_crates_io.py deleted file mode 100755 index 943fa8c2b4bd..000000000000 --- a/third_party/rust/regex/scripts/scrape_crates_io.py +++ /dev/null @@ -1,189 +0,0 @@ -#!/usr/bin/env python3 - -from subprocess import call -import argparse -import datetime -import glob -import json -import os -import re -import shutil -import tempfile -import time -import urllib3 - -CRATES_IO_INDEX_GIT_LOC = "https://github.com/rust-lang/crates.io-index.git" -RE_REGEX = re.compile(r"Regex::new\((r?\".*?\")\)") -KNOWN_UNMAINTAINED_CRATES = set(["queryst-prime", "oozz"]) - -# if only requests was in the standard library... -urllib3.disable_warnings() -http = urllib3.PoolManager() - - -def argparser(): - p = argparse.ArgumentParser("A script to scrape crates.io for regex.") - p.add_argument("-c", "--crates-index", metavar="CRATES_INDEX_DIR", - help=("A directory where we can find crates.io-index " - + "(if this isn't set it will be automatically " - + "downloaded).")) - p.add_argument("-o", "--output-file", metavar="OUTPUT", - default="crates_regex.rs", - help="The name of the output file to create.") - return p - - -PRELUDE = """// Copyright 2018 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// DO NOT EDIT. Automatically generated by 'scripts/scrape_crates_io.py' -// on {date}. - - - -""" - - -def main(): - args = argparser().parse_args() - out = open(os.path.abspath(args.output_file), "w") - out.write(PRELUDE.format(date=str(datetime.datetime.now()))) - if args.crates_index: - args.crates_index = os.path.abspath(args.crates_index) - - # enter our scratch directory - old_dir = os.getcwd() - work_dir = tempfile.mkdtemp(prefix="scrape-crates-io") - os.chdir(work_dir) - - crates_index = (args.crates_index - if os.path.join(old_dir, args.crates_index) - else download_crates_index()) - - for (name, vers) in iter_crates(crates_index): - if name in KNOWN_UNMAINTAINED_CRATES: - continue - - with Crate(work_dir, name, vers) as c: - i = 0 - for line in c.iter_lines(): - for r in RE_REGEX.findall(line): - print((name, vers, r)) - if len(r) >= 2 and r[-2] == "\\": - continue - out.write("// {}-{}: {}\n".format(name, vers, r)) - out.write("consistent!({}_{}, {});\n\n".format( - name.replace("-", "_"), i, r)) - out.flush() - i += 1 - - # Leave the scratch directory - os.chdir(old_dir) - shutil.rmtree(work_dir) - out.close() - - -def download_crates_index(): - if call(["git", "clone", CRATES_IO_INDEX_GIT_LOC]) != 0: - print("Error cloning the crates.io index") - exit(1) - return "crates.io-index" - - -def iter_crates(crates_index): - exclude = set(["config.json", ".git"]) - for crate_index_file in iter_files(crates_index, exclude=exclude): - with open(crate_index_file) as f: - most_recent = list(f) - most_recent = most_recent[len(most_recent) - 1] - - crate_info = json.loads(most_recent) - if "regex" not in set(d["name"] for d in crate_info["deps"]): - continue - - if crate_info["yanked"]: - continue - yield (crate_info["name"], crate_info["vers"]) - - -def iter_files(d, exclude=set()): - for x in os.listdir(d): - if x in exclude: - continue - - fullfp = os.path.abspath(d + "/" + x) - if os.path.isfile(fullfp): - yield fullfp - elif os.path.isdir(fullfp): - for f in iter_files(fullfp, exclude): - yield f - - -class Crate(object): - def __init__(self, work_dir, name, version): - self.name = name - self.version = version - self.url = ("https://crates.io/api/v1/crates/{name}/{version}/download" - .format(name=self.name, version=self.version)) - self.filename = "{}/{}-{}.tar.gz".format( - work_dir, self.name, self.version) - - def __enter__(self): - max_retries = 1 - retries = 0 - while retries < max_retries: - retries += 1 - - r = http.request("GET", self.url, preload_content=False) - try: - print("[{}/{}] Downloading {}".format( - retries, max_retries + 1, self.url)) - with open(self.filename, "wb") as f: - while True: - data = r.read(1024) - if not data: - break - f.write(data) - except requests.exceptions.ConnectionError: - time.sleep(1) - r.release_conn() - continue - - r.release_conn() - break - - call(["tar", "-xf", self.filename]) - - return self - - def __exit__(self, ty, value, tb): - # We are going to clean up the whole temp dir anyway, so - # we don't really need to do this. Its nice to clean up - # after ourselves though. - try: - shutil.rmtree(self.filename[:-len(".tar.gz")]) - os.remove(self.filename) - except _: - pass - - def iter_srcs(self): - g = "{crate}/**/*.rs".format(crate=self.filename[:-len(".tar.gz")]) - for rsrc in glob.iglob(g): - yield rsrc - - def iter_lines(self): - for src in self.iter_srcs(): - with open(src) as f: - for line in f: - yield line - - -if __name__ == "__main__": - main() diff --git a/third_party/rust/regex/src/exec.rs b/third_party/rust/regex/src/exec.rs index 578289aa5c0f..e6079e6c7ab4 100644 --- a/third_party/rust/regex/src/exec.rs +++ b/third_party/rust/regex/src/exec.rs @@ -29,7 +29,7 @@ use prog::Program; use re_builder::RegexOptions; use re_bytes; use re_set; -use re_trait::{RegularExpression, Slot, Locations}; +use re_trait::{RegularExpression, Slot, Locations, as_slots}; use re_unicode; use utf8::next_utf8; @@ -359,13 +359,13 @@ impl<'c> RegularExpression for ExecNoSyncStr<'c> { } #[inline(always)] // reduces constant overhead - fn captures_read_at( + fn read_captures_at( &self, locs: &mut Locations, text: &str, start: usize, ) -> Option<(usize, usize)> { - self.0.captures_read_at(locs, text.as_bytes(), start) + self.0.read_captures_at(locs, text.as_bytes(), start) } } @@ -528,13 +528,13 @@ impl<'c> RegularExpression for ExecNoSync<'c> { /// /// Note that the first two slots always correspond to the start and end /// locations of the overall match. - fn captures_read_at( + fn read_captures_at( &self, locs: &mut Locations, text: &[u8], start: usize, ) -> Option<(usize, usize)> { - let slots = locs.as_slots(); + let slots = as_slots(locs); for slot in slots.iter_mut() { *slot = None; } diff --git a/third_party/rust/regex/src/lib.rs b/third_party/rust/regex/src/lib.rs index 9ca156084a8d..8123eba6a099 100644 --- a/third_party/rust/regex/src/lib.rs +++ b/third_party/rust/regex/src/lib.rs @@ -29,7 +29,7 @@ used by adding `regex` to your dependencies in your project's `Cargo.toml`. ```toml [dependencies] -regex = "1" +regex = "0.2" ``` and this to your crate root: @@ -287,7 +287,7 @@ regexes. The syntax supported in this crate is documented below. Note that the regular expression parser and abstract syntax are exposed in -a separate crate, [`regex-syntax`](https://docs.rs/regex-syntax). +a separate crate, [`regex-syntax`](../regex_syntax/index.html). ## Matching one character @@ -521,9 +521,6 @@ another matching engine with fixed memory requirements. #![cfg_attr(test, deny(warnings))] #![cfg_attr(feature = "pattern", feature(pattern))] -#[cfg(not(feature = "use_std"))] -compile_error!("`use_std` feature is currently required to build this crate"); - extern crate aho_corasick; extern crate memchr; extern crate thread_local; @@ -542,11 +539,11 @@ pub use re_builder::set_unicode::*; #[cfg(feature = "use_std")] pub use re_set::unicode::*; #[cfg(feature = "use_std")] +pub use re_trait::Locations; #[cfg(feature = "use_std")] pub use re_unicode::{ Regex, Match, Captures, CaptureNames, Matches, CaptureMatches, SubCaptureMatches, - CaptureLocations, Locations, Replacer, ReplacerRef, NoExpand, Split, SplitN, escape, }; @@ -644,6 +641,7 @@ pub mod bytes { pub use re_builder::set_bytes::*; pub use re_bytes::*; pub use re_set::bytes::*; + pub use re_trait::Locations; } mod backtrack; @@ -666,7 +664,7 @@ mod re_set; mod re_trait; mod re_unicode; mod sparse; -#[cfg(any(regex_runtime_teddy_ssse3, regex_runtime_teddy_avx2))] +#[cfg(feature = "unstable")] mod vector; /// The `internal` module exists to support suspicious activity, such as diff --git a/third_party/rust/regex/src/literal/teddy_avx2/mod.rs b/third_party/rust/regex/src/literal/teddy_avx2/mod.rs index 4a268163be73..78b6e20e8a19 100644 --- a/third_party/rust/regex/src/literal/teddy_avx2/mod.rs +++ b/third_party/rust/regex/src/literal/teddy_avx2/mod.rs @@ -1,14 +1,16 @@ pub use self::imp::*; #[cfg(all( + feature = "unstable", regex_runtime_teddy_avx2, - target_arch = "x86_64", + any(target_arch = "x86_64"), ))] mod imp; #[cfg(not(all( + feature = "unstable", regex_runtime_teddy_avx2, - target_arch = "x86_64", + any(target_arch = "x86_64"), )))] #[path = "fallback.rs"] mod imp; diff --git a/third_party/rust/regex/src/literal/teddy_ssse3/mod.rs b/third_party/rust/regex/src/literal/teddy_ssse3/mod.rs index 8ffaeba57bd8..22211599453a 100644 --- a/third_party/rust/regex/src/literal/teddy_ssse3/mod.rs +++ b/third_party/rust/regex/src/literal/teddy_ssse3/mod.rs @@ -1,14 +1,16 @@ pub use self::imp::*; #[cfg(all( + feature = "unstable", regex_runtime_teddy_ssse3, - target_arch = "x86_64", + any(target_arch = "x86", target_arch = "x86_64"), ))] mod imp; #[cfg(not(all( + feature = "unstable", regex_runtime_teddy_ssse3, - target_arch = "x86_64", + any(target_arch = "x86", target_arch = "x86_64"), )))] #[path = "fallback.rs"] mod imp; diff --git a/third_party/rust/regex/src/re_builder.rs b/third_party/rust/regex/src/re_builder.rs index 6f0352687018..ca3d62536a02 100644 --- a/third_party/rust/regex/src/re_builder.rs +++ b/third_party/rust/regex/src/re_builder.rs @@ -106,9 +106,9 @@ impl RegexBuilder { /// anything when `s` is set and matches anything except for new line when /// it is not set (the default). /// - /// N.B. "matches anything" means "any byte" when Unicode is disabled and - /// means "any valid UTF-8 encoding of any Unicode scalar value" when - /// Unicode is enabled. + /// N.B. "matches anything" means "any byte" for `regex::bytes::Regex` + /// expressions and means "any Unicode scalar value" for `regex::Regex` + /// expressions. pub fn dot_matches_new_line(&mut self, yes: bool) -> &mut RegexBuilder { self.0.dot_matches_new_line = yes; self diff --git a/third_party/rust/regex/src/re_bytes.rs b/third_party/rust/regex/src/re_bytes.rs index c8047229e895..d577d6b0c315 100644 --- a/third_party/rust/regex/src/re_bytes.rs +++ b/third_party/rust/regex/src/re_bytes.rs @@ -21,7 +21,7 @@ use exec::{Exec, ExecNoSync}; use expand::expand_bytes; use error::Error; use re_builder::bytes::RegexBuilder; -use re_trait::{self, RegularExpression, SubCapturesPosIter}; +use re_trait::{self, RegularExpression, Locations, SubCapturesPosIter}; /// Match represents a single match of a regex in a haystack. /// @@ -209,9 +209,9 @@ impl Regex { /// let re = Regex::new(r"'([^']+)'\s+\((\d{4})\)").unwrap(); /// let text = b"Not my favorite movie: 'Citizen Kane' (1941)."; /// let caps = re.captures(text).unwrap(); - /// assert_eq!(caps.get(1).unwrap().as_bytes(), &b"Citizen Kane"[..]); - /// assert_eq!(caps.get(2).unwrap().as_bytes(), &b"1941"[..]); - /// assert_eq!(caps.get(0).unwrap().as_bytes(), &b"'Citizen Kane' (1941)"[..]); + /// assert_eq!(&caps[1], &b"Citizen Kane"[..]); + /// assert_eq!(&caps[2], &b"1941"[..]); + /// assert_eq!(&caps[0], &b"'Citizen Kane' (1941)"[..]); /// // You can also access the groups by index using the Index notation. /// // Note that this will panic on an invalid index. /// assert_eq!(&caps[1], b"Citizen Kane"); @@ -232,9 +232,9 @@ impl Regex { /// .unwrap(); /// let text = b"Not my favorite movie: 'Citizen Kane' (1941)."; /// let caps = re.captures(text).unwrap(); - /// assert_eq!(caps.name("title").unwrap().as_bytes(), b"Citizen Kane"); - /// assert_eq!(caps.name("year").unwrap().as_bytes(), b"1941"); - /// assert_eq!(caps.get(0).unwrap().as_bytes(), &b"'Citizen Kane' (1941)"[..]); + /// assert_eq!(&caps["title"], &b"Citizen Kane"[..]); + /// assert_eq!(&caps["year"], &b"1941"[..]); + /// assert_eq!(&caps[0], &b"'Citizen Kane' (1941)"[..]); /// // You can also access the groups by name using the Index notation. /// // Note that this will panic on an invalid group name. /// assert_eq!(&caps["title"], b"Citizen Kane"); @@ -252,10 +252,10 @@ impl Regex { /// The `0`th capture group is always unnamed, so it must always be /// accessed with `get(0)` or `[0]`. pub fn captures<'t>(&self, text: &'t [u8]) -> Option> { - let mut locs = self.capture_locations(); - self.captures_read_at(&mut locs, text, 0).map(move |_| Captures { + let mut locs = self.locations(); + self.read_captures_at(&mut locs, text, 0).map(|_| Captures { text: text, - locs: locs.0, + locs: locs, named_groups: self.0.capture_name_idx().clone(), }) } @@ -568,6 +568,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn shortest_match_at( &self, text: &[u8], @@ -582,6 +583,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn is_match_at(&self, text: &[u8], start: usize) -> bool { self.shortest_match_at(text, start).is_some() } @@ -592,6 +594,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn find_at<'t>( &self, text: &'t [u8], @@ -601,55 +604,21 @@ impl Regex { .map(|(s, e)| Match::new(text, s, e)) } - /// This is like `captures`, but uses - /// [`CaptureLocations`](struct.CaptureLocations.html) - /// instead of - /// [`Captures`](struct.Captures.html) in order to amortize allocations. - /// - /// To create a `CaptureLocations` value, use the - /// `Regex::capture_locations` method. - /// - /// This returns the overall match if this was successful, which is always - /// equivalence to the `0`th capture group. - pub fn captures_read<'t>( - &self, - locs: &mut CaptureLocations, - text: &'t [u8], - ) -> Option> { - self.captures_read_at(locs, text, 0) - } - - /// Returns the same as `captures_read`, but starts the search at the given + /// Returns the same as captures, but starts the search at the given /// offset and populates the capture locations given. /// /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. - pub fn captures_read_at<'t>( - &self, - locs: &mut CaptureLocations, - text: &'t [u8], - start: usize, - ) -> Option> { - self.0 - .searcher() - .captures_read_at(&mut locs.0, text, start) - .map(|(s, e)| Match::new(text, s, e)) - } - - /// An undocumented alias for `captures_read_at`. - /// - /// The `regex-capi` crate previously used this routine, so to avoid - /// breaking that crate, we continue to provide the name as an undocumented - /// alias. #[doc(hidden)] pub fn read_captures_at<'t>( &self, - locs: &mut CaptureLocations, + locs: &mut Locations, text: &'t [u8], start: usize, ) -> Option> { - self.captures_read_at(locs, text, start) + self.0.searcher().read_captures_at(locs, text, start) + .map(|(s, e)| Match::new(text, s, e)) } } @@ -670,19 +639,11 @@ impl Regex { self.0.capture_names().len() } - /// Returns an empty set of capture locations that can be reused in - /// multiple calls to `captures_read` or `captures_read_at`. - pub fn capture_locations(&self) -> CaptureLocations { - CaptureLocations(self.0.searcher().locations()) - } - - /// An alias for `capture_locations` to preserve backward compatibility. - /// - /// The `regex-capi` crate uses this method, so to avoid breaking that - /// crate, we continue to export it as an undocumented API. + /// Returns an empty set of locations that can be reused in multiple calls + /// to `read_captures`. #[doc(hidden)] - pub fn locations(&self) -> CaptureLocations { - CaptureLocations(self.0.searcher().locations()) + pub fn locations(&self) -> Locations { + self.0.searcher().locations() } } @@ -808,63 +769,6 @@ impl<'r> Iterator for CaptureNames<'r> { } } -/// CaptureLocations is a low level representation of the raw offsets of each -/// submatch. -/// -/// You can think of this as a lower level -/// [`Captures`](struct.Captures.html), where this type does not support -/// named capturing groups directly and it does not borrow the text that these -/// offsets were matched on. -/// -/// Primarily, this type is useful when using the lower level `Regex` APIs -/// such as `read_captures`, which permits amortizing the allocation in which -/// capture match locations are stored. -/// -/// In order to build a value of this type, you'll need to call the -/// `capture_locations` method on the `Regex` being used to execute the search. -/// The value returned can then be reused in subsequent searches. -#[derive(Clone, Debug)] -pub struct CaptureLocations(re_trait::Locations); - -/// A type alias for `CaptureLocations` for backwards compatibility. -/// -/// Previously, we exported `CaptureLocations` as `Locations` in an -/// undocumented API. To prevent breaking that code (e.g., in `regex-capi`), -/// we continue re-exporting the same undocumented API. -#[doc(hidden)] -pub type Locations = CaptureLocations; - -impl CaptureLocations { - /// Returns the start and end positions of the Nth capture group. Returns - /// `None` if `i` is not a valid capture group or if the capture group did - /// not match anything. The positions returned are *always* byte indices - /// with respect to the original string matched. - #[inline] - pub fn get(&self, i: usize) -> Option<(usize, usize)> { - self.0.pos(i) - } - - /// Returns the total number of capturing groups. - /// - /// This is always at least `1` since every regex has at least `1` - /// capturing group that corresponds to the entire match. - #[inline] - pub fn len(&self) -> usize { - self.0.len() - } - - /// An alias for the `get` method for backwards compatibility. - /// - /// Previously, we exported `get` as `pos` in an undocumented API. To - /// prevent breaking that code (e.g., in `regex-capi`), we continue - /// re-exporting the same undocumented API. - #[doc(hidden)] - #[inline] - pub fn pos(&self, i: usize) -> Option<(usize, usize)> { - self.get(i) - } -} - /// Captures represents a group of captured byte strings for a single match. /// /// The 0th capture always corresponds to the entire match. Each subsequent @@ -878,7 +782,7 @@ impl CaptureLocations { /// `'t` is the lifetime of the matched text. pub struct Captures<'t> { text: &'t [u8], - locs: re_trait::Locations, + locs: Locations, named_groups: Arc>, } diff --git a/third_party/rust/regex/src/re_set.rs b/third_party/rust/regex/src/re_set.rs index cfca0ea40595..66b01512ef39 100644 --- a/third_party/rust/regex/src/re_set.rs +++ b/third_party/rust/regex/src/re_set.rs @@ -295,10 +295,6 @@ impl Iterator for SetMatchesIntoIter { } } } - - fn size_hint(&self) -> (usize, Option) { - self.0.size_hint() - } } impl DoubleEndedIterator for SetMatchesIntoIter { @@ -335,10 +331,6 @@ impl<'a> Iterator for SetMatchesIter<'a> { } } } - - fn size_hint(&self) -> (usize, Option) { - self.0.size_hint() - } } impl<'a> DoubleEndedIterator for SetMatchesIter<'a> { diff --git a/third_party/rust/regex/src/re_trait.rs b/third_party/rust/regex/src/re_trait.rs index 81a64bb252ce..de674bd52874 100644 --- a/third_party/rust/regex/src/re_trait.rs +++ b/third_party/rust/regex/src/re_trait.rs @@ -18,7 +18,6 @@ pub type Slot = Option; /// /// Unlike `Captures`, a `Locations` value only stores offsets. #[doc(hidden)] -#[derive(Clone, Debug)] pub struct Locations(Vec); impl Locations { @@ -48,11 +47,12 @@ impl Locations { pub fn len(&self) -> usize { self.0.len() / 2 } +} - /// Return the individual slots as a slice. - pub(crate) fn as_slots(&mut self) -> &mut [Slot] { - &mut self.0 - } +/// This is a hack to make Locations -> &mut [Slot] be available internally +/// without exposing it in the public API. +pub fn as_slots(locs: &mut Locations) -> &mut [Slot] { + &mut locs.0 } /// An iterator over capture group positions for a particular match of a @@ -139,7 +139,7 @@ pub trait RegularExpression: Sized { /// Returns the leftmost-first match location if one exists, and also /// fills in any matching capture slot locations. - fn captures_read_at( + fn read_captures_at( &self, locs: &mut Locations, text: &Self::Text, @@ -246,7 +246,7 @@ impl<'t, R> Iterator for CaptureMatches<'t, R> return None } let mut locs = self.0.re.locations(); - let (s, e) = match self.0.re.captures_read_at( + let (s, e) = match self.0.re.read_captures_at( &mut locs, self.0.text, self.0.last_end, diff --git a/third_party/rust/regex/src/re_unicode.rs b/third_party/rust/regex/src/re_unicode.rs index fd6e73aa4b5c..fb78e56e4c28 100644 --- a/third_party/rust/regex/src/re_unicode.rs +++ b/third_party/rust/regex/src/re_unicode.rs @@ -22,7 +22,7 @@ use error::Error; use exec::{Exec, ExecNoSyncStr}; use expand::expand_str; use re_builder::unicode::RegexBuilder; -use re_trait::{self, RegularExpression, SubCapturesPosIter}; +use re_trait::{self, RegularExpression, Locations, SubCapturesPosIter}; /// Escapes all regular expression meta characters in `text`. /// @@ -289,8 +289,8 @@ impl Regex { /// .unwrap(); /// let text = "Not my favorite movie: 'Citizen Kane' (1941)."; /// let caps = re.captures(text).unwrap(); - /// assert_eq!(caps.name("title").unwrap().as_str(), "Citizen Kane"); - /// assert_eq!(caps.name("year").unwrap().as_str(), "1941"); + /// assert_eq!(&caps["title"], "Citizen Kane"); + /// assert_eq!(&caps["year"], "1941"); /// assert_eq!(caps.get(0).unwrap().as_str(), "'Citizen Kane' (1941)"); /// // You can also access the groups by name using the Index notation. /// // Note that this will panic on an invalid group name. @@ -309,10 +309,10 @@ impl Regex { /// The `0`th capture group is always unnamed, so it must always be /// accessed with `get(0)` or `[0]`. pub fn captures<'t>(&self, text: &'t str) -> Option> { - let mut locs = self.capture_locations(); - self.captures_read_at(&mut locs, text, 0).map(move |_| Captures { + let mut locs = self.locations(); + self.read_captures_at(&mut locs, text, 0).map(|_| Captures { text: text, - locs: locs.0, + locs: locs, named_groups: self.0.capture_name_idx().clone(), }) } @@ -624,6 +624,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn shortest_match_at( &self, text: &str, @@ -638,6 +639,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn is_match_at(&self, text: &str, start: usize) -> bool { self.shortest_match_at(text, start).is_some() } @@ -648,6 +650,7 @@ impl Regex { /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. + #[doc(hidden)] pub fn find_at<'t>( &self, text: &'t str, @@ -658,56 +661,24 @@ impl Regex { }) } - /// This is like `captures`, but uses - /// [`CaptureLocations`](struct.CaptureLocations.html) - /// instead of - /// [`Captures`](struct.Captures.html) in order to amortize allocations. - /// - /// To create a `CaptureLocations` value, use the - /// `Regex::capture_locations` method. - /// - /// This returns the overall match if this was successful, which is always - /// equivalence to the `0`th capture group. - pub fn captures_read<'t>( - &self, - locs: &mut CaptureLocations, - text: &'t str, - ) -> Option> { - self.captures_read_at(locs, text, 0) - } - /// Returns the same as captures, but starts the search at the given /// offset and populates the capture locations given. /// /// The significance of the starting point is that it takes the surrounding /// context into consideration. For example, the `\A` anchor can only /// match when `start == 0`. - pub fn captures_read_at<'t>( + #[doc(hidden)] + pub fn read_captures_at<'t>( &self, - locs: &mut CaptureLocations, + locs: &mut Locations, text: &'t str, start: usize, ) -> Option> { self.0 .searcher_str() - .captures_read_at(&mut locs.0, text, start) + .read_captures_at(locs, text, start) .map(|(s, e)| Match::new(text, s, e)) } - - /// An undocumented alias for `captures_read_at`. - /// - /// The `regex-capi` crate previously used this routine, so to avoid - /// breaking that crate, we continue to provide the name as an undocumented - /// alias. - #[doc(hidden)] - pub fn read_captures_at<'t>( - &self, - locs: &mut CaptureLocations, - text: &'t str, - start: usize, - ) -> Option> { - self.captures_read_at(locs, text, start) - } } /// Auxiliary methods. @@ -727,19 +698,11 @@ impl Regex { self.0.capture_names().len() } - /// Returns an empty set of capture locations that can be reused in - /// multiple calls to `captures_read` or `captures_read_at`. - pub fn capture_locations(&self) -> CaptureLocations { - CaptureLocations(self.0.searcher_str().locations()) - } - - /// An alias for `capture_locations` to preserve backward compatibility. - /// - /// The `regex-capi` crate uses this method, so to avoid breaking that - /// crate, we continue to export it as an undocumented API. + /// Returns an empty set of locations that can be reused in multiple calls + /// to `read_captures`. #[doc(hidden)] - pub fn locations(&self) -> CaptureLocations { - CaptureLocations(self.0.searcher_str().locations()) + pub fn locations(&self) -> Locations { + self.0.searcher_str().locations() } } @@ -827,63 +790,6 @@ impl<'r, 't> Iterator for SplitN<'r, 't> { } } -/// CaptureLocations is a low level representation of the raw offsets of each -/// submatch. -/// -/// You can think of this as a lower level -/// [`Captures`](struct.Captures.html), where this type does not support -/// named capturing groups directly and it does not borrow the text that these -/// offsets were matched on. -/// -/// Primarily, this type is useful when using the lower level `Regex` APIs -/// such as `read_captures`, which permits amortizing the allocation in which -/// capture match locations are stored. -/// -/// In order to build a value of this type, you'll need to call the -/// `capture_locations` method on the `Regex` being used to execute the search. -/// The value returned can then be reused in subsequent searches. -#[derive(Clone, Debug)] -pub struct CaptureLocations(re_trait::Locations); - -/// A type alias for `CaptureLocations` for backwards compatibility. -/// -/// Previously, we exported `CaptureLocations` as `Locations` in an -/// undocumented API. To prevent breaking that code (e.g., in `regex-capi`), -/// we continue re-exporting the same undocumented API. -#[doc(hidden)] -pub type Locations = CaptureLocations; - -impl CaptureLocations { - /// Returns the start and end positions of the Nth capture group. Returns - /// `None` if `i` is not a valid capture group or if the capture group did - /// not match anything. The positions returned are *always* byte indices - /// with respect to the original string matched. - #[inline] - pub fn get(&self, i: usize) -> Option<(usize, usize)> { - self.0.pos(i) - } - - /// Returns the total number of capturing groups. - /// - /// This is always at least `1` since every regex has at least `1` - /// capturing group that corresponds to the entire match. - #[inline] - pub fn len(&self) -> usize { - self.0.len() - } - - /// An alias for the `get` method for backwards compatibility. - /// - /// Previously, we exported `get` as `pos` in an undocumented API. To - /// prevent breaking that code (e.g., in `regex-capi`), we continue - /// re-exporting the same undocumented API. - #[doc(hidden)] - #[inline] - pub fn pos(&self, i: usize) -> Option<(usize, usize)> { - self.get(i) - } -} - /// Captures represents a group of captured strings for a single match. /// /// The 0th capture always corresponds to the entire match. Each subsequent @@ -897,7 +803,7 @@ impl CaptureLocations { /// `'t` is the lifetime of the matched text. pub struct Captures<'t> { text: &'t str, - locs: re_trait::Locations, + locs: Locations, named_groups: Arc>, } diff --git a/third_party/rust/regex/src/vector/mod.rs b/third_party/rust/regex/src/vector/mod.rs index 2956f56db0ec..880dbc187854 100644 --- a/third_party/rust/regex/src/vector/mod.rs +++ b/third_party/rust/regex/src/vector/mod.rs @@ -1,4 +1,4 @@ #[cfg(target_arch = "x86_64")] pub mod avx2; -#[cfg(any(target_arch = "x86_64"))] +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] pub mod ssse3; diff --git a/third_party/rust/regex/tests/consistent.rs b/third_party/rust/regex/tests/consistent.rs deleted file mode 100644 index b61050e4b1d4..000000000000 --- a/third_party/rust/regex/tests/consistent.rs +++ /dev/null @@ -1,213 +0,0 @@ -use regex::internal::ExecBuilder; - -/// Given a regex, check if all of the backends produce the same -/// results on a number of different inputs. -/// -/// For now this just throws quickcheck at the problem, which -/// is not very good because it only really tests half of the -/// problem space. It is pretty unlikely that a random string -/// will match any given regex, so this will probably just -/// be checking that the different backends fail in the same -/// way. This is still worthwhile to test, but is definitely not -/// the whole story. -/// -/// TODO(ethan): In order to cover the other half of the problem -/// space, we should generate a random matching string by inspecting -/// the AST of the input regex. The right way to do this probably -/// involves adding a custom Arbitrary instance around a couple -/// of newtypes. That way we can respect the quickcheck size hinting -/// and shrinking and whatnot. -pub fn backends_are_consistent(re: &str) -> Result { - let standard_backends = vec![ - ("bounded_backtracking_re", - ExecBuilder::new(re) - .bounded_backtracking() - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - - ("pikevm_re", - ExecBuilder::new(re) - .nfa() - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - - ("default_re", - ExecBuilder::new(re) - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - ]; - - let utf8bytes_backends = vec![ - ("bounded_backtracking_utf8bytes_re", - ExecBuilder::new(re) - .bounded_backtracking() - .bytes(true) - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - - ("pikevm_utf8bytes_re", - ExecBuilder::new(re) - .nfa() - .bytes(true) - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - - ("default_utf8bytes_re", - ExecBuilder::new(re) - .bytes(true) - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err))?), - ]; - - let bytes_backends = vec![ - ("bounded_backtracking_bytes_re", - ExecBuilder::new(re) - .bounded_backtracking() - .only_utf8(false) - .build() - .map(|exec| exec.into_byte_regex()) - .map_err(|err| format!("{}", err))?), - - ("pikevm_bytes_re", - ExecBuilder::new(re) - .nfa() - .only_utf8(false) - .build() - .map(|exec| exec.into_byte_regex()) - .map_err(|err| format!("{}", err))?), - - ("default_bytes_re", - ExecBuilder::new(re) - .only_utf8(false) - .build() - .map(|exec| exec.into_byte_regex()) - .map_err(|err| format!("{}", err))?), - ]; - - Ok(string_checker::check_backends(&standard_backends)? - + string_checker::check_backends(&utf8bytes_backends)? - + bytes_checker::check_backends(&bytes_backends)?) -} - -// -// A consistency checker parameterized by the input type (&str or &[u8]). -// - -macro_rules! checker { - ($module_name:ident, $regex_type:path, $mk_input:expr) => { - -mod $module_name { - use quickcheck; - use quickcheck::{TestResult, Arbitrary}; - - pub fn check_backends( - backends: &[(&str, $regex_type)] - ) -> Result { - let mut total_passed = 0; - for regex in backends[1..].iter() { - total_passed += quickcheck_regex_eq(&backends[0], regex)?; - } - - Ok(total_passed) - } - - fn quickcheck_regex_eq( - &(name1, ref re1): &(&str, $regex_type), - &(name2, ref re2): &(&str, $regex_type), - ) -> Result { - quickcheck::QuickCheck::new() - .quicktest(RegexEqualityTest::new(re1.clone(), re2.clone())) - .map_err(|err| - format!("{}(/{}/) and {}(/{}/) are inconsistent.\ - QuickCheck Err: {:?}", - name1, re1, name2, re2, err)) - } - - struct RegexEqualityTest { - re1: $regex_type, - re2: $regex_type, - } - impl RegexEqualityTest { - fn new(re1: $regex_type, re2: $regex_type) -> Self { - RegexEqualityTest { - re1: re1, - re2: re2, - } - } - } - - impl quickcheck::Testable for RegexEqualityTest { - fn result(&self, gen: &mut G) -> TestResult { - let input = $mk_input(gen); - let input = &input; - - if self.re1.find(&input) != self.re2.find(input) { - return TestResult::error( - format!("find mismatch input={:?}", input)); - } - - let cap1 = self.re1.captures(input); - let cap2 = self.re2.captures(input); - match (cap1, cap2) { - (None, None) => {} - (Some(cap1), Some(cap2)) => { - for (c1, c2) in cap1.iter().zip(cap2.iter()) { - if c1 != c2 { - return TestResult::error( - format!("captures mismatch input={:?}", input)); - } - } - } - _ => return TestResult::error( - format!("captures mismatch input={:?}", input)), - } - - let fi1 = self.re1.find_iter(input); - let fi2 = self.re2.find_iter(input); - for (m1, m2) in fi1.zip(fi2) { - if m1 != m2 { - return TestResult::error( - format!("find_iter mismatch input={:?}", input)); - } - } - - let ci1 = self.re1.captures_iter(input); - let ci2 = self.re2.captures_iter(input); - for (cap1, cap2) in ci1.zip(ci2) { - for (c1, c2) in cap1.iter().zip(cap2.iter()) { - if c1 != c2 { - return TestResult::error( - format!("captures_iter mismatch input={:?}", input)); - } - } - } - - let s1 = self.re1.split(input); - let s2 = self.re2.split(input); - for (chunk1, chunk2) in s1.zip(s2) { - if chunk1 != chunk2 { - return TestResult::error( - format!("split mismatch input={:?}", input)); - } - } - - TestResult::from_bool(true) - } - } - -} // mod -} // rule case -} // macro_rules! - -checker!(string_checker, - ::regex::Regex, - |gen| String::arbitrary(gen)); -checker!(bytes_checker, - ::regex::bytes::Regex, - |gen| Vec::::arbitrary(gen)); diff --git a/third_party/rust/regex/tests/crates_regex.rs b/third_party/rust/regex/tests/crates_regex.rs deleted file mode 100644 index 1ccfe471084b..000000000000 --- a/third_party/rust/regex/tests/crates_regex.rs +++ /dev/null @@ -1,3129 +0,0 @@ -// Copyright 2018 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// DO NOT EDIT. Automatically generated by 'scripts/scrape_crates_io.py' -// on 2018-06-20 09:56:32.820354. - - - -// autoshutdown-0.1.0: r"\s*(\d+)(\w)\s*" -consistent!(autoshutdown_0, r"\s*(\d+)(\w)\s*"); - -// epub-1.1.1: r"/" -consistent!(epub_0, r"/"); - -// rpi-info-0.2.0: "^Revision\t+: ([0-9a-fA-F]+)" -consistent!(rpi_info_0, "^Revision\t+: ([0-9a-fA-F]+)"); - -// rpi-info-0.2.0: "Serial\t+: ([0-9a-fA-F]+)" -consistent!(rpi_info_1, "Serial\t+: ([0-9a-fA-F]+)"); - -// pnet_macros-0.21.0: r"^u([0-9]+)(be|le|he)?$" -consistent!(pnet_macros_0, r"^u([0-9]+)(be|le|he)?$"); - -// iban_validate-1.0.3: r"^[A-Z]{2}\d{2}[A-Z\d]{1,30}$" -consistent!(iban_validate_0, r"^[A-Z]{2}\d{2}[A-Z\d]{1,30}$"); - -// markifier-0.1.0: r".*\[(?P.+)%.*\].*" -consistent!(markifier_0, r".*\[(?P.+)%.*\].*"); - -// mallumo-0.3.0: r"(#include) (\S*)(.*)" -consistent!(mallumo_0, r"(#include) (\S*)(.*)"); - -// mallumo-0.3.0: r"(ERROR: \d+:)(\d+)(: )(.+)" -consistent!(mallumo_1, r"(ERROR: \d+:)(\d+)(: )(.+)"); - -// mallumo-0.3.0: r"(\d+\()(\d+)(?:\) : )(.+)" -consistent!(mallumo_2, r"(\d+\()(\d+)(?:\) : )(.+)"); - -// magnet_more-0.0.1: r"(.+?)(\[.*?\])?" -consistent!(magnet_more_0, r"(.+?)(\[.*?\])?"); - -// magnet_app-0.0.1: r":(?P[a-zA-Z_]+)" -consistent!(magnet_app_0, r":(?P[a-zA-Z_]+)"); - -// yubibomb-0.2.0: r"^\d{6}(?:\s*,\s*\d{6})*$" -consistent!(yubibomb_0, r"^\d{6}(?:\s*,\s*\d{6})*$"); - -// multirust-rs-0.0.4: r"[\\/]([^\\/?]+)(\?.*)?$" -consistent!(multirust_rs_0, r"[\\/]([^\\/?]+)(\?.*)?$"); - -// hueclient-0.3.2: "\"[a-z]*\":null" -consistent!(hueclient_0, "\"[a-z]*\":null"); - -// hueclient-0.3.2: ",+" -consistent!(hueclient_1, ",+"); - -// hueclient-0.3.2: ",\\}" -consistent!(hueclient_2, ",\\}"); - -// hueclient-0.3.2: "\\{," -consistent!(hueclient_3, "\\{,"); - -// aerial-0.1.0: r"[a-zA-Z_\$][a-zA-Z_0-9]*" -consistent!(aerial_0, r"[a-zA-Z_\$][a-zA-Z_0-9]*"); - -// aerial-0.1.0: r"thi[sng]+" -consistent!(aerial_1, r"thi[sng]+"); - -// rvue-0.1.0: r"(.+)\s+\((.+?)\)" -consistent!(rvue_0, r"(.+)\s+\((.+?)\)"); - -// rvue-0.1.0: r"([\d\.]+)\s*out\s*of\s*([\d\.]+)" -consistent!(rvue_1, r"([\d\.]+)\s*out\s*of\s*([\d\.]+)"); - -// rvue-0.1.0: r"^([\d\.]+)\s*(?:\(\))?$" -consistent!(rvue_2, r"^([\d\.]+)\s*(?:\(\))?$"); - -// rvue-0.1.0: r"([\d\.]+)\s*Points\s*Possible" -consistent!(rvue_3, r"([\d\.]+)\s*Points\s*Possible"); - -// rvue-0.1.0: r"([\d\.]+)\s*/\s*([\d\.]+)" -consistent!(rvue_4, r"([\d\.]+)\s*/\s*([\d\.]+)"); - -// rvsim-0.1.0: r"_?([_a-z0-9]+)\s*:\s*([_a-z0-9]+)\s*[,)]" -consistent!(rvsim_0, r"_?([_a-z0-9]+)\s*:\s*([_a-z0-9]+)\s*[,)]"); - -// nereon-0.1.4: "(.*[^\\\\])\\{\\}(.*)" -consistent!(nereon_0, "(.*[^\\\\])\\{\\}(.*)"); - -// next_episode-0.3.0: r"((?i)^(.+).s(\d+)e(\d+).*)$" -consistent!(next_episode_0, r"((?i)^(.+).s(\d+)e(\d+).*)$"); - -// migrant_lib-0.19.2: r"[^a-z0-9-]+" -consistent!(migrant_lib_0, r"[^a-z0-9-]+"); - -// migrant_lib-0.19.2: r"[0-9]{14}_[a-z0-9-]+" -consistent!(migrant_lib_1, r"[0-9]{14}_[a-z0-9-]+"); - -// migrant_lib-0.19.2: r"([0-9]{14}_)?[a-z0-9-]+" -consistent!(migrant_lib_2, r"([0-9]{14}_)?[a-z0-9-]+"); - -// minipre-0.2.0: "$_" -consistent!(minipre_0, "$_"); - -// minifier-0.0.13: r">\s+<" -consistent!(minifier_0, r">\s+<"); - -// minifier-0.0.13: r"\s{2,}|[\r\n]" -consistent!(minifier_1, r"\s{2,}|[\r\n]"); - -// minifier-0.0.13: r"<(style|script)[\w|\s].*?>" -consistent!(minifier_2, r"<(style|script)[\w|\s].*?>"); - -// minifier-0.0.13: "" -consistent!(minifier_3, ""); - -// minifier-0.0.13: r"<\w.*?>" -consistent!(minifier_4, r"<\w.*?>"); - -// minifier-0.0.13: r" \s+|\s +" -consistent!(minifier_5, r" \s+|\s +"); - -// minifier-0.0.13: r"\w\s+\w" -consistent!(minifier_6, r"\w\s+\w"); - -// minifier-0.0.13: r"'\s+>" -consistent!(minifier_7, r"'\s+>"); - -// minifier-0.0.13: r"\d\s+>" -consistent!(minifier_8, r"\d\s+>"); - -// ggp-rs-0.1.2: r"(?P\([^)]+\))|(?P[a-zA-Z0-9_]+)" -consistent!(ggp_rs_0, r"(?P\([^)]+\))|(?P[a-zA-Z0-9_]+)"); - -// ggp-rs-0.1.2: r"\((.*)\)." -consistent!(ggp_rs_1, r"\((.*)\)."); - -// poe-superfilter-0.2.0: "[A-Za-z0-9_]" -consistent!(poe_superfilter_0, "[A-Za-z0-9_]"); - -// poke-a-mango-0.5.0: r"(\d+)x(\d+)" -consistent!(poke_a_mango_0, r"(\d+)x(\d+)"); - -// pop3-rs-0.1.0: r"(?P\d+) (?P\d+)" -consistent!(pop3_rs_0, r"(?P\d+) (?P\d+)"); - -// pop3-rs-0.1.0: r"(?P\d+) (?P[\x21-\x7E]{1,70})" -consistent!(pop3_rs_1, r"(?P\d+) (?P[\x21-\x7E]{1,70})"); - -// pop3-rs-0.1.0: r"(<.*>)\r\n$" -consistent!(pop3_rs_2, r"(<.*>)\r\n$"); - -// pop3-rs-0.1.0: r"^(?P\+OK|-ERR) (?P.*)" -consistent!(pop3_rs_3, r"^(?P\+OK|-ERR) (?P.*)"); - -// pop3-1.0.6: r"^\.\r\n$" -consistent!(pop3_0, r"^\.\r\n$"); - -// pop3-1.0.6: r"\+OK(.*)" -consistent!(pop3_1, r"\+OK(.*)"); - -// pop3-1.0.6: r"-ERR(.*)" -consistent!(pop3_2, r"-ERR(.*)"); - -// pop3-1.0.6: r"\+OK (\d+) (\d+)\r\n" -consistent!(pop3_3, r"\+OK (\d+) (\d+)\r\n"); - -// pop3-1.0.6: r"(\d+) ([\x21-\x7e]+)\r\n" -consistent!(pop3_4, r"(\d+) ([\x21-\x7e]+)\r\n"); - -// pop3-1.0.6: r"\+OK (\d+) ([\x21-\x7e]+)\r\n" -consistent!(pop3_5, r"\+OK (\d+) ([\x21-\x7e]+)\r\n"); - -// pop3-1.0.6: r"(\d+) (\d+)\r\n" -consistent!(pop3_6, r"(\d+) (\d+)\r\n"); - -// pop3-1.0.6: r"\+OK (\d+) (\d+)\r\n" -consistent!(pop3_7, r"\+OK (\d+) (\d+)\r\n"); - -// polk-1.1.3: "github:(\\w+)/?(\\w+)?" -consistent!(polk_0, "github:(\\w+)/?(\\w+)?"); - -// geochunk-0.1.5: "^[0-9]{5}" -consistent!(geochunk_0, "^[0-9]{5}"); - -// generic-dns-update-1.1.4: r"((?:(?:0|1[\d]{0,2}|2(?:[0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?)\.){3}(?:0|1[\d]{0,2}|2(?:[0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?))" -consistent!(generic_dns_update_0, r"((?:(?:0|1[\d]{0,2}|2(?:[0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?)\.){3}(?:0|1[\d]{0,2}|2(?:[0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?))"); - -// generic-dns-update-1.1.4: r"((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|(([0-9A-Fa-f]{1,4}:){0,5}:((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|(::([0-9A-Fa-f]{1,4}:){0,5}((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))" -consistent!(generic_dns_update_1, r"((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|(([0-9A-Fa-f]{1,4}:){0,5}:((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|(::([0-9A-Fa-f]{1,4}:){0,5}((\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d)\.){3}(\d((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\d))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))"); - -// generic-dns-update-1.1.4: r"([0-9.]*)" -consistent!(generic_dns_update_2, r"([0-9.]*)"); - -// generic-dns-update-1.1.4: r"([0-9]+)" -consistent!(generic_dns_update_3, r"([0-9]+)"); - -// generic-dns-update-1.1.4: r"([0-9]+)" -consistent!(generic_dns_update_4, r"([0-9]+)"); - -// generic-dns-update-1.1.4: r"([0-1]*)" -consistent!(generic_dns_update_5, r"([0-1]*)"); - -// generate-nix-pkg-0.3.0: r"(\d*)\.(\d*)\.(\d*)(-(\S*))?" -consistent!(generate_nix_pkg_0, r"(\d*)\.(\d*)\.(\d*)(-(\S*))?"); - -// generate-nix-pkg-0.3.0: r"^(\S*) (\d*)\.(\d*)\.(\d*)(-(\S*))?" -consistent!(generate_nix_pkg_1, r"^(\S*) (\d*)\.(\d*)\.(\d*)(-(\S*))?"); - -// genact-0.6.0: r"arch/([a-z0-9_])+/" -consistent!(genact_0, r"arch/([a-z0-9_])+/"); - -// genact-0.6.0: r"arch/([a-z0-9_])+/" -consistent!(genact_1, r"arch/([a-z0-9_])+/"); - -// cron_rs-0.1.6: r"^\s*((\*(/\d+)?)|[0-9-,/]+)(\s+((\*(/\d+)?)|[0-9-,/]+)){4,5}\s*$" -consistent!(cron_rs_0, r"^\s*((\*(/\d+)?)|[0-9-,/]+)(\s+((\*(/\d+)?)|[0-9-,/]+)){4,5}\s*$"); - -// systemfd-0.3.0: r"^([a-zA-Z]+)::(.+)$" -consistent!(systemfd_0, r"^([a-zA-Z]+)::(.+)$"); - -// symbolic-debuginfo-5.0.2: "__?hidden#\\d+_" -consistent!(symbolic_debuginfo_0, "__?hidden#\\d+_"); - -// symbolic-minidump-5.0.2: r"^Linux ([^ ]+) (.*) \w+(?: GNU/Linux)?$" -consistent!(symbolic_minidump_0, r"^Linux ([^ ]+) (.*) \w+(?: GNU/Linux)?$"); - -// graphql-idl-parser-0.1.1: "^(?u:\\#)(?u:[\t-\r - \u{85}-\u{85}\u{a0}-\u{a0}\u{1680}-\u{1680}\u{2000}-\u{200a}\u{2028}-\u{2029}\u{202f}-\u{202f}\u{205f}-\u{205f}\u{3000}-\u{3000}])*(?u:.)+" -consistent!(graphql_idl_parser_0, "^(?u:\\#)(?u:[\t-\r - \u{85}-\u{85}\u{a0}-\u{a0}\u{1680}-\u{1680}\u{2000}-\u{200a}\u{2028}-\u{2029}\u{202f}-\u{202f}\u{205f}-\u{205f}\u{3000}-\u{3000}])*(?u:.)+"); - -// graphql-idl-parser-0.1.1: "^(?u:=)(?u:[\t-\r - \u{85}-\u{85}\u{a0}-\u{a0}\u{1680}-\u{1680}\u{2000}-\u{200a}\u{2028}-\u{2029}\u{202f}-\u{202f}\u{205f}-\u{205f}\u{3000}-\u{3000}])*(?u:.)+" -consistent!(graphql_idl_parser_1, "^(?u:=)(?u:[\t-\r - \u{85}-\u{85}\u{a0}-\u{a0}\u{1680}-\u{1680}\u{2000}-\u{200a}\u{2028}-\u{2029}\u{202f}-\u{202f}\u{205f}-\u{205f}\u{3000}-\u{3000}])*(?u:.)+"); - -// graphql-idl-parser-0.1.1: "^(?u:[A-Z_-_a-z])(?u:[0-9A-Z_-_a-z])*" -consistent!(graphql_idl_parser_2, "^(?u:[A-Z_-_a-z])(?u:[0-9A-Z_-_a-z])*"); - -// graphql-idl-parser-0.1.1: "^(?u:!)" -consistent!(graphql_idl_parser_3, "^(?u:!)"); - -// graphql-idl-parser-0.1.1: "^(?u:\\()" -consistent!(graphql_idl_parser_4, "^(?u:\\()"); - -// graphql-idl-parser-0.1.1: "^(?u:\\))" -consistent!(graphql_idl_parser_5, "^(?u:\\))"); - -// graphql-idl-parser-0.1.1: "^(?u:,)" -consistent!(graphql_idl_parser_6, "^(?u:,)"); - -// graphql-idl-parser-0.1.1: "^(?u::)" -consistent!(graphql_idl_parser_7, "^(?u::)"); - -// graphql-idl-parser-0.1.1: "^(?u:@)" -consistent!(graphql_idl_parser_8, "^(?u:@)"); - -// graphql-idl-parser-0.1.1: "^(?u:\\[)" -consistent!(graphql_idl_parser_9, "^(?u:\\[)"); - -// graphql-idl-parser-0.1.1: "^(?u:\\])" -consistent!(graphql_idl_parser_10, "^(?u:\\])"); - -// graphql-idl-parser-0.1.1: "^(?u:enum)" -consistent!(graphql_idl_parser_11, "^(?u:enum)"); - -// graphql-idl-parser-0.1.1: "^(?u:implements)" -consistent!(graphql_idl_parser_12, "^(?u:implements)"); - -// graphql-idl-parser-0.1.1: "^(?u:input)" -consistent!(graphql_idl_parser_13, "^(?u:input)"); - -// graphql-idl-parser-0.1.1: "^(?u:interface)" -consistent!(graphql_idl_parser_14, "^(?u:interface)"); - -// graphql-idl-parser-0.1.1: "^(?u:scalar)" -consistent!(graphql_idl_parser_15, "^(?u:scalar)"); - -// graphql-idl-parser-0.1.1: "^(?u:type)" -consistent!(graphql_idl_parser_16, "^(?u:type)"); - -// graphql-idl-parser-0.1.1: "^(?u:union)" -consistent!(graphql_idl_parser_17, "^(?u:union)"); - -// graphql-idl-parser-0.1.1: "^(?u:\\{)" -consistent!(graphql_idl_parser_18, "^(?u:\\{)"); - -// graphql-idl-parser-0.1.1: "^(?u:\\})" -consistent!(graphql_idl_parser_19, "^(?u:\\})"); - -// grimoire-0.1.0: r"(?s)/\*(?P.*?)\*/" -consistent!(grimoire_0, r"(?s)/\*(?P.*?)\*/"); - -// phonenumber-0.2.0+8.9.0: r"[\d]+(?:[~\x{2053}\x{223C}\x{FF5E}][\d]+)?" -consistent!(phonenumber_0, r"[\d]+(?:[~\x{2053}\x{223C}\x{FF5E}][\d]+)?"); - -// phonenumber-0.2.0+8.9.0: r"[, \[\]]" -consistent!(phonenumber_1, r"[, \[\]]"); - -// phonenumber-0.2.0+8.9.0: r"[\\/] *x" -consistent!(phonenumber_2, r"[\\/] *x"); - -// phonenumber-0.2.0+8.9.0: r"[[\P{N}&&\P{L}]&&[^#]]+$" -consistent!(phonenumber_3, r"[[\P{N}&&\P{L}]&&[^#]]+$"); - -// phonenumber-0.2.0+8.9.0: r"(?:.*?[A-Za-z]){3}.*" -consistent!(phonenumber_4, r"(?:.*?[A-Za-z]){3}.*"); - -// phonenumber-0.2.0+8.9.0: r"(\D+)" -consistent!(phonenumber_5, r"(\D+)"); - -// phonenumber-0.2.0+8.9.0: r"(\$\d)" -consistent!(phonenumber_6, r"(\$\d)"); - -// phonenumber-0.2.0+8.9.0: r"\(?\$1\)?" -consistent!(phonenumber_7, r"\(?\$1\)?"); - -// phone_number-0.1.0: r"\D" -consistent!(phone_number_0, r"\D"); - -// phone_number-0.1.0: r"^0+" -consistent!(phone_number_1, r"^0+"); - -// phone_number-0.1.0: r"^89" -consistent!(phone_number_2, r"^89"); - -// phone_number-0.1.0: r"^8+" -consistent!(phone_number_3, r"^8+"); - -// phile-0.1.4: r"^ *(\^_*\^) *$" -consistent!(phile_0, r"^ *(\^_*\^) *$"); - -// phile-0.1.4: r"^[_\p{XID_Start}]$" -consistent!(phile_1, r"^[_\p{XID_Start}]$"); - -// phile-0.1.4: r"^\p{XID_Continue}$" -consistent!(phile_2, r"^\p{XID_Continue}$"); - -// uritemplate-0.1.2: "%25(?P[0-9a-fA-F][0-9a-fA-F])" -consistent!(uritemplate_0, "%25(?P[0-9a-fA-F][0-9a-fA-F])"); - -// urdf-rs-0.4.2: "^package://(\\w+)/" -consistent!(urdf_rs_0, "^package://(\\w+)/"); - -// url-match-0.1.7: r"(?P[?&.])" -consistent!(url_match_0, r"(?P[?&.])"); - -// url-match-0.1.7: r":(?P[a-zA-Z0-9_-]+)" -consistent!(url_match_1, r":(?P[a-zA-Z0-9_-]+)"); - -// tsm-sys-0.1.0: r"hello world" -consistent!(tsm_sys_0, r"hello world"); - -// deb-version-0.1.0: "^(?:(?:(?:\\d+:).+)|(?:[^:]+))$" -consistent!(deb_version_0, "^(?:(?:(?:\\d+:).+)|(?:[^:]+))$"); - -// debcargo-2.1.0: r"^(?i)(a|an|the)\s+" -consistent!(debcargo_0, r"^(?i)(a|an|the)\s+"); - -// debcargo-2.1.0: r"^(?i)(rust\s+)?(implementation|library|tool|crate)\s+(of|to|for)\s+" -consistent!(debcargo_1, r"^(?i)(rust\s+)?(implementation|library|tool|crate)\s+(of|to|for)\s+"); - -// feaders-0.2.0: r"^.*\.h$" -consistent!(feaders_0, r"^.*\.h$"); - -// feaders-0.2.0: r"^.*\.c$" -consistent!(feaders_1, r"^.*\.c$"); - -// feaders-0.2.0: r"^.*\.hpp$" -consistent!(feaders_2, r"^.*\.hpp$"); - -// feaders-0.2.0: r"^.*\.cc$" -consistent!(feaders_3, r"^.*\.cc$"); - -// feaders-0.2.0: r"^.*\.cpp$" -consistent!(feaders_4, r"^.*\.cpp$"); - -// hyperscan-0.1.6: r"CPtr\(\w+\)" -consistent!(hyperscan_0, r"CPtr\(\w+\)"); - -// hyperscan-0.1.6: r"^Version:\s(\d\.\d\.\d)\sFeatures:\s+(\w+)?\sMode:\s(\w+)$" -consistent!(hyperscan_1, r"^Version:\s(\d\.\d\.\d)\sFeatures:\s+(\w+)?\sMode:\s(\w+)$"); - -// hyperscan-0.1.6: r"RawDatabase\{db: \w+\}" -consistent!(hyperscan_2, r"RawDatabase\{db: \w+\}"); - -// hyperscan-0.1.6: r"RawSerializedDatabase\{p: \w+, len: \d+\}" -consistent!(hyperscan_3, r"RawSerializedDatabase\{p: \w+, len: \d+\}"); - -// ucd-parse-0.1.1: r"[0-9A-F]+" -consistent!(ucd_parse_0, r"[0-9A-F]+"); - -// afsort-0.2.0: r".*" -consistent!(afsort_0, r".*"); - -// afsort-0.2.0: r".*" -consistent!(afsort_1, r".*"); - -// afsort-0.2.0: r".*" -consistent!(afsort_2, r".*"); - -// afsort-0.2.0: r".*" -consistent!(afsort_3, r".*"); - -// afsort-0.2.0: r".*" -consistent!(afsort_4, r".*"); - -// afsort-0.2.0: r".*" -consistent!(afsort_5, r".*"); - -// afsort-0.2.0: r"^[a-z]+$" -consistent!(afsort_6, r"^[a-z]+$"); - -// afsort-0.2.0: r"^[a-z]+$" -consistent!(afsort_7, r"^[a-z]+$"); - -// tin-summer-1.21.4: r"(\.git|\.pijul|_darcs|\.hg)$" -consistent!(tin_summer_0, r"(\.git|\.pijul|_darcs|\.hg)$"); - -// tin-drummer-1.0.1: r".*?\.(a|la|lo|o|ll|keter|bc|dyn_o|d|rlib|crate|min\.js|hi|dyn_hi|S|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$" -consistent!(tin_drummer_0, r".*?\.(a|la|lo|o|ll|keter|bc|dyn_o|d|rlib|crate|min\.js|hi|dyn_hi|S|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$"); - -// tin-drummer-1.0.1: r".*?\.(stats|conf|h|out|cache.*|dat|pc|info|\.js)$" -consistent!(tin_drummer_1, r".*?\.(stats|conf|h|out|cache.*|dat|pc|info|\.js)$"); - -// tin-drummer-1.0.1: r".*?\.(exe|a|la|o|ll|keter|bc|dyn_o|d|rlib|crate|min\.js|hi|dyn_hi|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$" -consistent!(tin_drummer_2, r".*?\.(exe|a|la|o|ll|keter|bc|dyn_o|d|rlib|crate|min\.js|hi|dyn_hi|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$"); - -// tin-drummer-1.0.1: r".*?\.(stats|conf|h|out|cache.*|\.js)$" -consistent!(tin_drummer_3, r".*?\.(stats|conf|h|out|cache.*|\.js)$"); - -// tin-drummer-1.0.1: r"(\.git|\.pijul|_darcs|\.hg)$" -consistent!(tin_drummer_4, r"(\.git|\.pijul|_darcs|\.hg)$"); - -// tin-drummer-1.0.1: r".*?\.(dyn_o|out|d|hi|dyn_hi|dump-.*|p_hi|p_o|prof|tix)$" -consistent!(tin_drummer_5, r".*?\.(dyn_o|out|d|hi|dyn_hi|dump-.*|p_hi|p_o|prof|tix)$"); - -// tin-drummer-1.0.1: r".*?\.(ibc)$" -consistent!(tin_drummer_6, r".*?\.(ibc)$"); - -// tin-drummer-1.0.1: r"\.stack-work|dist-newstyle" -consistent!(tin_drummer_7, r"\.stack-work|dist-newstyle"); - -// timmy-0.3.0: r"_NET_WM_PID\(CARDINAL\) = (\d+)" -consistent!(timmy_0, r"_NET_WM_PID\(CARDINAL\) = (\d+)"); - -// timmy-0.3.0: r"today|yesterday|now" -consistent!(timmy_1, r"today|yesterday|now"); - -// timmy-0.3.0: r"(?P\d{1,2})/(?P\d{1,2})(/(?P\d{4}|\d{2}))?" -consistent!(timmy_2, r"(?P\d{1,2})/(?P\d{1,2})(/(?P\d{4}|\d{2}))?"); - -// timmy-0.3.0: r"(?P\d+) (days?|ds?)(?P( ago)?)" -consistent!(timmy_3, r"(?P\d+) (days?|ds?)(?P( ago)?)"); - -// timmy-0.3.0: r"(?P


\d{2}):(?P\d{2})" -consistent!(timmy_4, r"(?P
\d{2}):(?P\d{2})"); - -// tinfo-0.5.0: r"^(\d+): \d+ windows \(.*\) \[\d+x\d+\]( \(attached\))?" -consistent!(tinfo_0, r"^(\d+): \d+ windows \(.*\) \[\d+x\d+\]( \(attached\))?"); - -// tinfo-0.5.0: r"^(\d+):(\d+): (.*) \((\d+) panes\) \[(\d+)x(\d+)\]" -consistent!(tinfo_1, r"^(\d+):(\d+): (.*) \((\d+) panes\) \[(\d+)x(\d+)\]"); - -// timespan-0.0.4: r"(?:\\\{start\\\}|\\\{end\\\})" -consistent!(timespan_0, r"(?:\\\{start\\\}|\\\{end\\\})"); - -// timespan-0.0.4: r"(.*)\s+-\s+(.*)" -consistent!(timespan_1, r"(.*)\s+-\s+(.*)"); - -// timespan-0.0.4: r"(.*)\s+(\w+)$" -consistent!(timespan_2, r"(.*)\s+(\w+)$"); - -// timespan-0.0.4: r"(.*)\s+(\w+)$" -consistent!(timespan_3, r"(.*)\s+(\w+)$"); - -// timespan-0.0.4: r"(.*)\s+-\s+(.*)" -consistent!(timespan_4, r"(.*)\s+-\s+(.*)"); - -// titlecase-0.10.0: r"[[:lower:]]" -consistent!(titlecase_0, r"[[:lower:]]"); - -// tight-0.1.3: r"^\d+ (day|week|month|year)s?$" -consistent!(tight_0, r"^\d+ (day|week|month|year)s?$"); - -// tight-0.1.3: r"^\d+ (day|week|month|year)s?$" -consistent!(tight_1, r"^\d+ (day|week|month|year)s?$"); - -// yaml-0.2.1: r"^[-+]?(0|[1-9][0-9_]*)$" -consistent!(yaml_0, r"^[-+]?(0|[1-9][0-9_]*)$"); - -// yaml-0.2.1: r"^([-+]?)0o?([0-7_]+)$" -consistent!(yaml_1, r"^([-+]?)0o?([0-7_]+)$"); - -// yaml-0.2.1: r"^([-+]?)0x([0-9a-fA-F_]+)$" -consistent!(yaml_2, r"^([-+]?)0x([0-9a-fA-F_]+)$"); - -// yaml-0.2.1: r"^([-+]?)0b([0-1_]+)$" -consistent!(yaml_3, r"^([-+]?)0b([0-1_]+)$"); - -// yaml-0.2.1: r"^([-+]?)(\.[0-9]+|[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?)$" -consistent!(yaml_4, r"^([-+]?)(\.[0-9]+|[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?)$"); - -// yaml-0.2.1: r"^[+]?(\.inf|\.Inf|\.INF)$" -consistent!(yaml_5, r"^[+]?(\.inf|\.Inf|\.INF)$"); - -// yaml-0.2.1: r"^-(\.inf|\.Inf|\.INF)$" -consistent!(yaml_6, r"^-(\.inf|\.Inf|\.INF)$"); - -// yaml-0.2.1: r"^(\.nan|\.NaN|\.NAN)$" -consistent!(yaml_7, r"^(\.nan|\.NaN|\.NAN)$"); - -// yaml-0.2.1: r"^(null|Null|NULL|~)$" -consistent!(yaml_8, r"^(null|Null|NULL|~)$"); - -// yaml-0.2.1: r"^(true|True|TRUE|yes|Yes|YES)$" -consistent!(yaml_9, r"^(true|True|TRUE|yes|Yes|YES)$"); - -// yaml-0.2.1: r"^(false|False|FALSE|no|No|NO)$" -consistent!(yaml_10, r"^(false|False|FALSE|no|No|NO)$"); - -// kefia-0.1.0: r"(?m)^(\S+)/(\S+) (\S+)(?: \((.*)\))?$" -consistent!(kefia_0, r"(?m)^(\S+)/(\S+) (\S+)(?: \((.*)\))?$"); - -// risp-0.7.0: "^(\\s+|;.*?(\n|$))+" -consistent!(risp_0, "^(\\s+|;.*?(\n|$))+"); - -// risp-0.7.0: "^\".*?\"" -consistent!(risp_1, "^\".*?\""); - -// risp-0.7.0: r"^[^\s\{\}()\[\]]+" -consistent!(risp_2, r"^[^\s\{\}()\[\]]+"); - -// risp-0.7.0: r"^-?\d+" -consistent!(risp_3, r"^-?\d+"); - -// ripgrep-0.8.1: "^([0-9]+)([KMG])?$" -consistent!(ripgrep_0, "^([0-9]+)([KMG])?$"); - -// riquid-0.0.1: r"^\w+" -consistent!(riquid_0, r"^\w+"); - -// riquid-0.0.1: r"^\d+" -consistent!(riquid_1, r"^\d+"); - -// recursive_disassembler-2.1.2: r"\A(0x)?([a-fA-F0-9]+)\z" -consistent!(recursive_disassembler_0, r"\A(0x)?([a-fA-F0-9]+)\z"); - -// remake-0.1.0: r"^[a-zA-Z_][a-zA-Z0-9_]*" -consistent!(remake_0, r"^[a-zA-Z_][a-zA-Z0-9_]*"); - -// regex-decode-0.1.0: r"'(?P[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_0, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_1, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_2, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_3, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_4, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_5, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{2})\)" -consistent!(regex_decode_6, r"'(?P<title>[^']+)'\s+\((?P<year>\d{2})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_7, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)" -consistent!(regex_decode_8, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)" -consistent!(regex_decode_9, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)" -consistent!(regex_decode_10, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)" -consistent!(regex_decode_11, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)" -consistent!(regex_decode_12, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)"); - -// regex-decode-0.1.0: r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)" -consistent!(regex_decode_13, r"'(?P<title>[^']+)'\s+\((?P<year>\d{4})?\)"); - -// regex-cache-0.2.0: "[0-9]{3}-[0-9]{3}-[0-9]{4}" -consistent!(regex_cache_0, "[0-9]{3}-[0-9]{3}-[0-9]{4}"); - -// regex-cache-0.2.0: r"^\d+$" -consistent!(regex_cache_1, r"^\d+$"); - -// regex-cache-0.2.0: r"^[a-z]+$" -consistent!(regex_cache_2, r"^[a-z]+$"); - -// regex-cache-0.2.0: r"^\d+$" -consistent!(regex_cache_3, r"^\d+$"); - -// regex-cache-0.2.0: r"^\d+$" -consistent!(regex_cache_4, r"^\d+$"); - -// regex_dfa-0.5.0: r"\d{4}-\d{2}-\d{2}" -consistent!(regex_dfa_0, r"\d{4}-\d{2}-\d{2}"); - -// reaper-2.0.0: r"^[0-9\p{L} _\\.]{3,16}$" -consistent!(reaper_0, r"^[0-9\p{L} _\\.]{3,16}$"); - -// retdec-0.1.0: r"^attachment; filename=(.+)$" -consistent!(retdec_0, r"^attachment; filename=(.+)$"); - -// renvsubst-0.1.2: r"(\\)(?P<head>\$[0-9A-Za-z_{])" -consistent!(renvsubst_0, r"(\\)(?P<head>\$[0-9A-Za-z_{])"); - -// renvsubst-0.1.2: r"\$([[:word:]]+)" -consistent!(renvsubst_1, r"\$([[:word:]]+)"); - -// renvsubst-0.1.2: r"\$\{([[:word:]]+)\}" -consistent!(renvsubst_2, r"\$\{([[:word:]]+)\}"); - -// rexpect-0.3.0: r"'[a-z]+'" -consistent!(rexpect_0, r"'[a-z]+'"); - -// rexpect-0.3.0: r"^\d{4}-\d{2}-\d{2}$" -consistent!(rexpect_1, r"^\d{4}-\d{2}-\d{2}$"); - -// rexpect-0.3.0: r"-\d{2}-" -consistent!(rexpect_2, r"-\d{2}-"); - -// luther-0.1.0: "^a(b|c)c*$" -consistent!(luther_0, "^a(b|c)c*$"); - -// little_boxes-1.6.0: r"(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]" -consistent!(little_boxes_0, r"(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]"); - -// libimagentrytag-0.8.0: "^[a-zA-Z]([a-zA-Z0-9_-]*)$" -consistent!(libimagentrytag_0, "^[a-zA-Z]([a-zA-Z0-9_-]*)$"); - -// libimaginteraction-0.8.0: r"^[Yy](\n?)$" -consistent!(libimaginteraction_0, r"^[Yy](\n?)$"); - -// libimaginteraction-0.8.0: r"^[Nn](\n?)$" -consistent!(libimaginteraction_1, r"^[Nn](\n?)$"); - -// libimagutil-0.8.0: "^(?P<KEY>([^=]*))=(.*)$" -consistent!(libimagutil_0, "^(?P<KEY>([^=]*))=(.*)$"); - -// libimagutil-0.8.0: "(.*)=(\"(?P<QVALUE>([^\"]*))\"|(?P<VALUE>(.*)))$" -consistent!(libimagutil_1, "(.*)=(\"(?P<QVALUE>([^\"]*))\"|(?P<VALUE>(.*)))$"); - -// linux_ip-0.1.0: r"\s+" -consistent!(linux_ip_0, r"\s+"); - -// linux_ip-0.1.0: r"\s*[\n\r]+\s*" -consistent!(linux_ip_1, r"\s*[\n\r]+\s*"); - -// linux_ip-0.1.0: r"^([0-9a-fA-F\.:/]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$" -consistent!(linux_ip_2, r"^([0-9a-fA-F\.:/]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$"); - -// linux_ip-0.1.0: r"^([0-9a-fA-F\.:/]+|default)\s+via\s+([a-z0-9\.:]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$" -consistent!(linux_ip_3, r"^([0-9a-fA-F\.:/]+|default)\s+via\s+([a-z0-9\.:]+)\s+dev\s+([a-z0-9\.]+)\s*(.*)$"); - -// linux_ip-0.1.0: r"^(blackhole)\s+([0-9a-fA-F\.:/]+)$" -consistent!(linux_ip_4, r"^(blackhole)\s+([0-9a-fA-F\.:/]+)$"); - -// linux_ip-0.1.0: r"^(unreachable)\s+([0-9a-fA-F\.:/]+)\s+dev\s+([a-z0-9\.]+)\s+(.*)$" -consistent!(linux_ip_5, r"^(unreachable)\s+([0-9a-fA-F\.:/]+)\s+dev\s+([a-z0-9\.]+)\s+(.*)$"); - -// linux_ip-0.1.0: r"\s*[\n\r]+\s*" -consistent!(linux_ip_6, r"\s*[\n\r]+\s*"); - -// linux_ip-0.1.0: r"^\d+:\s+([a-zA-Z0-9\.-]+)(@\S+)*:\s+(.*)$" -consistent!(linux_ip_7, r"^\d+:\s+([a-zA-Z0-9\.-]+)(@\S+)*:\s+(.*)$"); - -// linux_ip-0.1.0: r"\s*link/ether\s+([a-f0-9:]+)\s+.*" -consistent!(linux_ip_8, r"\s*link/ether\s+([a-f0-9:]+)\s+.*"); - -// linux_ip-0.1.0: r"\s*inet[6]*\s+([0-9a-f:\./]+)\s+.*" -consistent!(linux_ip_9, r"\s*inet[6]*\s+([0-9a-f:\./]+)\s+.*"); - -// linky-0.1.4: r"[^\w -]" -consistent!(linky_0, r"[^\w -]"); - -// linky-0.1.4: r"^(.*):(\d+): [^ ]* ([^ ]*)$" -consistent!(linky_1, r"^(.*):(\d+): [^ ]* ([^ ]*)$"); - -// limonite-0.2.1: r"^(\d{4}-\d{2}-\d{2})-(\d{3})-(.+)$" -consistent!(limonite_0, r"^(\d{4}-\d{2}-\d{2})-(\d{3})-(.+)$"); - -// process-queue-0.1.1: r"^[a-zA-Z]+$" -consistent!(process_queue_0, r"^[a-zA-Z]+$"); - -// pronghorn-0.1.2: r"^\{([a-zA-Z_]+)\}$" -consistent!(pronghorn_0, r"^\{([a-zA-Z_]+)\}$"); - -// protocol-ftp-client-0.1.1: "(?m:^(\\d{3}) (.+)\r$)" -consistent!(protocol_ftp_client_0, "(?m:^(\\d{3}) (.+)\r$)"); - -// protocol-ftp-client-0.1.1: "\"(.+)\"" -consistent!(protocol_ftp_client_1, "\"(.+)\""); - -// protocol-ftp-client-0.1.1: "(\\w+) [Tt]ype: (\\w+)" -consistent!(protocol_ftp_client_2, "(\\w+) [Tt]ype: (\\w+)"); - -// protocol-ftp-client-0.1.1: "(?m:^(\\d{3})-.+\r$)" -consistent!(protocol_ftp_client_3, "(?m:^(\\d{3})-.+\r$)"); - -// protocol-ftp-client-0.1.1: "Entering Passive Mode \\((\\d+),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)\\)" -consistent!(protocol_ftp_client_4, "Entering Passive Mode \\((\\d+),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)\\)"); - -// protocol-ftp-client-0.1.1: "(?m:^(.+)\r$)" -consistent!(protocol_ftp_client_5, "(?m:^(.+)\r$)"); - -// protocol-ftp-client-0.1.1: "^([d-])(?:[rwx-]{3}){3} +\\d+ +\\w+ +\\w+ +(\\d+) +(.+) +(.+)$" -consistent!(protocol_ftp_client_6, "^([d-])(?:[rwx-]{3}){3} +\\d+ +\\w+ +\\w+ +(\\d+) +(.+) +(.+)$"); - -// article-date-extractor-0.1.1: r"([\./\-_]{0,1}(19|20)\d{2})[\./\-_]{0,1}(([0-3]{0,1}[0-9][\./\-_])|(\w{3,5}[\./\-_]))([0-3]{0,1}[0-9][\./\-]{0,1})" -consistent!(article_date_extractor_0, r"([\./\-_]{0,1}(19|20)\d{2})[\./\-_]{0,1}(([0-3]{0,1}[0-9][\./\-_])|(\w{3,5}[\./\-_]))([0-3]{0,1}[0-9][\./\-]{0,1})"); - -// article-date-extractor-0.1.1: r"(?i)publishdate|pubdate|timestamp|article_date|articledate|date" -consistent!(article_date_extractor_1, r"(?i)publishdate|pubdate|timestamp|article_date|articledate|date"); - -// arthas_plugin-0.1.1: r"type\((.*)\)" -consistent!(arthas_plugin_0, r"type\((.*)\)"); - -// arthas_plugin-0.1.1: r"Vec<(.*)>" -consistent!(arthas_plugin_1, r"Vec<(.*)>"); - -// arthas_plugin-0.1.1: r"Option<(.*)>" -consistent!(arthas_plugin_2, r"Option<(.*)>"); - -// arthas_plugin-0.1.1: r"HashMap<[a-z0-9A-Z]+, *(.*)>" -consistent!(arthas_plugin_3, r"HashMap<[a-z0-9A-Z]+, *(.*)>"); - -// arthas_derive-0.1.0: "Vec *< *(.*) *>" -consistent!(arthas_derive_0, "Vec *< *(.*) *>"); - -// arthas_derive-0.1.0: r"Option *< *(.*) *>" -consistent!(arthas_derive_1, r"Option *< *(.*) *>"); - -// arthas_derive-0.1.0: r"HashMap *< *[a-z0-9A-Z]+ *, *(.*) *>" -consistent!(arthas_derive_2, r"HashMap *< *[a-z0-9A-Z]+ *, *(.*) *>"); - -// arpabet-0.2.0: r"^([\w\-\(\)\.']+)\s+([^\s].*)\s*$" -consistent!(arpabet_0, r"^([\w\-\(\)\.']+)\s+([^\s].*)\s*$"); - -// arpabet-0.2.0: r"^;;;\s+" -consistent!(arpabet_1, r"^;;;\s+"); - -// glossy_codegen-0.2.0: r"/\*.*?\*/|//.*" -consistent!(glossy_codegen_0, r"/\*.*?\*/|//.*"); - -// glossy_codegen-0.2.0: "^\\s*#\\s*include\\s+<([:print:]+)>\\s*$" -consistent!(glossy_codegen_1, "^\\s*#\\s*include\\s+<([:print:]+)>\\s*$"); - -// glossy_codegen-0.2.0: "^\\s*#\\s*include\\s+\"([:print:]+)\"\\s*$" -consistent!(glossy_codegen_2, "^\\s*#\\s*include\\s+\"([:print:]+)\"\\s*$"); - -// glossy_codegen-0.2.0: r"^\s*#\s*version\s+(\d+)" -consistent!(glossy_codegen_3, r"^\s*#\s*version\s+(\d+)"); - -// glossy_codegen-0.2.0: r"^\s*$" -consistent!(glossy_codegen_4, r"^\s*$"); - -// gluster-1.0.1: r"(?P<addr>via \S+)" -consistent!(gluster_0, r"(?P<addr>via \S+)"); - -// gluster-1.0.1: r"(?P<src>src \S+)" -consistent!(gluster_1, r"(?P<src>src \S+)"); - -// gl_helpers-0.1.7: r"(.*)\[\d+\]" -consistent!(gl_helpers_0, r"(.*)\[\d+\]"); - -// gl_helpers-0.1.7: r"(\d+).(\d+)" -consistent!(gl_helpers_1, r"(\d+).(\d+)"); - -// glr-parser-0.0.1: r"(?P<c>[\\\.\+\*\?\(\)\|\[\]\{\}\^\$])" -consistent!(glr_parser_0, r"(?P<c>[\\\.\+\*\?\(\)\|\[\]\{\}\^\$])"); - -// glr-parser-0.0.1: r"^\w+$" -consistent!(glr_parser_1, r"^\w+$"); - -// glr-parser-0.0.1: "'[^']+'" -consistent!(glr_parser_2, "'[^']+'"); - -// hoodlum-0.5.0: r"(?m)//.*" -consistent!(hoodlum_0, r"(?m)//.*"); - -// form-checker-0.2.2: r"^1\d{10}$" -consistent!(form_checker_0, r"^1\d{10}$"); - -// form-checker-0.2.2: r"(?i)^[\w.%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$" -consistent!(form_checker_1, r"(?i)^[\w.%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$"); - -// wikibase-0.2.0: r"(?P<user_agent>[a-zA-Z0-9-_]+/[0-9\.]+)" -consistent!(wikibase_0, r"(?P<user_agent>[a-zA-Z0-9-_]+/[0-9\.]+)"); - -// wifiscanner-0.3.6: r"Cell [0-9]{2,} - Address:" -consistent!(wifiscanner_0, r"Cell [0-9]{2,} - Address:"); - -// wifiscanner-0.3.6: r"([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}" -consistent!(wifiscanner_1, r"([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}"); - -// wifiscanner-0.3.6: r"Signal level=(\d+)/100" -consistent!(wifiscanner_2, r"Signal level=(\d+)/100"); - -// bbcode-1.0.2: r"(?s)\[b\](.*?)\[/b\]" -consistent!(bbcode_0, r"(?s)\[b\](.*?)\[/b\]"); - -// bbcode-1.0.2: r"(?s)\[i\](.*?)\[/i\]" -consistent!(bbcode_1, r"(?s)\[i\](.*?)\[/i\]"); - -// bbcode-1.0.2: r"(?s)\[u\](.*?)\[/u\]" -consistent!(bbcode_2, r"(?s)\[u\](.*?)\[/u\]"); - -// bbcode-1.0.2: r"(?s)\[s\](.*?)\[/s\]" -consistent!(bbcode_3, r"(?s)\[s\](.*?)\[/s\]"); - -// bbcode-1.0.2: r"(?s)\[size=(\d+)](.*?)\[/size\]" -consistent!(bbcode_4, r"(?s)\[size=(\d+)](.*?)\[/size\]"); - -// bbcode-1.0.2: r"(?s)\[color=(.+)](.*?)\[/color\]" -consistent!(bbcode_5, r"(?s)\[color=(.+)](.*?)\[/color\]"); - -// bbcode-1.0.2: r"(?s)\[center\](.*?)\[/center\]" -consistent!(bbcode_6, r"(?s)\[center\](.*?)\[/center\]"); - -// bbcode-1.0.2: r"(?s)\[left\](.*?)\[/left\]" -consistent!(bbcode_7, r"(?s)\[left\](.*?)\[/left\]"); - -// bbcode-1.0.2: r"(?s)\[right\](.*?)\[/right\]" -consistent!(bbcode_8, r"(?s)\[right\](.*?)\[/right\]"); - -// bbcode-1.0.2: r"(?s)\[table\](.*?)\[/table\]" -consistent!(bbcode_9, r"(?s)\[table\](.*?)\[/table\]"); - -// bbcode-1.0.2: r"(?s)\[td\](.*?)\[/td\]" -consistent!(bbcode_10, r"(?s)\[td\](.*?)\[/td\]"); - -// bbcode-1.0.2: r"(?s)\[tr\](.*?)\[/tr\]" -consistent!(bbcode_11, r"(?s)\[tr\](.*?)\[/tr\]"); - -// bbcode-1.0.2: r"(?s)\[th\](.*?)\[/th\]" -consistent!(bbcode_12, r"(?s)\[th\](.*?)\[/th\]"); - -// bbcode-1.0.2: r"(?s)\[url\](.*?)\[/url\]" -consistent!(bbcode_13, r"(?s)\[url\](.*?)\[/url\]"); - -// bbcode-1.0.2: r"(?s)\[url=(.+)\](.*?)\[/url\]" -consistent!(bbcode_14, r"(?s)\[url=(.+)\](.*?)\[/url\]"); - -// bbcode-1.0.2: r"(?s)\[quote\](.*?)\[/quote\]" -consistent!(bbcode_15, r"(?s)\[quote\](.*?)\[/quote\]"); - -// bbcode-1.0.2: r"(?s)\[quote=(.+)\](.*?)\[/quote\]" -consistent!(bbcode_16, r"(?s)\[quote=(.+)\](.*?)\[/quote\]"); - -// bbcode-1.0.2: r"(?s)\[img=(\d+)x(\d+)(\b.*)?\](.*?)\[/img\]" -consistent!(bbcode_17, r"(?s)\[img=(\d+)x(\d+)(\b.*)?\](.*?)\[/img\]"); - -// bbcode-1.0.2: r"(?s)\[img=(.+)(\b.*)?\](.*?)\[/img\]" -consistent!(bbcode_18, r"(?s)\[img=(.+)(\b.*)?\](.*?)\[/img\]"); - -// bbcode-1.0.2: r"(?s)\[img(\b.*)?\](.*?)\[/img\]" -consistent!(bbcode_19, r"(?s)\[img(\b.*)?\](.*?)\[/img\]"); - -// bbcode-1.0.2: r"(?s)\[ol\](.*?)\[/ol\]" -consistent!(bbcode_20, r"(?s)\[ol\](.*?)\[/ol\]"); - -// bbcode-1.0.2: r"(?s)\[ul\](.*?)\[/ul\]" -consistent!(bbcode_21, r"(?s)\[ul\](.*?)\[/ul\]"); - -// bbcode-1.0.2: r"(?s)\[list\](.*?)\[/list\]" -consistent!(bbcode_22, r"(?s)\[list\](.*?)\[/list\]"); - -// bbcode-1.0.2: r"(?s)\[youtube\](.*?)\[/youtube\]" -consistent!(bbcode_23, r"(?s)\[youtube\](.*?)\[/youtube\]"); - -// bbcode-1.0.2: r"(?s)\[youtube=(\d+)x(\d+)\](.*?)\[/youtube\]" -consistent!(bbcode_24, r"(?s)\[youtube=(\d+)x(\d+)\](.*?)\[/youtube\]"); - -// bbcode-1.0.2: r"(?s)\[li\](.*?)\[/li\]" -consistent!(bbcode_25, r"(?s)\[li\](.*?)\[/li\]"); - -// block-utils-0.5.0: r"loop\d+" -consistent!(block_utils_0, r"loop\d+"); - -// block-utils-0.5.0: r"ram\d+" -consistent!(block_utils_1, r"ram\d+"); - -// block-utils-0.5.0: r"md\d+" -consistent!(block_utils_2, r"md\d+"); - -// kvvliveapi-0.1.0: r"^([1-9]) min$" -consistent!(kvvliveapi_0, r"^([1-9]) min$"); - -// rfc822_sanitizer-0.3.3: r"(\d{2}):(\d{2}):(\d{2})" -consistent!(rfc822_sanitizer_0, r"(\d{2}):(\d{2}):(\d{2})"); - -// rfc822_sanitizer-0.3.3: r"(\d{1,2}):(\d{1,2}):(\d{1,2})" -consistent!(rfc822_sanitizer_1, r"(\d{1,2}):(\d{1,2}):(\d{1,2})"); - -// faker-0.0.4: r"[2-9]" -consistent!(faker_0, r"[2-9]"); - -// faker-0.0.4: r"[1-9]" -consistent!(faker_1, r"[1-9]"); - -// faker-0.0.4: r"[0-9]" -consistent!(faker_2, r"[0-9]"); - -// faker-0.0.4: r"\d{10}" -consistent!(faker_3, r"\d{10}"); - -// faker-0.0.4: r"\d{1}" -consistent!(faker_4, r"\d{1}"); - -// faker-0.0.4: r"^\w+" -consistent!(faker_5, r"^\w+"); - -// faker-0.0.4: r"^\w+" -consistent!(faker_6, r"^\w+"); - -// faker-0.0.4: r"^(\w+\.? ?){2,3}$" -consistent!(faker_7, r"^(\w+\.? ?){2,3}$"); - -// faker-0.0.4: r"^[A-Z][a-z]+\.?$" -consistent!(faker_8, r"^[A-Z][a-z]+\.?$"); - -// faker-0.0.4: r"^[A-Z][A-Za-z]*\.?$" -consistent!(faker_9, r"^[A-Z][A-Za-z]*\.?$"); - -// faker-0.0.4: r"http://lorempixel.com/100/100/\w+" -consistent!(faker_10, r"http://lorempixel.com/100/100/\w+"); - -// faker-0.0.4: r"http://lorempixel.com/100/100/cats" -consistent!(faker_11, r"http://lorempixel.com/100/100/cats"); - -// fancy-regex-0.1.0: "(?i:ß)" -consistent!(fancy_regex_0, "(?i:ß)"); - -// fancy-regex-0.1.0: "(?i:\\x{0587})" -consistent!(fancy_regex_1, "(?i:\\x{0587})"); - -// fancy-regex-0.1.0: "^\\\\([!-/:-@\\[-`\\{-~aftnrv]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]{1,6}\\})" -consistent!(fancy_regex_2, "^\\\\([!-/:-@\\[-`\\{-~aftnrv]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]{1,6}\\})"); - -// fancy-prompt-0.1.5: r"/([^/])[^/]+/" -consistent!(fancy_prompt_0, r"/([^/])[^/]+/"); - -// fancy-prompt-0.1.5: r"^([^:]+):.*?(?::([^:]+))?$" -consistent!(fancy_prompt_1, r"^([^:]+):.*?(?::([^:]+))?$"); - -// fanta-0.2.0: r"^(/?__\w+__)/(.*)" -consistent!(fanta_0, r"^(/?__\w+__)/(.*)"); - -// fanta-cli-0.1.1: r"(.)([A-Z])" -consistent!(fanta_cli_0, r"(.)([A-Z])"); - -// fanta-cli-0.1.1: "\\{:[^\\s]+\\}" -consistent!(fanta_cli_1, "\\{:[^\\s]+\\}"); - -// amethyst_tools-0.7.1: "(?P<last>[^\r])\n" -consistent!(amethyst_tools_0, "(?P<last>[^\r])\n"); - -// amigo-0.3.1: r"^-?\d+(\.\d)?" -consistent!(amigo_0, r"^-?\d+(\.\d)?"); - -// amigo-0.3.1: r"^[a-zA-Z_]+[\w-]*[!?_]?" -consistent!(amigo_1, r"^[a-zA-Z_]+[\w-]*[!?_]?"); - -// amigo-0.3.1: r"^\(" -consistent!(amigo_2, r"^\("); - -// amigo-0.3.1: r"^\)" -consistent!(amigo_3, r"^\)"); - -// amigo-0.3.1: r"^\s+" -consistent!(amigo_4, r"^\s+"); - -// ethcore-logger-1.12.0: "\x1b\\[[^m]+m" -consistent!(ethcore_logger_0, "\x1b\\[[^m]+m"); - -// dash2html-1.0.1: r"__.*?__" -consistent!(dash2html_0, r"__.*?__"); - -// dash2html-1.0.1: r"(?i)@(?:time|clipboard|cursor|date)" -consistent!(dash2html_1, r"(?i)@(?:time|clipboard|cursor|date)"); - -// os_type-2.0.0: r"^Microsoft Windows \[Version\s(\d+\.\d+\.\d+)\]$" -consistent!(os_type_0, r"^Microsoft Windows \[Version\s(\d+\.\d+\.\d+)\]$"); - -// os_type-2.0.0: r"ProductName:\s([\w\s]+)\n" -consistent!(os_type_1, r"ProductName:\s([\w\s]+)\n"); - -// os_type-2.0.0: r"ProductVersion:\s(\w+\.\w+\.\w+)" -consistent!(os_type_2, r"ProductVersion:\s(\w+\.\w+\.\w+)"); - -// os_type-2.0.0: r"BuildVersion:\s(\w+)" -consistent!(os_type_3, r"BuildVersion:\s(\w+)"); - -// os_type-2.0.0: r"(\w+) Linux release" -consistent!(os_type_4, r"(\w+) Linux release"); - -// os_type-2.0.0: r"release\s([\w\.]+)" -consistent!(os_type_5, r"release\s([\w\.]+)"); - -// os_type-2.0.0: r"Distributor ID:\s(\w+)" -consistent!(os_type_6, r"Distributor ID:\s(\w+)"); - -// os_type-2.0.0: r"Release:\s([\w\.]+)" -consistent!(os_type_7, r"Release:\s([\w\.]+)"); - -// bindgen-0.37.0: r"typename type\-parameter\-\d+\-\d+::.+" -consistent!(bindgen_0, r"typename type\-parameter\-\d+\-\d+::.+"); - -// imap-0.8.1: "^+(.*)\r\n" -consistent!(imap_0, "^+(.*)\r\n"); - -// image-base64-0.1.0: r"^ffd8ffe0" -consistent!(image_base64_0, r"^ffd8ffe0"); - -// image-base64-0.1.0: r"^89504e47" -consistent!(image_base64_1, r"^89504e47"); - -// image-base64-0.1.0: r"^47494638" -consistent!(image_base64_2, r"^47494638"); - -// json-pointer-0.3.2: "^(/([^/~]|~[01])*)*$" -consistent!(json_pointer_0, "^(/([^/~]|~[01])*)*$"); - -// json-pointer-0.3.2: "^#(/([^/~%]|~[01]|%[0-9a-fA-F]{2})*)*$" -consistent!(json_pointer_1, "^#(/([^/~%]|~[01]|%[0-9a-fA-F]{2})*)*$"); - -// mysql_common-0.7.0: r"^5.5.5-(\d{1,2})\.(\d{1,2})\.(\d{1,3})-MariaDB" -consistent!(mysql_common_0, r"^5.5.5-(\d{1,2})\.(\d{1,2})\.(\d{1,3})-MariaDB"); - -// mysql_common-0.7.0: r"^(\d{1,2})\.(\d{1,2})\.(\d{1,3})(.*)" -consistent!(mysql_common_1, r"^(\d{1,2})\.(\d{1,2})\.(\d{1,3})(.*)"); - -// government_id-0.1.0: r"^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$" -consistent!(government_id_0, r"^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$"); - -// ohmers-0.1.1: r"UniqueIndexViolation: (\w+)" -consistent!(ohmers_0, r"UniqueIndexViolation: (\w+)"); - -// eliza-1.0.0: r"(.*) you are (.*)" -consistent!(eliza_0, r"(.*) you are (.*)"); - -// eliza-1.0.0: r"(.*) you are (.*)" -consistent!(eliza_1, r"(.*) you are (.*)"); - -// eliza-1.0.0: r"(.*) you are (.*)" -consistent!(eliza_2, r"(.*) you are (.*)"); - -// chema-0.0.5: "^\\s*\\*" -consistent!(chema_0, "^\\s*\\*"); - -// chema-0.0.5: "^\\s*@(\\w+)\\s+(.*)" -consistent!(chema_1, "^\\s*@(\\w+)\\s+(.*)"); - -// chord3-0.3.0: r"^\s*#" -consistent!(chord3_0, r"^\s*#"); - -// chord3-0.3.0: r"\{(?P<cmd>\w+)(?::?\s*(?P<arg>.*))?\}" -consistent!(chord3_1, r"\{(?P<cmd>\w+)(?::?\s*(?P<arg>.*))?\}"); - -// chord3-0.3.0: r"\{(eot|end_of_tab):?\s*" -consistent!(chord3_2, r"\{(eot|end_of_tab):?\s*"); - -// chord3-0.3.0: r"([^\[]*)(?:\[([^\]]*)\])?" -consistent!(chord3_3, r"([^\[]*)(?:\[([^\]]*)\])?"); - -// checkmail-0.1.1: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$" -consistent!(checkmail_0, "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"); - -// cntk-0.2.1: r"\b\w\w+\b" -consistent!(cntk_0, r"\b\w\w+\b"); - -// cntk-0.2.1: r"\b\w\w+\b" -consistent!(cntk_1, r"\b\w\w+\b"); - -// cniguru-0.1.0: r"\(id: (\d+)\)" -consistent!(cniguru_0, r"\(id: (\d+)\)"); - -// upm_lib-0.3.0: r"^(\d+)\.(\d+)\.(\d+)(?:-([\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*))?(?:\+([\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*))?$" -consistent!(upm_lib_0, r"^(\d+)\.(\d+)\.(\d+)(?:-([\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*))?(?:\+([\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*))?$"); - -// avro-0.2.1: r"^\s*(\*+(\s+))?" -consistent!(avro_0, r"^\s*(\*+(\s+))?"); - -// avro-0.2.1: r"^\s*(\*+)?" -consistent!(avro_1, r"^\s*(\*+)?"); - -// nomi-0.0.2: "[0-9]+" -consistent!(nomi_0, "[0-9]+"); - -// nodes-0.1.0: "([0-9]+)@(?:nodes|n)?:([^@]+)?" -consistent!(nodes_0, "([0-9]+)@(?:nodes|n)?:([^@]+)?"); - -// not-stakkr-1.0.0: r"(?i)in (\d+) (second|minute|hour|day|week)s?" -consistent!(not_stakkr_0, r"(?i)in (\d+) (second|minute|hour|day|week)s?"); - -// notetxt-0.0.1: "^([A-Za-z0-9 -_:]+)\n-+\n" -consistent!(notetxt_0, "^([A-Za-z0-9 -_:]+)\n-+\n"); - -// nail-0.1.0-pre.0: r"^-?[0-9]+(\.[0-9]+)?([eE]-?[0-9]+)?$" -consistent!(nail_0, r"^-?[0-9]+(\.[0-9]+)?([eE]-?[0-9]+)?$"); - -// nail-0.1.0-pre.0: r"^-?[0-9]+$" -consistent!(nail_1, r"^-?[0-9]+$"); - -// askalono-0.2.0: r"[^\w\s\pP]+" -consistent!(askalono_0, r"[^\w\s\pP]+"); - -// askalono-0.2.0: r"(?x)[ \t\p{Zs} \\ / \| \x2044 ]+" -consistent!(askalono_1, r"(?x)[ \t\p{Zs} \\ / \| \x2044 ]+"); - -// askalono-0.2.0: r"\p{Pd}+" -consistent!(askalono_2, r"\p{Pd}+"); - -// askalono-0.2.0: r"\p{Ps}+" -consistent!(askalono_3, r"\p{Ps}+"); - -// askalono-0.2.0: r"\p{Pe}+" -consistent!(askalono_4, r"\p{Pe}+"); - -// askalono-0.2.0: r"\p{Pc}+" -consistent!(askalono_5, r"\p{Pc}+"); - -// askalono-0.2.0: r"[©Ⓒⓒ]" -consistent!(askalono_6, r"[©Ⓒⓒ]"); - -// askalono-0.2.0: r"[\r\n\v\f]" -consistent!(askalono_7, r"[\r\n\v\f]"); - -// askalono-0.2.0: r"\n{3,}" -consistent!(askalono_8, r"\n{3,}"); - -// askalono-0.2.0: r"[^\w\s]+" -consistent!(askalono_9, r"[^\w\s]+"); - -// askalono-0.2.0: r"\s+" -consistent!(askalono_10, r"\s+"); - -// assembunny_plus-0.0.3: r"[^0-9a-zA-Z_]" -consistent!(assembunny_plus_0, r"[^0-9a-zA-Z_]"); - -// assembunny_plus-0.0.3: r"[0-9]" -consistent!(assembunny_plus_1, r"[0-9]"); - -// salt-compressor-0.4.0: r"(?m)^Minion (\S*) did not respond\. No job will be sent\.$" -consistent!(salt_compressor_0, r"(?m)^Minion (\S*) did not respond\. No job will be sent\.$"); - -// sabisabi-0.4.1: r"</?[^>]+?>" -consistent!(sabisabi_0, r"</?[^>]+?>"); - -// sabisabi-0.4.1: r"\([^)]*\)" -consistent!(sabisabi_1, r"\([^)]*\)"); - -// sassers-0.13.5-h28: "@import \"([^\"]*)\";" -consistent!(sassers_0, "@import \"([^\"]*)\";"); - -// shadowsocks-0.6.2: r"[A-Za-z\d-]{1,63}$" -consistent!(shadowsocks_0, r"[A-Za-z\d-]{1,63}$"); - -// shkeleton-0.1.5: "[abc]+" -consistent!(shkeleton_0, "[abc]+"); - -// shellwords-0.1.0: r"([^A-Za-z0-9_\-.,:/@\n])" -consistent!(shellwords_0, r"([^A-Za-z0-9_\-.,:/@\n])"); - -// shellwords-0.1.0: r"\n" -consistent!(shellwords_1, r"\n"); - -// shush-0.1.5: "(?P<num>[0-9]+)(?P<units>[dhms])" -consistent!(shush_0, "(?P<num>[0-9]+)(?P<units>[dhms])"); - -// woothee-0.8.0: r"(?:Chrome|CrMo|CriOS)/([.0-9]+)" -consistent!(woothee_0, r"(?:Chrome|CrMo|CriOS)/([.0-9]+)"); - -// woothee-0.8.0: r"Vivaldi/([.0-9]+)" -consistent!(woothee_1, r"Vivaldi/([.0-9]+)"); - -// woothee-0.8.0: r"Firefox/([.0-9]+)" -consistent!(woothee_2, r"Firefox/([.0-9]+)"); - -// woothee-0.8.0: r"^Mozilla/[.0-9]+ \((?:Mobile|Tablet);(?:.*;)? rv:([.0-9]+)\) Gecko/[.0-9]+ Firefox/[.0-9]+$" -consistent!(woothee_3, r"^Mozilla/[.0-9]+ \((?:Mobile|Tablet);(?:.*;)? rv:([.0-9]+)\) Gecko/[.0-9]+ Firefox/[.0-9]+$"); - -// woothee-0.8.0: r"FxiOS/([.0-9]+)" -consistent!(woothee_4, r"FxiOS/([.0-9]+)"); - -// woothee-0.8.0: r"\(([^;)]+);FOMA;" -consistent!(woothee_5, r"\(([^;)]+);FOMA;"); - -// woothee-0.8.0: r"jig browser[^;]+; ([^);]+)" -consistent!(woothee_6, r"jig browser[^;]+; ([^);]+)"); - -// woothee-0.8.0: r"(?i)rss(?:reader|bar|[-_ /;()]|[ +]*/)" -consistent!(woothee_7, r"(?i)rss(?:reader|bar|[-_ /;()]|[ +]*/)"); - -// woothee-0.8.0: r"(?i)(?:bot|crawler|spider)(?:[-_ ./;@()]|$)" -consistent!(woothee_8, r"(?i)(?:bot|crawler|spider)(?:[-_ ./;@()]|$)"); - -// woothee-0.8.0: r"(?i)(?:feed|web) ?parser" -consistent!(woothee_9, r"(?i)(?:feed|web) ?parser"); - -// woothee-0.8.0: r"(?i)watch ?dog" -consistent!(woothee_10, r"(?i)watch ?dog"); - -// woothee-0.8.0: r"Edge/([.0-9]+)" -consistent!(woothee_11, r"Edge/([.0-9]+)"); - -// woothee-0.8.0: r"MSIE ([.0-9]+);" -consistent!(woothee_12, r"MSIE ([.0-9]+);"); - -// woothee-0.8.0: r"Version/([.0-9]+)" -consistent!(woothee_13, r"Version/([.0-9]+)"); - -// woothee-0.8.0: r"Opera[/ ]([.0-9]+)" -consistent!(woothee_14, r"Opera[/ ]([.0-9]+)"); - -// woothee-0.8.0: r"OPR/([.0-9]+)" -consistent!(woothee_15, r"OPR/([.0-9]+)"); - -// woothee-0.8.0: r"Version/([.0-9]+)" -consistent!(woothee_16, r"Version/([.0-9]+)"); - -// woothee-0.8.0: r"(?:SoftBank|Vodafone|J-PHONE)/[.0-9]+/([^ /;()]+)" -consistent!(woothee_17, r"(?:SoftBank|Vodafone|J-PHONE)/[.0-9]+/([^ /;()]+)"); - -// woothee-0.8.0: r"Trident/([.0-9]+);" -consistent!(woothee_18, r"Trident/([.0-9]+);"); - -// woothee-0.8.0: r" rv:([.0-9]+)" -consistent!(woothee_19, r" rv:([.0-9]+)"); - -// woothee-0.8.0: r"IEMobile/([.0-9]+);" -consistent!(woothee_20, r"IEMobile/([.0-9]+);"); - -// woothee-0.8.0: r"(?:WILLCOM|DDIPOCKET);[^/]+/([^ /;()]+)" -consistent!(woothee_21, r"(?:WILLCOM|DDIPOCKET);[^/]+/([^ /;()]+)"); - -// woothee-0.8.0: r"Windows ([ .a-zA-Z0-9]+)[;\\)]" -consistent!(woothee_22, r"Windows ([ .a-zA-Z0-9]+)[;\\)]"); - -// woothee-0.8.0: r"^Phone(?: OS)? ([.0-9]+)" -consistent!(woothee_23, r"^Phone(?: OS)? ([.0-9]+)"); - -// woothee-0.8.0: r"iP(hone;|ad;|od) .*like Mac OS X" -consistent!(woothee_24, r"iP(hone;|ad;|od) .*like Mac OS X"); - -// woothee-0.8.0: r"Version/([.0-9]+)" -consistent!(woothee_25, r"Version/([.0-9]+)"); - -// woothee-0.8.0: r"rv:(\d+\.\d+\.\d+)" -consistent!(woothee_26, r"rv:(\d+\.\d+\.\d+)"); - -// woothee-0.8.0: r"FreeBSD ([^;\)]+);" -consistent!(woothee_27, r"FreeBSD ([^;\)]+);"); - -// woothee-0.8.0: r"CrOS ([^\)]+)\)" -consistent!(woothee_28, r"CrOS ([^\)]+)\)"); - -// woothee-0.8.0: r"Android[- ](\d+\.\d+(?:\.\d+)?)" -consistent!(woothee_29, r"Android[- ](\d+\.\d+(?:\.\d+)?)"); - -// woothee-0.8.0: r"PSP \(PlayStation Portable\); ([.0-9]+)\)" -consistent!(woothee_30, r"PSP \(PlayStation Portable\); ([.0-9]+)\)"); - -// woothee-0.8.0: r"PLAYSTATION 3;? ([.0-9]+)\)" -consistent!(woothee_31, r"PLAYSTATION 3;? ([.0-9]+)\)"); - -// woothee-0.8.0: r"PlayStation Vita ([.0-9]+)\)" -consistent!(woothee_32, r"PlayStation Vita ([.0-9]+)\)"); - -// woothee-0.8.0: r"PlayStation 4 ([.0-9]+)\)" -consistent!(woothee_33, r"PlayStation 4 ([.0-9]+)\)"); - -// woothee-0.8.0: r"BB10(?:.+)Version/([.0-9]+) " -consistent!(woothee_34, r"BB10(?:.+)Version/([.0-9]+) "); - -// woothee-0.8.0: r"BlackBerry(?:\d+)/([.0-9]+) " -consistent!(woothee_35, r"BlackBerry(?:\d+)/([.0-9]+) "); - -// woothee-0.8.0: r"; CPU(?: iPhone)? OS (\d+_\d+(?:_\d+)?) like Mac OS X" -consistent!(woothee_36, r"; CPU(?: iPhone)? OS (\d+_\d+(?:_\d+)?) like Mac OS X"); - -// woothee-0.8.0: r"Mac OS X (10[._]\d+(?:[._]\d+)?)(?:\)|;)" -consistent!(woothee_37, r"Mac OS X (10[._]\d+(?:[._]\d+)?)(?:\)|;)"); - -// woothee-0.8.0: r"^(?:Apache-HttpClient/|Jakarta Commons-HttpClient/|Java/)" -consistent!(woothee_38, r"^(?:Apache-HttpClient/|Jakarta Commons-HttpClient/|Java/)"); - -// woothee-0.8.0: r"[- ]HttpClient(/|$)" -consistent!(woothee_39, r"[- ]HttpClient(/|$)"); - -// woothee-0.8.0: r"^(?:PHP|WordPress|CakePHP|PukiWiki|PECL::HTTP)(?:/| |$)" -consistent!(woothee_40, r"^(?:PHP|WordPress|CakePHP|PukiWiki|PECL::HTTP)(?:/| |$)"); - -// woothee-0.8.0: r"(?:PEAR HTTP_Request|HTTP_Request)(?: class|2)" -consistent!(woothee_41, r"(?:PEAR HTTP_Request|HTTP_Request)(?: class|2)"); - -// woothee-0.8.0: r"(?:Rome Client |UnwindFetchor/|ia_archiver |Summify |PostRank/)" -consistent!(woothee_42, r"(?:Rome Client |UnwindFetchor/|ia_archiver |Summify |PostRank/)"); - -// woothee-0.8.0: r"Sleipnir/([.0-9]+)" -consistent!(woothee_43, r"Sleipnir/([.0-9]+)"); - -// word_replace-0.0.3: r"@@[a-z|A-Z|\d]+@@" -consistent!(word_replace_0, r"@@[a-z|A-Z|\d]+@@"); - -// wordcount-0.1.0: r"\w+" -consistent!(wordcount_0, r"\w+"); - -// just-0.3.12: "^([^=]+)=(.*)$" -consistent!(just_0, "^([^=]+)=(.*)$"); - -// emote-0.1.0: r":[a-zA-Z_]+?:" -consistent!(emote_0, r":[a-zA-Z_]+?:"); - -// emojicons-1.0.1: r":([a-zA-Z0-9_+-]+):" -consistent!(emojicons_0, r":([a-zA-Z0-9_+-]+):"); - -// git2_codecommit-0.1.2: r"git-codecommit\.([a-z0-9-]+)\.amazonaws\.com" -consistent!(git2_codecommit_0, r"git-codecommit\.([a-z0-9-]+)\.amazonaws\.com"); - -// git-workarea-3.1.2: r"^submodule\.(?P<name>.*)\.(?P<key>[^=]*)=(?P<value>.*)$" -consistent!(git_workarea_0, r"^submodule\.(?P<name>.*)\.(?P<key>[^=]*)=(?P<value>.*)$"); - -// git-shell-enforce-directory-1.0.0: r"^(?P<command>git-(?:receive|upload)-pack) '(?P<path>.+)'$" -consistent!(git_shell_enforce_directory_0, r"^(?P<command>git-(?:receive|upload)-pack) '(?P<path>.+)'$"); - -// git-journal-1.6.3: r"[ \n]:(.*?):" -consistent!(git_journal_0, r"[ \n]:(.*?):"); - -// git-find-0.3.2: r"^git@(?P<host>[[:alnum:]\._-]+):(?P<path>[[:alnum:]\._\-/]+).git$" -consistent!(git_find_0, r"^git@(?P<host>[[:alnum:]\._-]+):(?P<path>[[:alnum:]\._\-/]+).git$"); - -// gitlab-api-0.6.0: r"private_token=\w{20}" -consistent!(gitlab_api_0, r"private_token=\w{20}"); - -// td-client-0.7.0: "^(http://|https://)" -consistent!(td_client_0, "^(http://|https://)"); - -// karaconv-0.3.0: r"--(?P<type>[a-zA-Z]+)-- (?P<contents>.*)" -consistent!(karaconv_0, r"--(?P<type>[a-zA-Z]+)-- (?P<contents>.*)"); - -// katana-1.0.2: r"(?P<comp>et al\.)(?:\.)" -consistent!(katana_0, r"(?P<comp>et al\.)(?:\.)"); - -// katana-1.0.2: r"\.{3}" -consistent!(katana_1, r"\.{3}"); - -// katana-1.0.2: r"(?P<number>[0-9]+)\.(?P<decimal>[0-9]+)" -consistent!(katana_2, r"(?P<number>[0-9]+)\.(?P<decimal>[0-9]+)"); - -// katana-1.0.2: r"\s\.(?P<nums>[0-9]+)" -consistent!(katana_3, r"\s\.(?P<nums>[0-9]+)"); - -// katana-1.0.2: r"(?:[A-Za-z]\.){2,}" -consistent!(katana_4, r"(?:[A-Za-z]\.){2,}"); - -// katana-1.0.2: r"(?P<init>[A-Z])(?P<point>\.)" -consistent!(katana_5, r"(?P<init>[A-Z])(?P<point>\.)"); - -// katana-1.0.2: r"(?P<title>[A-Z][a-z]{1,3})(\.)" -consistent!(katana_6, r"(?P<title>[A-Z][a-z]{1,3})(\.)"); - -// katana-1.0.2: r"&==&(?P<p>[.!?])" -consistent!(katana_7, r"&==&(?P<p>[.!?])"); - -// katana-1.0.2: r"&\^&(?P<p>[.!?])" -consistent!(katana_8, r"&\^&(?P<p>[.!?])"); - -// katana-1.0.2: r"&\*\*&(?P<p>[.!?])" -consistent!(katana_9, r"&\*\*&(?P<p>[.!?])"); - -// katana-1.0.2: r"&=&(?P<p>[.!?])" -consistent!(katana_10, r"&=&(?P<p>[.!?])"); - -// katana-1.0.2: r"&##&(?P<p>[.!?])" -consistent!(katana_11, r"&##&(?P<p>[.!?])"); - -// katana-1.0.2: r"&\$&(?P<p>[.!?])" -consistent!(katana_12, r"&\$&(?P<p>[.!?])"); - -// kailua_syntax-1.1.0: r"@(?:_|\d+(?:/\d+(?:-\d+)?)?)" -consistent!(kailua_syntax_0, r"@(?:_|\d+(?:/\d+(?:-\d+)?)?)"); - -// kailua_syntax-1.1.0: r"<(\d+)>" -consistent!(kailua_syntax_1, r"<(\d+)>"); - -// ftp-3.0.1: r"\((\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\)" -consistent!(ftp_0, r"\((\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\)"); - -// ftp-3.0.1: r"\b(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\b" -consistent!(ftp_1, r"\b(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\b"); - -// ftp-3.0.1: r"\s+(\d+)\s*$" -consistent!(ftp_2, r"\s+(\d+)\s*$"); - -// vat-0.1.0: r"<countryCode>(.*?)</countryCode>" -consistent!(vat_0, r"<countryCode>(.*?)</countryCode>"); - -// vat-0.1.0: r"<vatNumber>(.*?)</vatNumber>" -consistent!(vat_1, r"<vatNumber>(.*?)</vatNumber>"); - -// vat-0.1.0: r"<name>(.*?)</name>" -consistent!(vat_2, r"<name>(.*?)</name>"); - -// vat-0.1.0: r"<address>(?s)(.*?)(?-s)</address>" -consistent!(vat_3, r"<address>(?s)(.*?)(?-s)</address>"); - -// vat-0.1.0: r"<valid>(true|false)</valid>" -consistent!(vat_4, r"<valid>(true|false)</valid>"); - -// vat-0.1.0: r"^ATU\d{8}$" -consistent!(vat_5, r"^ATU\d{8}$"); - -// vat-0.1.0: r"^BE0?\d{9, 10}$" -consistent!(vat_6, r"^BE0?\d{9, 10}$"); - -// vat-0.1.0: r"^BG\d{9,10}$" -consistent!(vat_7, r"^BG\d{9,10}$"); - -// vat-0.1.0: r"^HR\d{11}$" -consistent!(vat_8, r"^HR\d{11}$"); - -// vat-0.1.0: r"^CY\d{8}[A-Z]$" -consistent!(vat_9, r"^CY\d{8}[A-Z]$"); - -// vat-0.1.0: r"^CZ\d{8,10}$" -consistent!(vat_10, r"^CZ\d{8,10}$"); - -// vat-0.1.0: r"^DK\d{8}$" -consistent!(vat_11, r"^DK\d{8}$"); - -// vat-0.1.0: r"^EE\d{9}$" -consistent!(vat_12, r"^EE\d{9}$"); - -// vat-0.1.0: r"^FI\d{8}$" -consistent!(vat_13, r"^FI\d{8}$"); - -// vat-0.1.0: r"^FR[A-HJ-NP-Z0-9][A-HJ-NP-Z0-9]\d{9}$" -consistent!(vat_14, r"^FR[A-HJ-NP-Z0-9][A-HJ-NP-Z0-9]\d{9}$"); - -// vat-0.1.0: r"^DE\d{9}$" -consistent!(vat_15, r"^DE\d{9}$"); - -// vat-0.1.0: r"^EL\d{9}$" -consistent!(vat_16, r"^EL\d{9}$"); - -// vat-0.1.0: r"^HU\d{8}$" -consistent!(vat_17, r"^HU\d{8}$"); - -// vat-0.1.0: r"^IE\d[A-Z0-9\+\*]\d{5}[A-Z]{1,2}$" -consistent!(vat_18, r"^IE\d[A-Z0-9\+\*]\d{5}[A-Z]{1,2}$"); - -// vat-0.1.0: r"^IT\d{11}$" -consistent!(vat_19, r"^IT\d{11}$"); - -// vat-0.1.0: r"^LV\d{11}$" -consistent!(vat_20, r"^LV\d{11}$"); - -// vat-0.1.0: r"^LT(\d{9}|\d{12})$" -consistent!(vat_21, r"^LT(\d{9}|\d{12})$"); - -// vat-0.1.0: r"^LU\d{8}$" -consistent!(vat_22, r"^LU\d{8}$"); - -// vat-0.1.0: r"^MT\d{8}$" -consistent!(vat_23, r"^MT\d{8}$"); - -// vat-0.1.0: r"^NL\d{9}B\d{2}$" -consistent!(vat_24, r"^NL\d{9}B\d{2}$"); - -// vat-0.1.0: r"^PL\d{10}$" -consistent!(vat_25, r"^PL\d{10}$"); - -// vat-0.1.0: r"^PT\d{9}$" -consistent!(vat_26, r"^PT\d{9}$"); - -// vat-0.1.0: r"^RO\d{2,10}$" -consistent!(vat_27, r"^RO\d{2,10}$"); - -// vat-0.1.0: r"^SK\d{10}$" -consistent!(vat_28, r"^SK\d{10}$"); - -// vat-0.1.0: r"^SI\d{8}$" -consistent!(vat_29, r"^SI\d{8}$"); - -// vat-0.1.0: r"^ES[A-Z0-9]\d{7}[A-Z0-9]$" -consistent!(vat_30, r"^ES[A-Z0-9]\d{7}[A-Z0-9]$"); - -// vat-0.1.0: r"^SE\d{10}01$" -consistent!(vat_31, r"^SE\d{10}01$"); - -// vat-0.1.0: r"^(GB(GD|HA)\d{3}|GB\d{9}|GB\d{12})$" -consistent!(vat_32, r"^(GB(GD|HA)\d{3}|GB\d{9}|GB\d{12})$"); - -// eve-0.1.1: r"\{\{(.*)\}\}" -consistent!(eve_0, r"\{\{(.*)\}\}"); - -// egc-0.1.2: "^mio" -consistent!(egc_0, "^mio"); - -// pew-0.2.3: "" -consistent!(pew_0, ""); - -// pew-0.2.3: "" -consistent!(pew_1, ""); - -// mob-0.4.3: "y" -consistent!(mob_0, "y"); - -// lit-0.2.8: "@([a-z]+)" -consistent!(lit_0, "@([a-z]+)"); - -// lit-0.2.8: "([A-Z-]+):(.*)" -consistent!(lit_1, "([A-Z-]+):(.*)"); - -// lit-0.2.8: "^[a-zA-Z_][a-zA-Z0-9_]*$" -consistent!(lit_2, "^[a-zA-Z_][a-zA-Z0-9_]*$"); - -// avm-1.0.1: r"\d+\.\d+\.\d+" -consistent!(avm_0, r"\d+\.\d+\.\d+"); - -// avm-1.0.1: r"\d+\.\d+\.\d+" -consistent!(avm_1, r"\d+\.\d+\.\d+"); - -// orm-0.2.0: r"^Vec<(.+)>$" -consistent!(orm_0, r"^Vec<(.+)>$"); - -// sgf-0.1.5: r"\\(\r\n|\n\r|\n|\r)" -consistent!(sgf_0, r"\\(\r\n|\n\r|\n|\r)"); - -// sgf-0.1.5: r"\\(.)" -consistent!(sgf_1, r"\\(.)"); - -// sgf-0.1.5: r"\r\n|\n\r|\n|\r" -consistent!(sgf_2, r"\r\n|\n\r|\n|\r"); - -// sgf-0.1.5: r"([\]\\:])" -consistent!(sgf_3, r"([\]\\:])"); - -// dok-0.2.0: "^Bearer realm=\"(.+?)\",service=\"(.+?)\",scope=\"(.+?)\"$" -consistent!(dok_0, "^Bearer realm=\"(.+?)\",service=\"(.+?)\",scope=\"(.+?)\"$"); - -// d20-0.1.0: r"([+-]?\s*\d+[dD]\d+|[+-]?\s*\d+)" -consistent!(d20_0, r"([+-]?\s*\d+[dD]\d+|[+-]?\s*\d+)"); - -// dvb-0.3.0: "E" -consistent!(dvb_0, "E"); - -// dvb-0.3.0: "^F" -consistent!(dvb_1, "^F"); - -// dvb-0.3.0: "^S" -consistent!(dvb_2, "^S"); - -// ger-0.2.0: r"Change-Id: (I[a-f0-9]{40})$" -consistent!(ger_0, r"Change-Id: (I[a-f0-9]{40})$"); - -// ger-0.2.0: r"(refs|ref|fix|fixes|close|closes)\s+([A-Z]{2,5}-[0-9]{1,5})$" -consistent!(ger_1, r"(refs|ref|fix|fixes|close|closes)\s+([A-Z]{2,5}-[0-9]{1,5})$"); - -// n5-0.2.1: r"(\d+)(\.(\d+))?(\.(\d+))?(.*)" -consistent!(n5_0, r"(\d+)(\.(\d+))?(\.(\d+))?(.*)"); - -// po-0.1.4: r"[A-Za-z0-9]" -consistent!(po_0, r"[A-Za-z0-9]"); - -// carnix-0.8.5: "path is (‘|')?([^’'\n]*)(’|')?" -consistent!(carnix_0, "path is (‘|')?([^’'\n]*)(’|')?"); - -// carnix-0.8.5: r"^(\S*) (\d*)\.(\d*)\.(\d*)(-(\S*))?(.*)?" -consistent!(carnix_1, r"^(\S*) (\d*)\.(\d*)\.(\d*)(-(\S*))?(.*)?"); - -// carnix-0.8.5: r"(\d*)\.(\d*)\.(\d*)(-(\S*))?" -consistent!(carnix_2, r"(\d*)\.(\d*)\.(\d*)(-(\S*))?"); - -// carnix-0.8.5: r"(\S*)-(\d*)\.(\d*)\.(\d*)(-(\S*))?" -consistent!(carnix_3, r"(\S*)-(\d*)\.(\d*)\.(\d*)(-(\S*))?"); - -// caseless-0.2.1: r"^# CaseFolding-(\d+)\.(\d+)\.(\d+).txt$" -consistent!(caseless_0, r"^# CaseFolding-(\d+)\.(\d+)\.(\d+).txt$"); - -// caseless-0.2.1: r"^([0-9A-F]+); [CF]; ([0-9A-F ]+);" -consistent!(caseless_1, r"^([0-9A-F]+); [CF]; ([0-9A-F ]+);"); - -// cabot-0.2.0: "\r?\n\r?\n" -consistent!(cabot_0, "\r?\n\r?\n"); - -// cabot-0.2.0: "\r?\n" -consistent!(cabot_1, "\r?\n"); - -// card-validate-2.2.1: r"^600" -consistent!(card_validate_0, r"^600"); - -// card-validate-2.2.1: r"^5019" -consistent!(card_validate_1, r"^5019"); - -// card-validate-2.2.1: r"^4" -consistent!(card_validate_2, r"^4"); - -// card-validate-2.2.1: r"^(5[1-5]|2[2-7])" -consistent!(card_validate_3, r"^(5[1-5]|2[2-7])"); - -// card-validate-2.2.1: r"^3[47]" -consistent!(card_validate_4, r"^3[47]"); - -// card-validate-2.2.1: r"^3[0689]" -consistent!(card_validate_5, r"^3[0689]"); - -// card-validate-2.2.1: r"^6([045]|22)" -consistent!(card_validate_6, r"^6([045]|22)"); - -// card-validate-2.2.1: r"^(62|88)" -consistent!(card_validate_7, r"^(62|88)"); - -// card-validate-2.2.1: r"^35" -consistent!(card_validate_8, r"^35"); - -// card-validate-2.2.1: r"^[0-9]+$" -consistent!(card_validate_9, r"^[0-9]+$"); - -// cargo-testify-0.3.0: r"\d{1,} passed.*filtered out" -consistent!(cargo_testify_0, r"\d{1,} passed.*filtered out"); - -// cargo-testify-0.3.0: r"error(:|\[).*" -consistent!(cargo_testify_1, r"error(:|\[).*"); - -// cargo-wix-0.0.5: r"<(.*?)>" -consistent!(cargo_wix_0, r"<(.*?)>"); - -// cargo-wix-0.0.5: r"<(.*?)>" -consistent!(cargo_wix_1, r"<(.*?)>"); - -// cargo-wix-0.0.5: r"<(.*?)>" -consistent!(cargo_wix_2, r"<(.*?)>"); - -// cargo-wix-0.0.5: r"<(.*?)>" -consistent!(cargo_wix_3, r"<(.*?)>"); - -// cargo-incremental-0.1.23: r"(?m)^incremental: re-using (\d+) out of (\d+) modules$" -consistent!(cargo_incremental_0, r"(?m)^incremental: re-using (\d+) out of (\d+) modules$"); - -// cargo-incremental-0.1.23: "(?m)(warning|error): (.*)\n --> ([^:]:\\d+:\\d+)$" -consistent!(cargo_incremental_1, "(?m)(warning|error): (.*)\n --> ([^:]:\\d+:\\d+)$"); - -// cargo-incremental-0.1.23: r"(?m)^test (.*) \.\.\. (\w+)" -consistent!(cargo_incremental_2, r"(?m)^test (.*) \.\.\. (\w+)"); - -// cargo-incremental-0.1.23: r"(?m)(\d+) passed; (\d+) failed; (\d+) ignored; \d+ measured" -consistent!(cargo_incremental_3, r"(?m)(\d+) passed; (\d+) failed; (\d+) ignored; \d+ measured"); - -// cargo-testjs-0.1.2: r"^[^-]+-[0-9a-f]+\.js$" -consistent!(cargo_testjs_0, r"^[^-]+-[0-9a-f]+\.js$"); - -// cargo-tarpaulin-0.6.2: r"\s*//" -consistent!(cargo_tarpaulin_0, r"\s*//"); - -// cargo-tarpaulin-0.6.2: r"/\*" -consistent!(cargo_tarpaulin_1, r"/\*"); - -// cargo-tarpaulin-0.6.2: r"\*/" -consistent!(cargo_tarpaulin_2, r"\*/"); - -// cargo-culture-kit-0.1.0: r"^fo" -consistent!(cargo_culture_kit_0, r"^fo"); - -// cargo-screeps-0.1.3: "\\s+" -consistent!(cargo_screeps_0, "\\s+"); - -// cargo-brew-0.1.4: r"`(\S+) v([0-9.]+)" -consistent!(cargo_brew_0, r"`(\S+) v([0-9.]+)"); - -// cargo-release-0.10.2: "^\\[.+\\]" -consistent!(cargo_release_0, "^\\[.+\\]"); - -// cargo-release-0.10.2: "^\\[\\[.+\\]\\]" -consistent!(cargo_release_1, "^\\[\\[.+\\]\\]"); - -// cargo-edit-0.3.0-beta.1: r"^https://github.com/([-_0-9a-zA-Z]+)/([-_0-9a-zA-Z]+)(/|.git)?$" -consistent!(cargo_edit_0, r"^https://github.com/([-_0-9a-zA-Z]+)/([-_0-9a-zA-Z]+)(/|.git)?$"); - -// cargo-edit-0.3.0-beta.1: r"^https://gitlab.com/([-_0-9a-zA-Z]+)/([-_0-9a-zA-Z]+)(/|.git)?$" -consistent!(cargo_edit_1, r"^https://gitlab.com/([-_0-9a-zA-Z]+)/([-_0-9a-zA-Z]+)(/|.git)?$"); - -// cargo-disassemble-0.1.1: ".*" -consistent!(cargo_disassemble_0, ".*"); - -// cargo-demangle-0.1.2: r"(?m)(?P<symbol>_ZN[0-9]+.*E)" -consistent!(cargo_demangle_0, r"(?m)(?P<symbol>_ZN[0-9]+.*E)"); - -// cargo-coverage-annotations-0.1.5: r"^\s*\}(?:\)*;?|\s*else\s*\{)$" -consistent!(cargo_coverage_annotations_0, r"^\s*\}(?:\)*;?|\s*else\s*\{)$"); - -// cargo-urlcrate-1.0.1: "[\u{001b}\u{009b}][\\[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]" -consistent!(cargo_urlcrate_0, "[\u{001b}\u{009b}][\\[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]"); - -// cargo-script-0.2.8: r"^\s*\*( |$)" -consistent!(cargo_script_0, r"^\s*\*( |$)"); - -// cargo-script-0.2.8: r"^(\s+)" -consistent!(cargo_script_1, r"^(\s+)"); - -// cargo-script-0.2.8: r"/\*|\*/" -consistent!(cargo_script_2, r"/\*|\*/"); - -// cargo-script-0.2.8: r"^\s*//!" -consistent!(cargo_script_3, r"^\s*//!"); - -// cargo-script-0.2.8: r"^#![^\[].*?(\r\n|\n)" -consistent!(cargo_script_4, r"^#![^\[].*?(\r\n|\n)"); - -// cargo-update-1.5.2: r"cargo-install-update\.exe-v.+" -consistent!(cargo_update_0, r"cargo-install-update\.exe-v.+"); - -// canteen-0.4.1: r"^<(?:(int|uint|str|float|path):)?([\w_][a-zA-Z0-9_]*)>$" -consistent!(canteen_0, r"^<(?:(int|uint|str|float|path):)?([\w_][a-zA-Z0-9_]*)>$"); - -// thruster-cli-0.1.3: r"(.)([A-Z])" -consistent!(thruster_cli_0, r"(.)([A-Z])"); - -// thieves-cant-0.1.0: "([Z]+)$" -consistent!(thieves_cant_0, "([Z]+)$"); - -// codeowners-0.1.3: r"^@\S+/\S+" -consistent!(codeowners_0, r"^@\S+/\S+"); - -// codeowners-0.1.3: r"^@\S+" -consistent!(codeowners_1, r"^@\S+"); - -// codeowners-0.1.3: r"^\S+@\S+" -consistent!(codeowners_2, r"^\S+@\S+"); - -// conserve-0.4.2: r"^b0000 {21} complete 20[-0-9T:+]+\s +\d+s\n$" -consistent!(conserve_0, r"^b0000 {21} complete 20[-0-9T:+]+\s +\d+s\n$"); - -// commodore-0.3.0: r"(?P<greeting>\S+?) (?P<name>\S+?)$" -consistent!(commodore_0, r"(?P<greeting>\S+?) (?P<name>\S+?)$"); - -// corollary-0.3.0: r"([ \t]*)```haskell([\s\S]*?)```" -consistent!(corollary_0, r"([ \t]*)```haskell([\s\S]*?)```"); - -// corollary-0.3.0: r"\b((?:a|b|t)\d*)\b" -consistent!(corollary_1, r"\b((?:a|b|t)\d*)\b"); - -// colorizex-0.1.3: "NB" -consistent!(colorizex_0, "NB"); - -// colorstring-0.0.1: r"(?i)\[[a-z0-9_-]+\]" -consistent!(colorstring_0, r"(?i)\[[a-z0-9_-]+\]"); - -// colorstring-0.0.1: r"^(?i)(\[[a-z0-9_-]+\])+" -consistent!(colorstring_1, r"^(?i)(\[[a-z0-9_-]+\])+"); - -// cosmogony-0.3.0: "name:(.+)" -consistent!(cosmogony_0, "name:(.+)"); - -// cobalt-bin-0.12.1: r"(?m:^ {0,3}\[[^\]]+\]:.+$)" -consistent!(cobalt_bin_0, r"(?m:^ {0,3}\[[^\]]+\]:.+$)"); - -// comrak-0.2.12: r"[^\p{L}\p{M}\p{N}\p{Pc} -]" -consistent!(comrak_0, r"[^\p{L}\p{M}\p{N}\p{Pc} -]"); - -// content-blocker-0.2.3: "" -consistent!(content_blocker_0, ""); - -// content-blocker-0.2.3: "(?i)hi" -consistent!(content_blocker_1, "(?i)hi"); - -// content-blocker-0.2.3: "http[s]?://domain.org" -consistent!(content_blocker_2, "http[s]?://domain.org"); - -// content-blocker-0.2.3: "(?i)http[s]?://domain.org" -consistent!(content_blocker_3, "(?i)http[s]?://domain.org"); - -// content-blocker-0.2.3: "http://domain.org" -consistent!(content_blocker_4, "http://domain.org"); - -// content-blocker-0.2.3: "http://domain.org" -consistent!(content_blocker_5, "http://domain.org"); - -// content-blocker-0.2.3: "ad.html" -consistent!(content_blocker_6, "ad.html"); - -// content-blocker-0.2.3: "ad.html" -consistent!(content_blocker_7, "ad.html"); - -// content-blocker-0.2.3: "http://domain.org" -consistent!(content_blocker_8, "http://domain.org"); - -// content-blocker-0.2.3: "http://domain.org/nocookies.sjs" -consistent!(content_blocker_9, "http://domain.org/nocookies.sjs"); - -// content-blocker-0.2.3: "http://domain.org/nocookies.sjs" -consistent!(content_blocker_10, "http://domain.org/nocookies.sjs"); - -// content-blocker-0.2.3: "http://domain.org/hideme.jpg" -consistent!(content_blocker_11, "http://domain.org/hideme.jpg"); - -// content-blocker-0.2.3: "http://domain.org/ok.html" -consistent!(content_blocker_12, "http://domain.org/ok.html"); - -// content-blocker-0.2.3: "http://domain.org/ok.html\\?except_this=1" -consistent!(content_blocker_13, "http://domain.org/ok.html\\?except_this=1"); - -// victoria-dom-0.1.2: "[A-Za-z0-9=]" -consistent!(victoria_dom_0, "[A-Za-z0-9=]"); - -// numbat-1.0.0: r"^nsq://" -consistent!(numbat_0, r"^nsq://"); - -// airkorea-0.1.2: r"[\s\t\r\n]" -consistent!(airkorea_0, r"[\s\t\r\n]"); - -// airkorea-0.1.2: r"([\{\[,])|([\}\]])" -consistent!(airkorea_1, r"([\{\[,])|([\}\]])"); - -// airkorea-0.1.2: r"[^.\d]+$" -consistent!(airkorea_2, r"[^.\d]+$"); - -// rofl-0.0.1: r"\b" -// consistent!(rofl_0, r"\b"); - -// rogcat-0.2.15: r"--------- beginning of.*" -consistent!(rogcat_0, r"--------- beginning of.*"); - -// rogcat-0.2.15: r"a|e|i|o|u" -consistent!(rogcat_1, r"a|e|i|o|u"); - -// rogcat-0.2.15: r"^(\d+)([kMG])$" -consistent!(rogcat_2, r"^(\d+)([kMG])$"); - -// media_filename-0.1.4: "\\.([A-Za-z0-9]{2,4})$" -consistent!(media_filename_0, "\\.([A-Za-z0-9]{2,4})$"); - -// media_filename-0.1.4: "([0-9]{3,4}p|[0-9]{3,4}x[0-9]{3,4})" -consistent!(media_filename_1, "([0-9]{3,4}p|[0-9]{3,4}x[0-9]{3,4})"); - -// media_filename-0.1.4: "(?:^\\[([^]]+)\\]|- ?([^-]+)$)" -consistent!(media_filename_2, "(?:^\\[([^]]+)\\]|- ?([^-]+)$)"); - -// media_filename-0.1.4: "(?:[eE]([0-9]{2,3})|[^0-9A-Za-z]([0-9]{2,3})(?:v[0-9])?[^0-9A-Za-z])" -consistent!(media_filename_3, "(?:[eE]([0-9]{2,3})|[^0-9A-Za-z]([0-9]{2,3})(?:v[0-9])?[^0-9A-Za-z])"); - -// media_filename-0.1.4: "[sS]([0-9]{1,2})" -consistent!(media_filename_4, "[sS]([0-9]{1,2})"); - -// media_filename-0.1.4: "((?i)(?:PPV.)?[HP]DTV|(?:HD)?CAM|BRRIP|[^a-z]TS[^a-z]|(?:PPV )?WEB.?DL(?: DVDRip)?|HDRip|DVDRip|CamRip|W[EB]BRip|BluRay|BD|DVD|DvDScr|hdtv)" -consistent!(media_filename_5, "((?i)(?:PPV.)?[HP]DTV|(?:HD)?CAM|BRRIP|[^a-z]TS[^a-z]|(?:PPV )?WEB.?DL(?: DVDRip)?|HDRip|DVDRip|CamRip|W[EB]BRip|BluRay|BD|DVD|DvDScr|hdtv)"); - -// media_filename-0.1.4: "((19[0-9]|20[01])[0-9])" -consistent!(media_filename_6, "((19[0-9]|20[01])[0-9])"); - -// media_filename-0.1.4: "((?i)xvid|x264|h\\.?264)" -consistent!(media_filename_7, "((?i)xvid|x264|h\\.?264)"); - -// media_filename-0.1.4: "((?i)MP3|DD5\\.?1|Dual[- ]Audio|LiNE|DTS|AAC(?:\\.?2\\.0)?|AC3(?:\\.5\\.1)?)" -consistent!(media_filename_8, "((?i)MP3|DD5\\.?1|Dual[- ]Audio|LiNE|DTS|AAC(?:\\.?2\\.0)?|AC3(?:\\.5\\.1)?)"); - -// media_filename-0.1.4: "\\[([0-9A-F]{8})\\]" -consistent!(media_filename_9, "\\[([0-9A-F]{8})\\]"); - -// termimage-0.3.2: r"(\d+)[xX](\d+)" -consistent!(termimage_0, r"(\d+)[xX](\d+)"); - -// teensy-0.1.0: r".*(\d{4}-\d{2}-\d{2}).*" -consistent!(teensy_0, r".*(\d{4}-\d{2}-\d{2}).*"); - -// telescreen-0.1.3: r"<@(.+)>" -consistent!(telescreen_0, r"<@(.+)>"); - -// tempus_fugit-0.4.4: r"^(\d+)" -consistent!(tempus_fugit_0, r"^(\d+)"); - -// fselect-0.4.1: "(\\?|\\.|\\*|\\[|\\]|\\(|\\)|\\^|\\$)" -consistent!(fselect_0, "(\\?|\\.|\\*|\\[|\\]|\\(|\\)|\\^|\\$)"); - -// fselect-0.4.1: "(%|_|\\?|\\.|\\*|\\[|\\]|\\(|\\)|\\^|\\$)" -consistent!(fselect_1, "(%|_|\\?|\\.|\\*|\\[|\\]|\\(|\\)|\\^|\\$)"); - -// fs_eventbridge-0.1.0: r"^([A-Z]+)(?:\s(.+))?\s*" -consistent!(fs_eventbridge_0, r"^([A-Z]+)(?:\s(.+))?\s*"); - -// joseki-0.0.1: r"(\w{1,2})\[(.+?)\]" -consistent!(joseki_0, r"(\w{1,2})\[(.+?)\]"); - -// tweetr-0.2.1: r"(?i)in (\d+) (second|minute|hour|day|week)s?" -consistent!(tweetr_0, r"(?i)in (\d+) (second|minute|hour|day|week)s?"); - -// bullet_core-0.1.1: "^(?u:[0-9])+" -consistent!(bullet_core_0, "^(?u:[0-9])+"); - -// bullet_core-0.1.1: "^(?u:[0-9])+(?u:\\.)(?u:[0-9])+" -consistent!(bullet_core_1, "^(?u:[0-9])+(?u:\\.)(?u:[0-9])+"); - -// bullet_core-0.1.1: "^(?u:[A-Za-zª-ªµ-µº-ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬ-ˬˮ-ˮͰ-ʹͶ-ͷͺ-ͽͿ-ͿΆ-ΆΈ-ΊΌ-ΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙ-ՙա-ևא-תװ-ײؠ-يٮ-ٯٱ-ۓە-ەۥ-ۦۮ-ۯۺ-ۼۿ-ۿܐ-ܐܒ-ܯݍ-ޥޱ-ޱߊ-ߪߴ-ߵߺ-ߺࠀ-ࠕࠚ-ࠚࠤ-ࠤࠨ-ࠨࡀ-ࡘࢠ-ࢴऄ-हऽ-ऽॐ-ॐक़-ॡॱ-ঀঅ-ঌএ-ঐও-নপ-রল-লশ-হঽ-ঽৎ-ৎড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼-ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽ-ઽૐ-ૐૠ-ૡૹ-ૹଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽ-ଽଡ଼-ଢ଼ୟ-ୡୱ-ୱஃ-ஃஅ-ஊஎ-ஐஒ-கங-சஜ-ஜஞ-டண-தந-பம-ஹௐ-ௐఅ-ఌఎ-ఐఒ-నప-హఽ-ఽౘ-ౚౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ಽೞ-ೞೠ-ೡೱ-ೲഅ-ഌഎ-ഐഒ-ഺഽ-ഽൎ-ൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රල-ලව-ෆก-ะา-ำเ-ๆກ-ຂຄ-ຄງ-ຈຊ-ຊຍ-ຍດ-ທນ-ຟມ-ຣລ-ລວ-ວສ-ຫອ-ະາ-ຳຽ-ຽເ-ໄໆ-ໆໜ-ໟༀ-ༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ-ဿၐ-ၕၚ-ၝၡ-ၡၥ-ၦၮ-ၰၵ-ႁႎ-ႎႠ-ჅჇ-ჇჍ-Ⴭა-ჺჼ-ቈቊ-ቍቐ-ቖቘ-ቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀ-ዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗ-ៗៜ-ៜᠠ-ᡷᢀ-ᢨᢪ-ᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧ-ᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮ-ᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵ-ᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙ-ὙὛ-ὛὝ-ὝὟ-ώᾀ-ᾴᾶ-ᾼι-ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱ-ⁱⁿ-ⁿₐ-ₜℂ-ℂℇ-ℇℊ-ℓℕ-ℕℙ-ℝℤ-ℤΩ-Ωℨ-ℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ-ⅎↃ-ↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲ-ⳳⴀ-ⴥⴧ-ⴧⴭ-ⴭⴰ-ⵧⵯ-ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ-ⸯ々-〆〱-〵〻-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪ-ꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻ-ꣻꣽ-ꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏ-ꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺ-ꩺꩾ-ꪯꪱ-ꪱꪵ-ꪶꪹ-ꪽꫀ-ꫀꫂ-ꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-יִײַ-ﬨשׁ-זּטּ-לּמּ-מּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼-𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌰-𐍀𐍂-𐍉𐍐-𐍵𐎀-𐎝𐎠-𐏃𐏈-𐏏𐐀-𐒝𐔀-𐔧𐔰-𐕣𐘀-𐜶𐝀-𐝕𐝠-𐝧𐠀-𐠅𐠈-𐠈𐠊-𐠵𐠷-𐠸𐠼-𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴-𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾-𐦿𐨀-𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨳𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𑀃-𑀷𑂃-𑂯𑃐-𑃨𑄃-𑄦𑅐-𑅲𑅶-𑅶𑆃-𑆲𑇁-𑇄𑇚-𑇚𑇜-𑇜𑈀-𑈑𑈓-𑈫𑊀-𑊆𑊈-𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲-𑌳𑌵-𑌹𑌽-𑌽𑍐-𑍐𑍝-𑍡𑒀-𑒯𑓄-𑓅𑓇-𑓇𑖀-𑖮𑗘-𑗛𑘀-𑘯𑙄-𑙄𑚀-𑚪𑜀-𑜙𑢠-𑣟𑣿-𑣿𑫀-𑫸𒀀-𒎙𒒀-𒕃𓀀-𓐮𔐀-𔙆𖠀-𖨸𖩀-𖩞𖫐-𖫭𖬀-𖬯𖭀-𖭃𖭣-𖭷𖭽-𖮏𖼀-𖽄𖽐-𖽐𖾓-𖾟𛀀-𛀁𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔𝑖-𝒜𝒞-𝒟𝒢-𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒹𝒻-𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆-𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𞠀-𞣄𞸀-𞸃𞸅-𞸟𞸡-𞸢𞸤-𞸤𞸧-𞸧𞸩-𞸲𞸴-𞸷𞸹-𞸹𞸻-𞸻𞹂-𞹂𞹇-𞹇𞹉-𞹉𞹋-𞹋𞹍-𞹏𞹑-𞹒𞹔-𞹔𞹗-𞹗𞹙-𞹙𞹛-𞹛𞹝-𞹝𞹟-𞹟𞹡-𞹢𞹤-𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾-𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛖𪜀-𫜴𫝀-𫠝𫠠-𬺡丽-𪘀])+" -consistent!(bullet_core_2, "^(?u:[A-Za-zª-ªµ-µº-ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬ-ˬˮ-ˮͰ-ʹͶ-ͷͺ-ͽͿ-ͿΆ-ΆΈ-ΊΌ-ΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙ-ՙա-ևא-תװ-ײؠ-يٮ-ٯٱ-ۓە-ەۥ-ۦۮ-ۯۺ-ۼۿ-ۿܐ-ܐܒ-ܯݍ-ޥޱ-ޱߊ-ߪߴ-ߵߺ-ߺࠀ-ࠕࠚ-ࠚࠤ-ࠤࠨ-ࠨࡀ-ࡘࢠ-ࢴऄ-हऽ-ऽॐ-ॐक़-ॡॱ-ঀঅ-ঌএ-ঐও-নপ-রল-লশ-হঽ-ঽৎ-ৎড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼-ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽ-ઽૐ-ૐૠ-ૡૹ-ૹଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽ-ଽଡ଼-ଢ଼ୟ-ୡୱ-ୱஃ-ஃஅ-ஊஎ-ஐஒ-கங-சஜ-ஜஞ-டண-தந-பம-ஹௐ-ௐఅ-ఌఎ-ఐఒ-నప-హఽ-ఽౘ-ౚౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ಽೞ-ೞೠ-ೡೱ-ೲഅ-ഌഎ-ഐഒ-ഺഽ-ഽൎ-ൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රල-ලව-ෆก-ะา-ำเ-ๆກ-ຂຄ-ຄງ-ຈຊ-ຊຍ-ຍດ-ທນ-ຟມ-ຣລ-ລວ-ວສ-ຫອ-ະາ-ຳຽ-ຽເ-ໄໆ-ໆໜ-ໟༀ-ༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ-ဿၐ-ၕၚ-ၝၡ-ၡၥ-ၦၮ-ၰၵ-ႁႎ-ႎႠ-ჅჇ-ჇჍ-Ⴭა-ჺჼ-ቈቊ-ቍቐ-ቖቘ-ቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀ-ዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗ-ៗៜ-ៜᠠ-ᡷᢀ-ᢨᢪ-ᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧ-ᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮ-ᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵ-ᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙ-ὙὛ-ὛὝ-ὝὟ-ώᾀ-ᾴᾶ-ᾼι-ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱ-ⁱⁿ-ⁿₐ-ₜℂ-ℂℇ-ℇℊ-ℓℕ-ℕℙ-ℝℤ-ℤΩ-Ωℨ-ℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ-ⅎↃ-ↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲ-ⳳⴀ-ⴥⴧ-ⴧⴭ-ⴭⴰ-ⵧⵯ-ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ-ⸯ々-〆〱-〵〻-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪ-ꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻ-ꣻꣽ-ꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏ-ꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺ-ꩺꩾ-ꪯꪱ-ꪱꪵ-ꪶꪹ-ꪽꫀ-ꫀꫂ-ꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-יִײַ-ﬨשׁ-זּטּ-לּמּ-מּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼-𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌰-𐍀𐍂-𐍉𐍐-𐍵𐎀-𐎝𐎠-𐏃𐏈-𐏏𐐀-𐒝𐔀-𐔧𐔰-𐕣𐘀-𐜶𐝀-𐝕𐝠-𐝧𐠀-𐠅𐠈-𐠈𐠊-𐠵𐠷-𐠸𐠼-𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴-𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾-𐦿𐨀-𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨳𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𑀃-𑀷𑂃-𑂯𑃐-𑃨𑄃-𑄦𑅐-𑅲𑅶-𑅶𑆃-𑆲𑇁-𑇄𑇚-𑇚𑇜-𑇜𑈀-𑈑𑈓-𑈫𑊀-𑊆𑊈-𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲-𑌳𑌵-𑌹𑌽-𑌽𑍐-𑍐𑍝-𑍡𑒀-𑒯𑓄-𑓅𑓇-𑓇𑖀-𑖮𑗘-𑗛𑘀-𑘯𑙄-𑙄𑚀-𑚪𑜀-𑜙𑢠-𑣟𑣿-𑣿𑫀-𑫸𒀀-𒎙𒒀-𒕃𓀀-𓐮𔐀-𔙆𖠀-𖨸𖩀-𖩞𖫐-𖫭𖬀-𖬯𖭀-𖭃𖭣-𖭷𖭽-𖮏𖼀-𖽄𖽐-𖽐𖾓-𖾟𛀀-𛀁𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔𝑖-𝒜𝒞-𝒟𝒢-𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒹𝒻-𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆-𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𞠀-𞣄𞸀-𞸃𞸅-𞸟𞸡-𞸢𞸤-𞸤𞸧-𞸧𞸩-𞸲𞸴-𞸷𞸹-𞸹𞸻-𞸻𞹂-𞹂𞹇-𞹇𞹉-𞹉𞹋-𞹋𞹍-𞹏𞹑-𞹒𞹔-𞹔𞹗-𞹗𞹙-𞹙𞹛-𞹛𞹝-𞹝𞹟-𞹟𞹡-𞹢𞹤-𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾-𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛖𪜀-𫜴𫝀-𫠝𫠠-𬺡丽-𪘀])+"); - -// bullet_core-0.1.1: "^(?u:d/d)((?u:[A-Za-zª-ªµ-µº-ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬ-ˬˮ-ˮͰ-ʹͶ-ͷͺ-ͽͿ-ͿΆ-ΆΈ-ΊΌ-ΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙ-ՙա-ևא-תװ-ײؠ-يٮ-ٯٱ-ۓە-ەۥ-ۦۮ-ۯۺ-ۼۿ-ۿܐ-ܐܒ-ܯݍ-ޥޱ-ޱߊ-ߪߴ-ߵߺ-ߺࠀ-ࠕࠚ-ࠚࠤ-ࠤࠨ-ࠨࡀ-ࡘࢠ-ࢴऄ-हऽ-ऽॐ-ॐक़-ॡॱ-ঀঅ-ঌএ-ঐও-নপ-রল-লশ-হঽ-ঽৎ-ৎড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼-ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽ-ઽૐ-ૐૠ-ૡૹ-ૹଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽ-ଽଡ଼-ଢ଼ୟ-ୡୱ-ୱஃ-ஃஅ-ஊஎ-ஐஒ-கங-சஜ-ஜஞ-டண-தந-பம-ஹௐ-ௐఅ-ఌఎ-ఐఒ-నప-హఽ-ఽౘ-ౚౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ಽೞ-ೞೠ-ೡೱ-ೲഅ-ഌഎ-ഐഒ-ഺഽ-ഽൎ-ൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රල-ලව-ෆก-ะา-ำเ-ๆກ-ຂຄ-ຄງ-ຈຊ-ຊຍ-ຍດ-ທນ-ຟມ-ຣລ-ລວ-ວສ-ຫອ-ະາ-ຳຽ-ຽເ-ໄໆ-ໆໜ-ໟༀ-ༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ-ဿၐ-ၕၚ-ၝၡ-ၡၥ-ၦၮ-ၰၵ-ႁႎ-ႎႠ-ჅჇ-ჇჍ-Ⴭა-ჺჼ-ቈቊ-ቍቐ-ቖቘ-ቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀ-ዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗ-ៗៜ-ៜᠠ-ᡷᢀ-ᢨᢪ-ᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧ-ᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮ-ᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵ-ᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙ-ὙὛ-ὛὝ-ὝὟ-ώᾀ-ᾴᾶ-ᾼι-ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱ-ⁱⁿ-ⁿₐ-ₜℂ-ℂℇ-ℇℊ-ℓℕ-ℕℙ-ℝℤ-ℤΩ-Ωℨ-ℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ-ⅎↃ-ↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲ-ⳳⴀ-ⴥⴧ-ⴧⴭ-ⴭⴰ-ⵧⵯ-ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ-ⸯ々-〆〱-〵〻-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪ-ꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻ-ꣻꣽ-ꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏ-ꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺ-ꩺꩾ-ꪯꪱ-ꪱꪵ-ꪶꪹ-ꪽꫀ-ꫀꫂ-ꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-יִײַ-ﬨשׁ-זּטּ-לּמּ-מּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼-𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌰-𐍀𐍂-𐍉𐍐-𐍵𐎀-𐎝𐎠-𐏃𐏈-𐏏𐐀-𐒝𐔀-𐔧𐔰-𐕣𐘀-𐜶𐝀-𐝕𐝠-𐝧𐠀-𐠅𐠈-𐠈𐠊-𐠵𐠷-𐠸𐠼-𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴-𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾-𐦿𐨀-𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨳𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𑀃-𑀷𑂃-𑂯𑃐-𑃨𑄃-𑄦𑅐-𑅲𑅶-𑅶𑆃-𑆲𑇁-𑇄𑇚-𑇚𑇜-𑇜𑈀-𑈑𑈓-𑈫𑊀-𑊆𑊈-𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲-𑌳𑌵-𑌹𑌽-𑌽𑍐-𑍐𑍝-𑍡𑒀-𑒯𑓄-𑓅𑓇-𑓇𑖀-𑖮𑗘-𑗛𑘀-𑘯𑙄-𑙄𑚀-𑚪𑜀-𑜙𑢠-𑣟𑣿-𑣿𑫀-𑫸𒀀-𒎙𒒀-𒕃𓀀-𓐮𔐀-𔙆𖠀-𖨸𖩀-𖩞𖫐-𖫭𖬀-𖬯𖭀-𖭃𖭣-𖭷𖭽-𖮏𖼀-𖽄𖽐-𖽐𖾓-𖾟𛀀-𛀁𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔𝑖-𝒜𝒞-𝒟𝒢-𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒹𝒻-𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆-𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𞠀-𞣄𞸀-𞸃𞸅-𞸟𞸡-𞸢𞸤-𞸤𞸧-𞸧𞸩-𞸲𞸴-𞸷𞸹-𞸹𞸻-𞸻𞹂-𞹂𞹇-𞹇𞹉-𞹉𞹋-𞹋𞹍-𞹏𞹑-𞹒𞹔-𞹔𞹗-𞹗𞹙-𞹙𞹛-𞹛𞹝-𞹝𞹟-𞹟𞹡-𞹢𞹤-𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾-𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛖𪜀-𫜴𫝀-𫠝𫠠-𬺡丽-𪘀])+)" -consistent!(bullet_core_3, "^(?u:d/d)((?u:[A-Za-zª-ªµ-µº-ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬ-ˬˮ-ˮͰ-ʹͶ-ͷͺ-ͽͿ-ͿΆ-ΆΈ-ΊΌ-ΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙ-ՙա-ևא-תװ-ײؠ-يٮ-ٯٱ-ۓە-ەۥ-ۦۮ-ۯۺ-ۼۿ-ۿܐ-ܐܒ-ܯݍ-ޥޱ-ޱߊ-ߪߴ-ߵߺ-ߺࠀ-ࠕࠚ-ࠚࠤ-ࠤࠨ-ࠨࡀ-ࡘࢠ-ࢴऄ-हऽ-ऽॐ-ॐक़-ॡॱ-ঀঅ-ঌএ-ঐও-নপ-রল-লশ-হঽ-ঽৎ-ৎড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼-ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽ-ઽૐ-ૐૠ-ૡૹ-ૹଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽ-ଽଡ଼-ଢ଼ୟ-ୡୱ-ୱஃ-ஃஅ-ஊஎ-ஐஒ-கங-சஜ-ஜஞ-டண-தந-பம-ஹௐ-ௐఅ-ఌఎ-ఐఒ-నప-హఽ-ఽౘ-ౚౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ಽೞ-ೞೠ-ೡೱ-ೲഅ-ഌഎ-ഐഒ-ഺഽ-ഽൎ-ൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රල-ලව-ෆก-ะา-ำเ-ๆກ-ຂຄ-ຄງ-ຈຊ-ຊຍ-ຍດ-ທນ-ຟມ-ຣລ-ລວ-ວສ-ຫອ-ະາ-ຳຽ-ຽເ-ໄໆ-ໆໜ-ໟༀ-ༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ-ဿၐ-ၕၚ-ၝၡ-ၡၥ-ၦၮ-ၰၵ-ႁႎ-ႎႠ-ჅჇ-ჇჍ-Ⴭა-ჺჼ-ቈቊ-ቍቐ-ቖቘ-ቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀ-ዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗ-ៗៜ-ៜᠠ-ᡷᢀ-ᢨᢪ-ᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧ-ᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮ-ᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵ-ᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙ-ὙὛ-ὛὝ-ὝὟ-ώᾀ-ᾴᾶ-ᾼι-ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱ-ⁱⁿ-ⁿₐ-ₜℂ-ℂℇ-ℇℊ-ℓℕ-ℕℙ-ℝℤ-ℤΩ-Ωℨ-ℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ-ⅎↃ-ↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲ-ⳳⴀ-ⴥⴧ-ⴧⴭ-ⴭⴰ-ⵧⵯ-ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ-ⸯ々-〆〱-〵〻-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪ-ꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻ-ꣻꣽ-ꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏ-ꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺ-ꩺꩾ-ꪯꪱ-ꪱꪵ-ꪶꪹ-ꪽꫀ-ꫀꫂ-ꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-יִײַ-ﬨשׁ-זּטּ-לּמּ-מּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼-𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌰-𐍀𐍂-𐍉𐍐-𐍵𐎀-𐎝𐎠-𐏃𐏈-𐏏𐐀-𐒝𐔀-𐔧𐔰-𐕣𐘀-𐜶𐝀-𐝕𐝠-𐝧𐠀-𐠅𐠈-𐠈𐠊-𐠵𐠷-𐠸𐠼-𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴-𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾-𐦿𐨀-𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨳𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𑀃-𑀷𑂃-𑂯𑃐-𑃨𑄃-𑄦𑅐-𑅲𑅶-𑅶𑆃-𑆲𑇁-𑇄𑇚-𑇚𑇜-𑇜𑈀-𑈑𑈓-𑈫𑊀-𑊆𑊈-𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲-𑌳𑌵-𑌹𑌽-𑌽𑍐-𑍐𑍝-𑍡𑒀-𑒯𑓄-𑓅𑓇-𑓇𑖀-𑖮𑗘-𑗛𑘀-𑘯𑙄-𑙄𑚀-𑚪𑜀-𑜙𑢠-𑣟𑣿-𑣿𑫀-𑫸𒀀-𒎙𒒀-𒕃𓀀-𓐮𔐀-𔙆𖠀-𖨸𖩀-𖩞𖫐-𖫭𖬀-𖬯𖭀-𖭃𖭣-𖭷𖭽-𖮏𖼀-𖽄𖽐-𖽐𖾓-𖾟𛀀-𛀁𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔𝑖-𝒜𝒞-𝒟𝒢-𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒹𝒻-𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆-𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𞠀-𞣄𞸀-𞸃𞸅-𞸟𞸡-𞸢𞸤-𞸤𞸧-𞸧𞸩-𞸲𞸴-𞸷𞸹-𞸹𞸻-𞸻𞹂-𞹂𞹇-𞹇𞹉-𞹉𞹋-𞹋𞹍-𞹏𞹑-𞹒𞹔-𞹔𞹗-𞹗𞹙-𞹙𞹛-𞹛𞹝-𞹝𞹟-𞹟𞹡-𞹢𞹤-𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾-𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛖𪜀-𫜴𫝀-𫠝𫠠-𬺡丽-𪘀])+)"); - -// bullet_core-0.1.1: "^(?u:\\()" -consistent!(bullet_core_4, "^(?u:\\()"); - -// bullet_core-0.1.1: "^(?u:\\))" -consistent!(bullet_core_5, "^(?u:\\))"); - -// bullet_core-0.1.1: "^(?u:\\*)" -consistent!(bullet_core_6, "^(?u:\\*)"); - -// bullet_core-0.1.1: "^(?u:\\+)" -consistent!(bullet_core_7, "^(?u:\\+)"); - -// bullet_core-0.1.1: "^(?u:,)" -consistent!(bullet_core_8, "^(?u:,)"); - -// bullet_core-0.1.1: "^(?u:\\-)" -consistent!(bullet_core_9, "^(?u:\\-)"); - -// bullet_core-0.1.1: "^(?u:/)" -consistent!(bullet_core_10, "^(?u:/)"); - -// bullet_core-0.1.1: "^(?u:\\[)" -consistent!(bullet_core_11, "^(?u:\\[)"); - -// bullet_core-0.1.1: "^(?u:\\])" -consistent!(bullet_core_12, "^(?u:\\])"); - -// bullet_core-0.1.1: "^(?u:\\^)" -consistent!(bullet_core_13, "^(?u:\\^)"); - -// bullet_core-0.1.1: "^(?u:·)" -consistent!(bullet_core_14, "^(?u:·)"); - -// actix-web-0.6.13: "//+" -consistent!(actix_web_0, "//+"); - -// actix-web-0.6.13: "//+" -consistent!(actix_web_1, "//+"); - -// althea_kernel_interface-0.1.0: r"(\S*) .* (\S*) (REACHABLE|STALE|DELAY)" -consistent!(althea_kernel_interface_0, r"(\S*) .* (\S*) (REACHABLE|STALE|DELAY)"); - -// althea_kernel_interface-0.1.0: r"-s (.*) --ip6-dst (.*)/.* bcnt = (.*)" -consistent!(althea_kernel_interface_1, r"-s (.*) --ip6-dst (.*)/.* bcnt = (.*)"); - -// alcibiades-0.3.0: r"\buci(?:\s|$)" -consistent!(alcibiades_0, r"\buci(?:\s|$)"); - -// ruma-identifiers-0.11.0: r"\A[a-z0-9._=-]+\z" -consistent!(ruma_identifiers_0, r"\A[a-z0-9._=-]+\z"); - -// rusqbin-0.2.3: r"/rusqbins/((?i)[A-F0-9]{8}\-[A-F0-9]{4}\-4[A-F0-9]{3}\-[89AB][A-F0-9]{3}\-[A-F0-9]{12})$" -consistent!(rusqbin_0, r"/rusqbins/((?i)[A-F0-9]{8}\-[A-F0-9]{4}\-4[A-F0-9]{3}\-[89AB][A-F0-9]{3}\-[A-F0-9]{12})$"); - -// rusqbin-0.2.3: r"/rusqbins/((?i)[A-F0-9]{8}\-[A-F0-9]{4}\-4[A-F0-9]{3}\-[89AB][A-F0-9]{3}\-[A-F0-9]{12})/requests/?$" -consistent!(rusqbin_1, r"/rusqbins/((?i)[A-F0-9]{8}\-[A-F0-9]{4}\-4[A-F0-9]{3}\-[89AB][A-F0-9]{3}\-[A-F0-9]{12})/requests/?$"); - -// rust-install-0.0.4: r"^(nightly|beta|stable)(?:-(\d{4}-\d{2}-\d{2}))?$" -consistent!(rust_install_0, r"^(nightly|beta|stable)(?:-(\d{4}-\d{2}-\d{2}))?$"); - -// rust_inbox-0.0.5: "^+(.*)\r\n" -consistent!(rust_inbox_0, "^+(.*)\r\n"); - -// rust_inbox-0.0.5: r"^\* CAPABILITY (.*)\r\n" -consistent!(rust_inbox_1, r"^\* CAPABILITY (.*)\r\n"); - -// rust_inbox-0.0.5: r"^([a-zA-Z0-9]+) (OK|NO|BAD)(.*)" -consistent!(rust_inbox_2, r"^([a-zA-Z0-9]+) (OK|NO|BAD)(.*)"); - -// rust_inbox-0.0.5: r"^\* (\d+) EXISTS\r\n" -consistent!(rust_inbox_3, r"^\* (\d+) EXISTS\r\n"); - -// rust_inbox-0.0.5: r"^\* (\d+) RECENT\r\n" -consistent!(rust_inbox_4, r"^\* (\d+) RECENT\r\n"); - -// rust_inbox-0.0.5: r"^\* FLAGS (.+)\r\n" -consistent!(rust_inbox_5, r"^\* FLAGS (.+)\r\n"); - -// rust_inbox-0.0.5: r"^\* OK \[UNSEEN (\d+)\](.*)\r\n" -consistent!(rust_inbox_6, r"^\* OK \[UNSEEN (\d+)\](.*)\r\n"); - -// rust_inbox-0.0.5: r"^\* OK \[UIDVALIDITY (\d+)\](.*)\r\n" -consistent!(rust_inbox_7, r"^\* OK \[UIDVALIDITY (\d+)\](.*)\r\n"); - -// rust_inbox-0.0.5: r"^\* OK \[UIDNEXT (\d+)\](.*)\r\n" -consistent!(rust_inbox_8, r"^\* OK \[UIDNEXT (\d+)\](.*)\r\n"); - -// rust_inbox-0.0.5: r"^\* OK \[PERMANENTFLAGS (.+)\](.*)\r\n" -consistent!(rust_inbox_9, r"^\* OK \[PERMANENTFLAGS (.+)\](.*)\r\n"); - -// rustml-0.0.7: r"^[a-z]+ (\d+)$" -consistent!(rustml_0, r"^[a-z]+ (\d+)$"); - -// rustml-0.0.7: r"^[a-z]+ (\d+)$" -consistent!(rustml_1, r"^[a-z]+ (\d+)$"); - -// rustml-0.0.7: r"^[a-z]+ (\d+)$" -consistent!(rustml_2, r"^[a-z]+ (\d+)$"); - -// rustfmt-0.10.0: r"([^\\](\\\\)*)\\[\n\r][[:space:]]*" -consistent!(rustfmt_0, r"([^\\](\\\\)*)\\[\n\r][[:space:]]*"); - -// rustfmt-core-0.4.0: r"(^\s*$)|(^\s*//\s*rustfmt-[^:]+:\s*\S+)" -consistent!(rustfmt_core_0, r"(^\s*$)|(^\s*//\s*rustfmt-[^:]+:\s*\S+)"); - -// rustfmt-core-0.4.0: r"^## `([^`]+)`" -consistent!(rustfmt_core_1, r"^## `([^`]+)`"); - -// rustfmt-core-0.4.0: r"([^\\](\\\\)*)\\[\n\r][[:space:]]*" -consistent!(rustfmt_core_2, r"([^\\](\\\\)*)\\[\n\r][[:space:]]*"); - -// rustfmt-core-0.4.0: r"\s;" -consistent!(rustfmt_core_3, r"\s;"); - -// rust-enum-derive-0.4.0: r"^(0x)?([:digit:]+)$" -consistent!(rust_enum_derive_0, r"^(0x)?([:digit:]+)$"); - -// rust-enum-derive-0.4.0: r"^([:digit:]+)[:space:]*<<[:space:]*([:digit:]+)$" -consistent!(rust_enum_derive_1, r"^([:digit:]+)[:space:]*<<[:space:]*([:digit:]+)$"); - -// rust-enum-derive-0.4.0: r"^[:space:]*([[:alnum:]_]+)([:space:]*=[:space:]*([:graph:]+))?[:space:]*," -consistent!(rust_enum_derive_2, r"^[:space:]*([[:alnum:]_]+)([:space:]*=[:space:]*([:graph:]+))?[:space:]*,"); - -// rust-enum-derive-0.4.0: r"^#define[:space:]+([:graph:]+)[:space:]+([:graph:]+)" -consistent!(rust_enum_derive_3, r"^#define[:space:]+([:graph:]+)[:space:]+([:graph:]+)"); - -// rustsourcebundler-0.2.0: r"^\s*pub mod (.+);$" -consistent!(rustsourcebundler_0, r"^\s*pub mod (.+);$"); - -// rustsourcebundler-0.2.0: r"^\s*pub mod (.+);$" -consistent!(rustsourcebundler_1, r"^\s*pub mod (.+);$"); - -// rustfmt-nightly-0.8.2: r"([^\\](\\\\)*)\\[\n\r][[:space:]]*" -consistent!(rustfmt_nightly_0, r"([^\\](\\\\)*)\\[\n\r][[:space:]]*"); - -// rustfmt-nightly-0.8.2: r"\s;" -consistent!(rustfmt_nightly_1, r"\s;"); - -// rustache-0.1.0: r"(?s)(.*?)([ \t\r\n]*)(\{\{(\{?\S?\s*?[\w\.\s]*.*?\s*?\}?)\}\})([ \t\r\n]*)" -consistent!(rustache_0, r"(?s)(.*?)([ \t\r\n]*)(\{\{(\{?\S?\s*?[\w\.\s]*.*?\s*?\}?)\}\})([ \t\r\n]*)"); - -// rustfilt-0.2.0: r"_ZN[\$\._[:alnum:]]*" -consistent!(rustfilt_0, r"_ZN[\$\._[:alnum:]]*"); - -// rustache-lists-0.1.2: r"(?s)(.*?)([ \t\r\n]*)(\{\{(\{?\S?\s*?[\w\.\s]*.*?\s*?\}?)\}\})([ \t\r\n]*)" -consistent!(rustache_lists_0, r"(?s)(.*?)([ \t\r\n]*)(\{\{(\{?\S?\s*?[\w\.\s]*.*?\s*?\}?)\}\})([ \t\r\n]*)"); - -// rural-0.7.3: "(.+)=(.+)" -consistent!(rural_0, "(.+)=(.+)"); - -// rural-0.7.3: "(.*):(.+)" -consistent!(rural_1, "(.*):(.+)"); - -// rural-0.7.3: "(.+):=(.+)" -consistent!(rural_2, "(.+):=(.+)"); - -// rural-0.7.3: "(.*)==(.+)" -consistent!(rural_3, "(.*)==(.+)"); - -// rusoto_credential-0.11.0: r"^\[([^\]]+)\]$" -consistent!(rusoto_credential_0, r"^\[([^\]]+)\]$"); - -// rumblebars-0.3.0: "([:blank:]*)$" -consistent!(rumblebars_0, "([:blank:]*)$"); - -// rumblebars-0.3.0: "(\r?\n)[:blank:]*(\\{\\{~?[#!/](?:\\}?[^}])*\\}\\})[:blank:]*(:?\r?\n)?\\z" -consistent!(rumblebars_1, "(\r?\n)[:blank:]*(\\{\\{~?[#!/](?:\\}?[^}])*\\}\\})[:blank:]*(:?\r?\n)?\\z"); - -// rumblebars-0.3.0: "(\r?\n[:blank:]*)(\\{\\{~?>(?:\\}?[^}])*\\}\\})[:blank:]*(:?\r?\n)?\\z" -consistent!(rumblebars_2, "(\r?\n[:blank:]*)(\\{\\{~?>(?:\\}?[^}])*\\}\\})[:blank:]*(:?\r?\n)?\\z"); - -// rumblebars-0.3.0: "((?:[:blank:]|\r?\n)*)(\r?\n)[:blank:]*$" -consistent!(rumblebars_3, "((?:[:blank:]|\r?\n)*)(\r?\n)[:blank:]*$"); - -// rumblebars-0.3.0: "^([:blank:]*\r?\n)(.*)" -consistent!(rumblebars_4, "^([:blank:]*\r?\n)(.*)"); - -// diesel_cli-1.3.1: r"(?P<stamp>[\d-]*)_hello" -consistent!(diesel_cli_0, r"(?P<stamp>[\d-]*)_hello"); - -// dishub-0.1.1: r"(\d+)s" -consistent!(dishub_0, r"(\d+)s"); - -// spreadsheet_textconv-0.1.0: r"\n" -consistent!(spreadsheet_textconv_0, r"\n"); - -// spreadsheet_textconv-0.1.0: r"\r" -consistent!(spreadsheet_textconv_1, r"\r"); - -// spreadsheet_textconv-0.1.0: r"\t" -consistent!(spreadsheet_textconv_2, r"\t"); - -// split_aud-0.1.0: r"DELAY (-?\d+)ms" -consistent!(split_aud_0, r"DELAY (-?\d+)ms"); - -// split_aud-0.1.0: r"Trim\((\d+), ?(\d+)\)" -consistent!(split_aud_1, r"Trim\((\d+), ?(\d+)\)"); - -// spotrust-0.0.5: r"spotify:[a-z]+:[a-zA-Z0-9]+" -consistent!(spotrust_0, r"spotify:[a-z]+:[a-zA-Z0-9]+"); - -// spaceslugs-0.1.0: r"[^\x00-\x7F]" -consistent!(spaceslugs_0, r"[^\x00-\x7F]"); - -// spaceslugs-0.1.0: r"[']+" -consistent!(spaceslugs_1, r"[']+"); - -// spaceslugs-0.1.0: r"\W+" -consistent!(spaceslugs_2, r"\W+"); - -// spaceslugs-0.1.0: r"[ ]+" -consistent!(spaceslugs_3, r"[ ]+"); - -// space_email_api-0.1.1: "PHPSESSID=([0-9a-f]+)" -consistent!(space_email_api_0, "PHPSESSID=([0-9a-f]+)"); - -// lorikeet-0.7.0: "[^0-9.,]" -consistent!(lorikeet_0, "[^0-9.,]"); - -// claude-0.3.0: r"^(?:\b|(-)?)(\p{Currency_Symbol})?((?:(?:\d{1,3}[\.,])+\d{3})|\d+)(?:[\.,](\d{2}))?\b$" -consistent!(claude_0, r"^(?:\b|(-)?)(\p{Currency_Symbol})?((?:(?:\d{1,3}[\.,])+\d{3})|\d+)(?:[\.,](\d{2}))?\b$"); - -// clam-0.1.6: r"<%=\s*(.+?)\s*%>" -consistent!(clam_0, r"<%=\s*(.+?)\s*%>"); - -// classifier-0.0.3: r"(\s)" -consistent!(classifier_0, r"(\s)"); - -// click-0.3.2: r"(-----BEGIN .*-----\n)((?:(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)*\n)+)(-----END .*-----)" -consistent!(click_0, r"(-----BEGIN .*-----\n)((?:(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)*\n)+)(-----END .*-----)"); - -// click-0.3.2: r"-----BEGIN PRIVATE KEY-----" -consistent!(click_1, r"-----BEGIN PRIVATE KEY-----"); - -// ultrastar-txt-0.1.2: r"#([A-Z3a-z]*):(.*)" -consistent!(ultrastar_txt_0, r"#([A-Z3a-z]*):(.*)"); - -// ultrastar-txt-0.1.2: "^-\\s?(-?[0-9]+)\\s*$" -consistent!(ultrastar_txt_1, "^-\\s?(-?[0-9]+)\\s*$"); - -// ultrastar-txt-0.1.2: "^-\\s?(-?[0-9]+)\\s+(-?[0-9]+)" -consistent!(ultrastar_txt_2, "^-\\s?(-?[0-9]+)\\s+(-?[0-9]+)"); - -// ultrastar-txt-0.1.2: "^(.)\\s*(-?[0-9]+)\\s+(-?[0-9]+)\\s+(-?[0-9]+)\\s?(.*)" -consistent!(ultrastar_txt_3, "^(.)\\s*(-?[0-9]+)\\s+(-?[0-9]+)\\s+(-?[0-9]+)\\s?(.*)"); - -// ultrastar-txt-0.1.2: "^P\\s?(-?[0-9]+)" -consistent!(ultrastar_txt_4, "^P\\s?(-?[0-9]+)"); - -// db-accelerate-2.0.0: r"^template\.add($|\..+$)" -consistent!(db_accelerate_0, r"^template\.add($|\..+$)"); - -// db-accelerate-2.0.0: r"^template\.sub($|\..+$)" -consistent!(db_accelerate_1, r"^template\.sub($|\..+$)"); - -// sterling-0.3.0: r"(\d+)([cegps])" -consistent!(sterling_0, r"(\d+)([cegps])"); - -// stache-0.2.0: r"[^\w]" -consistent!(stache_0, r"[^\w]"); - -// strukt-0.1.0: "\"([<>]?)([xcbB\\?hHiIlLqQfdspP]*)\"" -consistent!(strukt_0, "\"([<>]?)([xcbB\\?hHiIlLqQfdspP]*)\""); - -// steamid-ng-0.3.1: r"^STEAM_([0-4]):([0-1]):([0-9]{1,10})$" -consistent!(steamid_ng_0, r"^STEAM_([0-4]):([0-1]):([0-9]{1,10})$"); - -// steamid-ng-0.3.1: r"^\[([AGMPCgcLTIUai]):([0-4]):([0-9]{1,10})(:([0-9]+))?\]$" -consistent!(steamid_ng_1, r"^\[([AGMPCgcLTIUai]):([0-4]):([0-9]{1,10})(:([0-9]+))?\]$"); - -// strscan-0.1.1: r"^\w+" -consistent!(strscan_0, r"^\w+"); - -// strscan-0.1.1: r"^\s+" -consistent!(strscan_1, r"^\s+"); - -// strscan-0.1.1: r"^\w+" -consistent!(strscan_2, r"^\w+"); - -// strscan-0.1.1: r"^\s+" -consistent!(strscan_3, r"^\s+"); - -// strscan-0.1.1: r"^(\w+)\s+" -consistent!(strscan_4, r"^(\w+)\s+"); - -// tk-carbon-0.2.0: r"^([a-zA-Z0-9\.-]+)(?:\s+(\d+))$" -consistent!(tk_carbon_0, r"^([a-zA-Z0-9\.-]+)(?:\s+(\d+))$"); - -// tk-carbon-0.2.0: r"^([a-zA-Z0-9\.-]+)(?:\s+(\d+))$" -consistent!(tk_carbon_1, r"^([a-zA-Z0-9\.-]+)(?:\s+(\d+))$"); - -// evalrs-0.0.10: r"extern\s+crate\s+([a-z0-9_]+)\s*;(\s*//(.+))?" -consistent!(evalrs_0, r"extern\s+crate\s+([a-z0-9_]+)\s*;(\s*//(.+))?"); - -// evalrs-0.0.10: r"(?m)^# " -consistent!(evalrs_1, r"(?m)^# "); - -// evalrs-0.0.10: r"(?m)^\s*fn +main *\( *\)" -consistent!(evalrs_2, r"(?m)^\s*fn +main *\( *\)"); - -// evalrs-0.0.10: r"(extern\s+crate\s+[a-z0-9_]+\s*;)" -consistent!(evalrs_3, r"(extern\s+crate\s+[a-z0-9_]+\s*;)"); - -// gate_build-0.5.0: "(.*)_t([0-9]+)" -consistent!(gate_build_0, "(.*)_t([0-9]+)"); - -// rake-0.1.1: r"[^\P{P}-]|\s+-\s+" -consistent!(rake_0, r"[^\P{P}-]|\s+-\s+"); - -// rafy-0.2.1: r"^.*(?:(?:youtu\.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*" -consistent!(rafy_0, r"^.*(?:(?:youtu\.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*"); - -// raven-0.2.1: r"^(?P<protocol>.*?)://(?P<public_key>.*?):(?P<secret_key>.*?)@(?P<host>.*?)/(?P<path>.*/)?(?P<project_id>.*)$" -consistent!(raven_0, r"^(?P<protocol>.*?)://(?P<public_key>.*?):(?P<secret_key>.*?)@(?P<host>.*?)/(?P<path>.*/)?(?P<project_id>.*)$"); - -// rargs-0.2.0: r"\{[[:space:]]*[^{}]*[[:space:]]*\}" -consistent!(rargs_0, r"\{[[:space:]]*[^{}]*[[:space:]]*\}"); - -// rargs-0.2.0: r"^\{[[:space:]]*(?P<name>[[:word:]]*)[[:space:]]*\}$" -consistent!(rargs_1, r"^\{[[:space:]]*(?P<name>[[:word:]]*)[[:space:]]*\}$"); - -// rargs-0.2.0: r"^\{[[:space:]]*(?P<num>-?\d+)[[:space:]]*\}$" -consistent!(rargs_2, r"^\{[[:space:]]*(?P<num>-?\d+)[[:space:]]*\}$"); - -// rargs-0.2.0: r"^\{(?P<left>-?\d*)?\.\.(?P<right>-?\d*)?(?::(?P<sep>.*))?\}$" -consistent!(rargs_3, r"^\{(?P<left>-?\d*)?\.\.(?P<right>-?\d*)?(?::(?P<sep>.*))?\}$"); - -// rargs-0.2.0: r"(.*?)[[:space:]]+|(.*?)$" -consistent!(rargs_4, r"(.*?)[[:space:]]+|(.*?)$"); - -// indradb-lib-0.15.0: r"[a-zA-Z0-9]{8}" -consistent!(indradb_lib_0, r"[a-zA-Z0-9]{8}"); - -// fungi-lang-0.1.50: r"::" -consistent!(fungi_lang_0, r"::"); - -// nickel-0.10.1: "/hello/(?P<name>[a-zA-Z]+)" -consistent!(nickel_0, "/hello/(?P<name>[a-zA-Z]+)"); - -// nickel-0.10.1: "/hello/(?P<name>[a-zA-Z]+)" -consistent!(nickel_1, "/hello/(?P<name>[a-zA-Z]+)"); - -// pact_verifier-0.4.0: r"\{(\w+)\}" -consistent!(pact_verifier_0, r"\{(\w+)\}"); - -// pact_matching-0.4.1: "application/.*json" -consistent!(pact_matching_0, "application/.*json"); - -// pact_matching-0.4.1: "application/json.*" -consistent!(pact_matching_1, "application/json.*"); - -// pact_matching-0.4.1: "application/.*xml" -consistent!(pact_matching_2, "application/.*xml"); - -// pangu-0.2.0: "([\"'\\(\\[\\{{<\u{201c}])(\\s*)(.+?)(\\s*)([\"'\\)\\]\\}}>\u{201d}])" -consistent!(pangu_0, "([\"'\\(\\[\\{{<\u{201c}])(\\s*)(.+?)(\\s*)([\"'\\)\\]\\}}>\u{201d}])"); - -// pangu-0.2.0: "([\\(\\[\\{{<\u{201c}]+)(\\s*)(.+?)(\\s*)([\\)\\]\\}}>\u{201d}]+)" -consistent!(pangu_1, "([\\(\\[\\{{<\u{201c}]+)(\\s*)(.+?)(\\s*)([\\)\\]\\}}>\u{201d}]+)"); - -// parser-haskell-0.2.0: r"\{-[\s\S]*?-\}" -consistent!(parser_haskell_0, r"\{-[\s\S]*?-\}"); - -// parser-haskell-0.2.0: r"(?m);+\s*$" -consistent!(parser_haskell_1, r"(?m);+\s*$"); - -// parser-haskell-0.2.0: r"(?m)^#(if|ifn?def|endif|else|include|elif).*" -consistent!(parser_haskell_2, r"(?m)^#(if|ifn?def|endif|else|include|elif).*"); - -// parser-haskell-0.2.0: r"'([^'\\]|\\[A-Z]{1,3}|\\.)'" -consistent!(parser_haskell_3, r"'([^'\\]|\\[A-Z]{1,3}|\\.)'"); - -// parser-haskell-0.2.0: r"forall\s+(.*?)\." -consistent!(parser_haskell_4, r"forall\s+(.*?)\."); - -// html2md-0.2.1: "\\s{2,}" -consistent!(html2md_0, "\\s{2,}"); - -// html2md-0.2.1: "\\n{2,}" -consistent!(html2md_1, "\\n{2,}"); - -// html2md-0.2.1: "(?m)(\\S) $" -consistent!(html2md_2, "(?m)(\\S) $"); - -// html2md-0.2.1: "(?m)^[-*] " -consistent!(html2md_3, "(?m)^[-*] "); - -// ovpnfile-0.1.2: r"#.*$" -consistent!(ovpnfile_0, r"#.*$"); - -// ovpnfile-0.1.2: r"^<(\S+)>" -consistent!(ovpnfile_1, r"^<(\S+)>"); - -// ovpnfile-0.1.2: r"^</(\S+)>" -consistent!(ovpnfile_2, r"^</(\S+)>"); - -// screenruster-saver-fractal-0.1.1: r"#([:xdigit:]{2})([:xdigit:]{2})([:xdigit:]{2})" -consistent!(screenruster_saver_fractal_0, r"#([:xdigit:]{2})([:xdigit:]{2})([:xdigit:]{2})"); - -// scarlet-0.2.2: r"rgb\((?: *(\d{1,3}),)(?: *(\d{1,3}),)(?: *(\d{1,3}))\)" -consistent!(scarlet_0, r"rgb\((?: *(\d{1,3}),)(?: *(\d{1,3}),)(?: *(\d{1,3}))\)"); - -// cpp_to_rust_generator-0.2.0: r"^([\w:]+)<(.+)>$" -consistent!(cpp_to_rust_generator_0, r"^([\w:]+)<(.+)>$"); - -// cpp_to_rust_generator-0.2.0: r"^type-parameter-(\d+)-(\d+)$" -consistent!(cpp_to_rust_generator_1, r"^type-parameter-(\d+)-(\d+)$"); - -// cpp_to_rust_generator-0.2.0: r"^([\w~]+)<[^<>]+>$" -consistent!(cpp_to_rust_generator_2, r"^([\w~]+)<[^<>]+>$"); - -// cpp_to_rust_generator-0.2.0: r"(signals|Q_SIGNALS)\s*:" -consistent!(cpp_to_rust_generator_3, r"(signals|Q_SIGNALS)\s*:"); - -// cpp_to_rust_generator-0.2.0: r"(slots|Q_SLOTS)\s*:" -consistent!(cpp_to_rust_generator_4, r"(slots|Q_SLOTS)\s*:"); - -// cpp_to_rust_generator-0.2.0: r"(public|protected|private)\s*:" -consistent!(cpp_to_rust_generator_5, r"(public|protected|private)\s*:"); - -// cpp_to_rust-0.5.3: r"^([\w:]+)<(.+)>$" -consistent!(cpp_to_rust_0, r"^([\w:]+)<(.+)>$"); - -// cpp_to_rust-0.5.3: r"^type-parameter-(\d+)-(\d+)$" -consistent!(cpp_to_rust_1, r"^type-parameter-(\d+)-(\d+)$"); - -// cpp_to_rust-0.5.3: r"^([\w~]+)<[^<>]+>$" -consistent!(cpp_to_rust_2, r"^([\w~]+)<[^<>]+>$"); - -// cpp_to_rust-0.5.3: r"(signals|Q_SIGNALS)\s*:" -consistent!(cpp_to_rust_3, r"(signals|Q_SIGNALS)\s*:"); - -// cpp_to_rust-0.5.3: r"(slots|Q_SLOTS)\s*:" -consistent!(cpp_to_rust_4, r"(slots|Q_SLOTS)\s*:"); - -// cpp_to_rust-0.5.3: r"(public|protected|private)\s*:" -consistent!(cpp_to_rust_5, r"(public|protected|private)\s*:"); - -// fritzbox_logs-0.2.0: "(\\d{2}\\.\\d{2}\\.\\d{2}) (\\d{2}:\\d{2}:\\d{2}) (.*)" -consistent!(fritzbox_logs_0, "(\\d{2}\\.\\d{2}\\.\\d{2}) (\\d{2}:\\d{2}:\\d{2}) (.*)"); - -// fractal-matrix-api-3.29.0: r"mxc://(?P<server>[^/]+)/(?P<media>.+)" -consistent!(fractal_matrix_api_0, r"mxc://(?P<server>[^/]+)/(?P<media>.+)"); - -// smtp2go-0.1.4: r"^api-[a-zA-Z0-9]{32}$" -consistent!(smtp2go_0, r"^api-[a-zA-Z0-9]{32}$"); - -// pusher-0.3.1: r"^[-a-zA-Z0-9_=@,.;]+$" -consistent!(pusher_0, r"^[-a-zA-Z0-9_=@,.;]+$"); - -// pusher-0.3.1: r"\A\d+\.\d+\z" -consistent!(pusher_1, r"\A\d+\.\d+\z"); - -// bakervm-0.9.0: r"^\.(.+?) +?(.+)$" -consistent!(bakervm_0, r"^\.(.+?) +?(.+)$"); - -// bakervm-0.9.0: r"^\.([^\s]+)$" -consistent!(bakervm_1, r"^\.([^\s]+)$"); - -// bakervm-0.9.0: r"^include! +([^\s]+)$" -consistent!(bakervm_2, r"^include! +([^\s]+)$"); - -// bakervm-0.9.0: r"^@(\d+)$" -consistent!(bakervm_3, r"^@(\d+)$"); - -// bakervm-0.9.0: r"^true|false$" -consistent!(bakervm_4, r"^true|false$"); - -// bakervm-0.9.0: r"^(-?\d+)?\.[0-9]+$" -consistent!(bakervm_5, r"^(-?\d+)?\.[0-9]+$"); - -// bakervm-0.9.0: r"^(-?\d+)?$" -consistent!(bakervm_6, r"^(-?\d+)?$"); - -// bakervm-0.9.0: r"^#([0-9abcdefABCDEF]{6})$" -consistent!(bakervm_7, r"^#([0-9abcdefABCDEF]{6})$"); - -// bakervm-0.9.0: r"^'(.)'$" -consistent!(bakervm_8, r"^'(.)'$"); - -// bakervm-0.9.0: r"^\$vi\((\d+)\)$" -consistent!(bakervm_9, r"^\$vi\((\d+)\)$"); - -// bakervm-0.9.0: r"^\$key\((\d+)\)$" -consistent!(bakervm_10, r"^\$key\((\d+)\)$"); - -// banana-0.0.2: "(?P<type>[A-Z^']+) (?P<route>[^']+) HTTP/(?P<http>[^']+)" -consistent!(banana_0, "(?P<type>[A-Z^']+) (?P<route>[^']+) HTTP/(?P<http>[^']+)"); - -// serial-key-2.0.0: r"[A-F0-9]{8}" -consistent!(serial_key_0, r"[A-F0-9]{8}"); - -// serde-hjson-0.8.1: "[\\\\\"\x00-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]" -consistent!(serde_hjson_0, "[\\\\\"\x00-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]"); - -// serde-hjson-0.8.1: "[\x00-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]" -consistent!(serde_hjson_1, "[\x00-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]"); - -// serde-hjson-0.8.1: "'''|[\x00-\x09\x0b\x0c\x0e-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]" -consistent!(serde_hjson_2, "'''|[\x00-\x09\x0b\x0c\x0e-\x1f\x7f-\u{9f}\u{00ad}\u{0600}-\u{0604}\u{070f}\u{17b4}\u{17b5}\u{200c}-\u{200f}\u{2028}-\u{202f}\u{2060}-\u{206f}\u{feff}\u{fff0}-\u{ffff}]"); - -// serde-odbc-0.1.0: r"/todos/(?P<id>\d+)" -consistent!(serde_odbc_0, r"/todos/(?P<id>\d+)"); - -// sentry-0.6.0: r"^(?:_<)?([a-zA-Z0-9_]+?)(?:\.\.|::)" -consistent!(sentry_0, r"^(?:_<)?([a-zA-Z0-9_]+?)(?:\.\.|::)"); - -// sentiment-0.1.1: r"[^a-zA-Z0 -]+" -consistent!(sentiment_0, r"[^a-zA-Z0 -]+"); - -// sentiment-0.1.1: r" {2,}" -consistent!(sentiment_1, r" {2,}"); - -// verilog-0.0.1: r"(?m)//.*" -consistent!(verilog_0, r"(?m)//.*"); - -// verex-0.2.2: "(?P<robot>C3PO)" -consistent!(verex_0, "(?P<robot>C3PO)"); - -// handlebars-0.32.4: ">|<|\"|&" -consistent!(handlebars_0, ">|<|\"|&"); - -// haikunator-0.1.2: r"^\w+-\w+-[0123456789]{4}$" -consistent!(haikunator_0, r"^\w+-\w+-[0123456789]{4}$"); - -// haikunator-0.1.2: r"^\w+@\w+@[0123456789]{4}$" -consistent!(haikunator_1, r"^\w+@\w+@[0123456789]{4}$"); - -// haikunator-0.1.2: r"^\w+-\w+-[0123456789abcdef]{4}$" -consistent!(haikunator_2, r"^\w+-\w+-[0123456789abcdef]{4}$"); - -// haikunator-0.1.2: r"^\w+-\w+-[0123456789忠犬ハチ公]{10}$" -consistent!(haikunator_3, r"^\w+-\w+-[0123456789忠犬ハチ公]{10}$"); - -// haikunator-0.1.2: r"^\w+-\w+$" -consistent!(haikunator_4, r"^\w+-\w+$"); - -// haikunator-0.1.2: r"^\w+-\w+-[foo]{4}$" -consistent!(haikunator_5, r"^\w+-\w+-[foo]{4}$"); - -// haikunator-0.1.2: r"^\w+-\w+-[0123456789忠犬ハチ公]{5}$" -consistent!(haikunator_6, r"^\w+-\w+-[0123456789忠犬ハチ公]{5}$"); - -// bobbin-cli-0.8.3: r"(.*)" -consistent!(bobbin_cli_0, r"(.*)"); - -// bobbin-cli-0.8.3: r"rustc (.*)" -consistent!(bobbin_cli_1, r"rustc (.*)"); - -// bobbin-cli-0.8.3: r"cargo (.*)" -consistent!(bobbin_cli_2, r"cargo (.*)"); - -// bobbin-cli-0.8.3: r"xargo (.*)\n" -consistent!(bobbin_cli_3, r"xargo (.*)\n"); - -// bobbin-cli-0.8.3: r"Open On-Chip Debugger (.*)" -consistent!(bobbin_cli_4, r"Open On-Chip Debugger (.*)"); - -// bobbin-cli-0.8.3: r"arm-none-eabi-gcc \(GNU Tools for ARM Embedded Processors[^\)]*\) (.*)" -consistent!(bobbin_cli_5, r"arm-none-eabi-gcc \(GNU Tools for ARM Embedded Processors[^\)]*\) (.*)"); - -// bobbin-cli-0.8.3: r"(?m).*\nBasic Open Source SAM-BA Application \(BOSSA\) Version (.*)\n" -consistent!(bobbin_cli_6, r"(?m).*\nBasic Open Source SAM-BA Application \(BOSSA\) Version (.*)\n"); - -// bobbin-cli-0.8.3: r"(?m)SEGGER J-Link Commander (.*)\n" -consistent!(bobbin_cli_7, r"(?m)SEGGER J-Link Commander (.*)\n"); - -// bobbin-cli-0.8.3: r"(?m)Teensy Loader, Command Line, Version (.*)\n" -consistent!(bobbin_cli_8, r"(?m)Teensy Loader, Command Line, Version (.*)\n"); - -// bobbin-cli-0.8.3: r"dfu-util (.*)\n" -consistent!(bobbin_cli_9, r"dfu-util (.*)\n"); - -// borsholder-0.9.1: r"^/static/[\w.]+$" -consistent!(borsholder_0, r"^/static/[\w.]+$"); - -// borsholder-0.9.1: r"^/timeline/([0-9]+)$" -consistent!(borsholder_1, r"^/timeline/([0-9]+)$"); - -// fblog-1.0.1: "\u{001B}\\[[\\d;]*[^\\d;]" -consistent!(fblog_0, "\u{001B}\\[[\\d;]*[^\\d;]"); - -// fblog-1.0.1: "\u{001B}\\[[\\d;]*[^\\d;]" -consistent!(fblog_1, "\u{001B}\\[[\\d;]*[^\\d;]"); - -// toml-query-0.6.0: r"^\[\d+\]$" -consistent!(toml_query_0, r"^\[\d+\]$"); - -// todo-txt-1.1.0: r" (?P<key>[^\s]+):(?P<value>[^\s^/]+)" -consistent!(todo_txt_0, r" (?P<key>[^\s]+):(?P<value>[^\s^/]+)"); - -// findr-0.1.5: r"\band\b" -consistent!(findr_0, r"\band\b"); - -// findr-0.1.5: r"\bor\b" -consistent!(findr_1, r"\bor\b"); - -// findr-0.1.5: r"\bnot\b" -consistent!(findr_2, r"\bnot\b"); - -// file-sniffer-3.0.1: r".*?\.(a|la|lo|o|ll|keter|bc|dyn_o|out|d|rlib|crate|min\.js|hi|dyn_hi|S|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$" -consistent!(file_sniffer_0, r".*?\.(a|la|lo|o|ll|keter|bc|dyn_o|out|d|rlib|crate|min\.js|hi|dyn_hi|S|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$"); - -// file-sniffer-3.0.1: r".*?\.(stats|conf|h|cache.*|dat|pc|info)$" -consistent!(file_sniffer_1, r".*?\.(stats|conf|h|cache.*|dat|pc|info)$"); - -// file-sniffer-3.0.1: r".*?\.(exe|a|la|o|ll|keter|bc|dyn_o|out|d|rlib|crate|min\.js|hi|dyn_hi|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$" -consistent!(file_sniffer_2, r".*?\.(exe|a|la|o|ll|keter|bc|dyn_o|out|d|rlib|crate|min\.js|hi|dyn_hi|jsexe|webapp|js\.externs|ibc|toc|aux|fdb_latexmk|fls|egg-info|whl|js_a|js_hi|jld|ji|js_o|so.*|dump-.*|vmb|crx|orig|elmo|elmi|pyc|mod|p_hi|p_o|prof|tix)$"); - -// file-sniffer-3.0.1: r".*?\.(stats|conf|h|cache.*)$" -consistent!(file_sniffer_3, r".*?\.(stats|conf|h|cache.*)$"); - -// file-sniffer-3.0.1: r"(\.git|\.pijul|_darcs|\.hg)$" -consistent!(file_sniffer_4, r"(\.git|\.pijul|_darcs|\.hg)$"); - -// file_logger-0.1.0: "test" -consistent!(file_logger_0, "test"); - -// file_scanner-0.2.0: r"foo" -consistent!(file_scanner_0, r"foo"); - -// file_scanner-0.2.0: r"a+b" -consistent!(file_scanner_1, r"a+b"); - -// file_scanner-0.2.0: r"a[ab]*b" -consistent!(file_scanner_2, r"a[ab]*b"); - -// file_scanner-0.2.0: r"\s+" -consistent!(file_scanner_3, r"\s+"); - -// file_scanner-0.2.0: r"\s+" -consistent!(file_scanner_4, r"\s+"); - -// cellsplit-0.2.1: r"^\s*([^\s]+) %cellsplit<\d+>$" -consistent!(cellsplit_0, r"^\s*([^\s]+) %cellsplit<\d+>$"); - -// cellsplit-0.2.1: r"^\s*([^\s]+) %cellsplit<\d+>$" -consistent!(cellsplit_1, r"^\s*([^\s]+) %cellsplit<\d+>$"); - -// aterm-0.20.0: r"^[+\-]?[0-9]+" -consistent!(aterm_0, r"^[+\-]?[0-9]+"); - -// aterm-0.20.0: r"^[+\-]?[0-9]+\.[0-9]*([eE][+\-]?[0-9]+)?" -consistent!(aterm_1, r"^[+\-]?[0-9]+\.[0-9]*([eE][+\-]?[0-9]+)?"); - -// atarashii_imap-0.3.0: r"^[*] OK" -consistent!(atarashii_imap_0, r"^[*] OK"); - -// atarashii_imap-0.3.0: r"FLAGS\s\((.+)\)" -consistent!(atarashii_imap_1, r"FLAGS\s\((.+)\)"); - -// atarashii_imap-0.3.0: r"\[PERMANENTFLAGS\s\((.+)\)\]" -consistent!(atarashii_imap_2, r"\[PERMANENTFLAGS\s\((.+)\)\]"); - -// atarashii_imap-0.3.0: r"\[UIDVALIDITY\s(\d+)\]" -consistent!(atarashii_imap_3, r"\[UIDVALIDITY\s(\d+)\]"); - -// atarashii_imap-0.3.0: r"(\d+)\sEXISTS" -consistent!(atarashii_imap_4, r"(\d+)\sEXISTS"); - -// atarashii_imap-0.3.0: r"(\d+)\sRECENT" -consistent!(atarashii_imap_5, r"(\d+)\sRECENT"); - -// atarashii_imap-0.3.0: r"\[UNSEEN\s(\d+)\]" -consistent!(atarashii_imap_6, r"\[UNSEEN\s(\d+)\]"); - -// atarashii_imap-0.3.0: r"\[UIDNEXT\s(\d+)\]" -consistent!(atarashii_imap_7, r"\[UIDNEXT\s(\d+)\]"); - -// editorconfig-1.0.0: r"\\(\{|\})" -consistent!(editorconfig_0, r"\\(\{|\})"); - -// editorconfig-1.0.0: r"(^|[^\\])\\\|" -consistent!(editorconfig_1, r"(^|[^\\])\\\|"); - -// editorconfig-1.0.0: r"\[([^\]]*)$" -consistent!(editorconfig_2, r"\[([^\]]*)$"); - -// editorconfig-1.0.0: r"\[(.*/.*)\]" -consistent!(editorconfig_3, r"\[(.*/.*)\]"); - -// editorconfig-1.0.0: r"\{(-?\d+\\\.\\\.-?\d+)\}" -consistent!(editorconfig_4, r"\{(-?\d+\\\.\\\.-?\d+)\}"); - -// editorconfig-1.0.0: r"\{([^,]+)\}" -consistent!(editorconfig_5, r"\{([^,]+)\}"); - -// editorconfig-1.0.0: r"\{(([^\}].*)?(,|\|)(.*[^\\])?)\}" -consistent!(editorconfig_6, r"\{(([^\}].*)?(,|\|)(.*[^\\])?)\}"); - -// editorconfig-1.0.0: r"^/" -consistent!(editorconfig_7, r"^/"); - -// editorconfig-1.0.0: r"(^|[^\\])(\{|\})" -consistent!(editorconfig_8, r"(^|[^\\])(\{|\})"); - -// edmunge-1.0.0: "^#!.*\n" -consistent!(edmunge_0, "^#!.*\n"); - -// unicode_names2_macros-0.2.0: r"\\N\{(.*?)(?:\}|$)" -consistent!(unicode_names2_macros_0, r"\\N\{(.*?)(?:\}|$)"); - -// unidiff-0.2.1: r"^--- (?P<filename>[^\t\n]+)(?:\t(?P<timestamp>[^\n]+))?" -consistent!(unidiff_0, r"^--- (?P<filename>[^\t\n]+)(?:\t(?P<timestamp>[^\n]+))?"); - -// unidiff-0.2.1: r"^\+\+\+ (?P<filename>[^\t\n]+)(?:\t(?P<timestamp>[^\n]+))?" -consistent!(unidiff_1, r"^\+\+\+ (?P<filename>[^\t\n]+)(?:\t(?P<timestamp>[^\n]+))?"); - -// unidiff-0.2.1: r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[ ]?(.*)" -consistent!(unidiff_2, r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[ ]?(.*)"); - -// unidiff-0.2.1: r"^(?P<line_type>[- \n\+\\]?)(?P<value>.*)" -consistent!(unidiff_3, r"^(?P<line_type>[- \n\+\\]?)(?P<value>.*)"); - -// slippy-map-tiles-0.13.1: "/?(?P<zoom>[0-9]?[0-9])/(?P<x>[0-9]{1,10})/(?P<y>[0-9]{1,10})(\\.[a-zA-Z]{3,4})?$" -consistent!(slippy_map_tiles_0, "/?(?P<zoom>[0-9]?[0-9])/(?P<x>[0-9]{1,10})/(?P<y>[0-9]{1,10})(\\.[a-zA-Z]{3,4})?$"); - -// slippy-map-tiles-0.13.1: r"^(?P<minlon>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<minlat>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<maxlon>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<maxlat>-?[0-9]{1,3}(\.[0-9]{1,10})?)$" -consistent!(slippy_map_tiles_1, r"^(?P<minlon>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<minlat>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<maxlon>-?[0-9]{1,3}(\.[0-9]{1,10})?) (?P<maxlat>-?[0-9]{1,3}(\.[0-9]{1,10})?)$"); - -// slippy-map-tiles-0.13.1: r"^(?P<minlon>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<minlat>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<maxlon>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<maxlat>-?[0-9]{1,3}(\.[0-9]{1,10})?)$" -consistent!(slippy_map_tiles_2, r"^(?P<minlon>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<minlat>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<maxlon>-?[0-9]{1,3}(\.[0-9]{1,10})?),(?P<maxlat>-?[0-9]{1,3}(\.[0-9]{1,10})?)$"); - -// sonos-0.1.2: r"^https?://(.+?):1400/xml" -consistent!(sonos_0, r"^https?://(.+?):1400/xml"); - -// validator_derive-0.7.0: r"^[a-z]{2}$" -consistent!(validator_derive_0, r"^[a-z]{2}$"); - -// validator_derive-0.7.0: r"[a-z]{2}" -consistent!(validator_derive_1, r"[a-z]{2}"); - -// validator_derive-0.7.0: r"[a-z]{2}" -consistent!(validator_derive_2, r"[a-z]{2}"); - -// nginx-config-0.8.0: r"one of \d+ options" -consistent!(nginx_config_0, r"one of \d+ options"); - -// waltz-0.4.0: r"[\s,]" -consistent!(waltz_0, r"[\s,]"); - -// warheadhateus-0.2.1: r"^aws_access_key_id = (.*)" -consistent!(warheadhateus_0, r"^aws_access_key_id = (.*)"); - -// warheadhateus-0.2.1: r"^aws_secret_access_key = (.*)" -consistent!(warheadhateus_1, r"^aws_secret_access_key = (.*)"); - -// warheadhateus-0.2.1: r"^aws_access_key_id = (.*)" -consistent!(warheadhateus_2, r"^aws_access_key_id = (.*)"); - -// warheadhateus-0.2.1: r"^aws_secret_access_key = (.*)" -consistent!(warheadhateus_3, r"^aws_secret_access_key = (.*)"); - -// jieba-rs-0.2.2: r"([\u{4E00}-\u{9FD5}a-zA-Z0-9+#&\._%]+)" -consistent!(jieba_rs_0, r"([\u{4E00}-\u{9FD5}a-zA-Z0-9+#&\._%]+)"); - -// jieba-rs-0.2.2: r"(\r\n|\s)" -consistent!(jieba_rs_1, r"(\r\n|\s)"); - -// jieba-rs-0.2.2: "([\u{4E00}-\u{9FD5}]+)" -consistent!(jieba_rs_2, "([\u{4E00}-\u{9FD5}]+)"); - -// jieba-rs-0.2.2: r"[^a-zA-Z0-9+#\n]" -consistent!(jieba_rs_3, r"[^a-zA-Z0-9+#\n]"); - -// jieba-rs-0.2.2: r"([\u{4E00}-\u{9FD5}]+)" -consistent!(jieba_rs_4, r"([\u{4E00}-\u{9FD5}]+)"); - -// jieba-rs-0.2.2: r"([a-zA-Z0-9]+(?:.\d+)?%?)" -consistent!(jieba_rs_5, r"([a-zA-Z0-9]+(?:.\d+)?%?)"); - -// lalrpop-0.15.2: r"Span\([0-9 ,]*\)" -consistent!(lalrpop_0, r"Span\([0-9 ,]*\)"); - -// lalrpop-snap-0.15.2: r"Span\([0-9 ,]*\)" -consistent!(lalrpop_snap_0, r"Span\([0-9 ,]*\)"); - -// nlp-tokenize-0.1.0: r"[\S]+" -consistent!(nlp_tokenize_0, r"[\S]+"); - -// kbgpg-0.1.2: "[[:xdigit:]][70]" -consistent!(kbgpg_0, "[[:xdigit:]][70]"); - -// cdbd-0.1.1: r"^((?P<address>.*):)?(?P<port>\d+)$" -consistent!(cdbd_0, r"^((?P<address>.*):)?(?P<port>\d+)$"); - -// mbutiles-0.1.1: r"[\w\s=+-/]+\((\{(.|\n)*\})\);?" -consistent!(mbutiles_0, r"[\w\s=+-/]+\((\{(.|\n)*\})\);?"); - -// extrahop-0.2.5: r"^-\d+(?:ms|s|m|h|d|w|y)?$" -consistent!(extrahop_0, r"^-\d+(?:ms|s|m|h|d|w|y)?$"); - -// pippin-0.1.0: "^((?:.*)-)?ss(0|[1-9][0-9]*)\\.pip$" -consistent!(pippin_0, "^((?:.*)-)?ss(0|[1-9][0-9]*)\\.pip$"); - -// pippin-0.1.0: "^((?:.*)-)?ss(0|[1-9][0-9]*)-cl(0|[1-9][0-9]*)\\.piplog$" -consistent!(pippin_1, "^((?:.*)-)?ss(0|[1-9][0-9]*)-cl(0|[1-9][0-9]*)\\.piplog$"); - -// pippin-0.1.0: "^((?:.*)-)?ss(0|[1-9][0-9]*)\\.pip$" -consistent!(pippin_2, "^((?:.*)-)?ss(0|[1-9][0-9]*)\\.pip$"); - -// pippin-0.1.0: "^((?:.*)-)?ss(0|[1-9][0-9]*)-cl(0|[1-9][0-9]*)\\.piplog$" -consistent!(pippin_3, "^((?:.*)-)?ss(0|[1-9][0-9]*)-cl(0|[1-9][0-9]*)\\.piplog$"); - -// pippin-0.1.0: "^.*pn(0|[1-9][0-9]*)(-ss(0|[1-9][0-9]*)(\\.pip|-cl(0|[1-9][0-9]*)\\.piplog))?$" -consistent!(pippin_4, "^.*pn(0|[1-9][0-9]*)(-ss(0|[1-9][0-9]*)(\\.pip|-cl(0|[1-9][0-9]*)\\.piplog))?$"); - -// pippin-0.1.0: "^(.*)-ss(?:0|[1-9][0-9]*)(?:\\.pip|-cl(?:0|[1-9][0-9]*)\\.piplog)$" -consistent!(pippin_5, "^(.*)-ss(?:0|[1-9][0-9]*)(?:\\.pip|-cl(?:0|[1-9][0-9]*)\\.piplog)$"); - -// pinyin-0.3.0: r"(?i)[āáǎàēéěèōóǒòīíǐìūúǔùüǘǚǜńň]" -consistent!(pinyin_0, r"(?i)[āáǎàēéěèōóǒòīíǐìūúǔùüǘǚǜńň]"); - -// pinyin-0.3.0: r"([aeoiuvnm])([0-4])$" -consistent!(pinyin_1, r"([aeoiuvnm])([0-4])$"); - -// duration-parser-0.2.0: r"(?P<value>\d+)(?P<units>[a-z])" -consistent!(duration_parser_0, r"(?P<value>\d+)(?P<units>[a-z])"); - -// dutree-0.2.7: r"^\d+\D?$" -consistent!(dutree_0, r"^\d+\D?$"); - -// djangohashers-0.3.0: r"^[A-Za-z0-9]*$" -consistent!(djangohashers_0, r"^[A-Za-z0-9]*$"); - -// rtag-0.3.5: r"^[A-Z][A-Z0-9]{2,}$" -consistent!(rtag_0, r"^[A-Z][A-Z0-9]{2,}$"); - -// rtag-0.3.5: r"^http://www\.emusic\.com" -consistent!(rtag_1, r"^http://www\.emusic\.com"); - -// rtag-0.3.5: r"^[A-Z][A-Z0-9]{2,}" -consistent!(rtag_2, r"^[A-Z][A-Z0-9]{2,}"); - -// rtag-0.3.5: r"(^[\x{0}|\x{feff}|\x{fffe}]*|[\x{0}|\x{feff}|\x{fffe}]*$)" -consistent!(rtag_3, r"(^[\x{0}|\x{feff}|\x{fffe}]*|[\x{0}|\x{feff}|\x{fffe}]*$)"); - -// rtow-0.1.0: r"(\d+)[xX](\d+)" -consistent!(rtow_0, r"(\d+)[xX](\d+)"); - -// pleingres-sql-plugin-0.1.0: r"\$([a-zA-Z0-9_]+)" -consistent!(pleingres_sql_plugin_0, r"\$([a-zA-Z0-9_]+)"); - -// dono-2.0.0: "[\\n]+" -consistent!(dono_0, "[\\n]+"); - -// dono-2.0.0: "(?m)^\\n" -consistent!(dono_1, "(?m)^\\n"); - -// dono-2.0.0: "(?m)^\\n" -consistent!(dono_2, "(?m)^\\n"); - -// ssb-common-0.3.0: r"^[0-9A-Za-z\+/]{43}=\.ed25519$" -consistent!(ssb_common_0, r"^[0-9A-Za-z\+/]{43}=\.ed25519$"); - -// ssb-common-0.3.0: r"^[0-9A-Za-z\+/]{86}==\.ed25519$" -consistent!(ssb_common_1, r"^[0-9A-Za-z\+/]{86}==\.ed25519$"); - -// ssb-common-0.3.0: r"^[0-9A-Za-z\+/]{43}=\.sha256$" -consistent!(ssb_common_2, r"^[0-9A-Za-z\+/]{43}=\.sha256$"); - -// mozversion-0.1.3: r"^(?P<major>\d+)\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?(?:(?P<pre0>[a-z]+)(?P<pre1>\d*))?$" -consistent!(mozversion_0, r"^(?P<major>\d+)\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?(?:(?P<pre0>[a-z]+)(?P<pre1>\d*))?$"); - -// monger-0.5.6: r"^(\d+)\.(\d+)$" -consistent!(monger_0, r"^(\d+)\.(\d+)$"); - -// mongo_rub-0.0.2: r"^[rv]2\.6" -consistent!(mongo_rub_0, r"^[rv]2\.6"); - -// flow-0.3.5: "body value" -consistent!(flow_0, "body value"); - -// flow-0.3.5: "start marker" -consistent!(flow_1, "start marker"); - -// flow-0.3.5: "end marker" -consistent!(flow_2, "end marker"); - -// flow-0.3.5: "body value" -consistent!(flow_3, "body value"); - -// vobsub-0.2.3: "^([A-Za-z/ ]+): (.*)" -consistent!(vobsub_0, "^([A-Za-z/ ]+): (.*)"); - -// voidmap-1.1.2: r"#([^\s=]+)*" -consistent!(voidmap_0, r"#([^\s=]+)*"); - -// voidmap-1.1.2: r"#(\S+)*" -consistent!(voidmap_1, r"#(\S+)*"); - -// voidmap-1.1.2: r"#prio=(\d+)" -consistent!(voidmap_2, r"#prio=(\d+)"); - -// voidmap-1.1.2: r"\[(\S+)\]" -consistent!(voidmap_3, r"\[(\S+)\]"); - -// voidmap-1.1.2: r"#limit=(\d+)" -consistent!(voidmap_4, r"#limit=(\d+)"); - -// voidmap-1.1.2: r"#tagged=(\S+)" -consistent!(voidmap_5, r"#tagged=(\S+)"); - -// voidmap-1.1.2: r"#rev\b" -consistent!(voidmap_6, r"#rev\b"); - -// voidmap-1.1.2: r"#done\b" -consistent!(voidmap_7, r"#done\b"); - -// voidmap-1.1.2: r"#open\b" -consistent!(voidmap_8, r"#open\b"); - -// voidmap-1.1.2: r"#since=(\S+)" -consistent!(voidmap_9, r"#since=(\S+)"); - -// voidmap-1.1.2: r"#until=(\S+)" -consistent!(voidmap_10, r"#until=(\S+)"); - -// voidmap-1.1.2: r"#plot=(\S+)" -consistent!(voidmap_11, r"#plot=(\S+)"); - -// voidmap-1.1.2: r"#n=(\d+)" -consistent!(voidmap_12, r"#n=(\d+)"); - -// voidmap-1.1.2: r"(\S+)" -consistent!(voidmap_13, r"(\S+)"); - -// voidmap-1.1.2: r"(?P<y>\d+)y" -consistent!(voidmap_14, r"(?P<y>\d+)y"); - -// voidmap-1.1.2: r"(?P<m>\d+)m" -consistent!(voidmap_15, r"(?P<m>\d+)m"); - -// voidmap-1.1.2: r"(?P<w>\d+)w" -consistent!(voidmap_16, r"(?P<w>\d+)w"); - -// voidmap-1.1.2: r"(?P<d>\d+)d" -consistent!(voidmap_17, r"(?P<d>\d+)d"); - -// voidmap-1.1.2: r"(?P<h>\d+)h" -consistent!(voidmap_18, r"(?P<h>\d+)h"); - -// voidmap-1.1.2: r"C-(.)" -consistent!(voidmap_19, r"C-(.)"); - -// qt_generator-0.2.0: r"^\.\./qt[^/]+/" -consistent!(qt_generator_0, r"^\.\./qt[^/]+/"); - -// qt_generator-0.2.0: "(href|src)=\"([^\"]*)\"" -consistent!(qt_generator_1, "(href|src)=\"([^\"]*)\""); - -// kryptos-0.6.1: r"[01]{5}" -consistent!(kryptos_0, r"[01]{5}"); - -// cifar_10_loader-0.2.0: "data_batch_[1-5].bin" -consistent!(cifar_10_loader_0, "data_batch_[1-5].bin"); - -// cifar_10_loader-0.2.0: "test_batch.bin" -consistent!(cifar_10_loader_1, "test_batch.bin"); - -// circadian-0.6.0: r"^\d+.\d+s$" -consistent!(circadian_0, r"^\d+.\d+s$"); - -// circadian-0.6.0: r"^\d+:\d+$" -consistent!(circadian_1, r"^\d+:\d+$"); - -// circadian-0.6.0: r"^\d+:\d+m$" -consistent!(circadian_2, r"^\d+:\d+m$"); - -// cicada-0.8.1: r"!!" -consistent!(cicada_0, r"!!"); - -// cicada-0.8.1: r"^([^`]*)`([^`]+)`(.*)$" -consistent!(cicada_1, r"^([^`]*)`([^`]+)`(.*)$"); - -// cicada-0.8.1: r"\*+" -consistent!(cicada_2, r"\*+"); - -// cicada-0.8.1: r"([^\$]*)\$\{?([A-Za-z0-9\?\$_]+)\}?(.*)" -consistent!(cicada_3, r"([^\$]*)\$\{?([A-Za-z0-9\?\$_]+)\}?(.*)"); - -// cicada-0.8.1: r"^ *alias +([a-zA-Z0-9_\.-]+)=(.*)$" -consistent!(cicada_4, r"^ *alias +([a-zA-Z0-9_\.-]+)=(.*)$"); - -// vterm-sys-0.1.0: r"hi" -consistent!(vterm_sys_0, r"hi"); - -// skim-0.5.0: r".*?\t" -consistent!(skim_0, r".*?\t"); - -// skim-0.5.0: r".*?[\t ]" -consistent!(skim_1, r".*?[\t ]"); - -// skim-0.5.0: r"(\{-?[0-9.,q]*?})" -consistent!(skim_2, r"(\{-?[0-9.,q]*?})"); - -// skim-0.5.0: r"[ \t\n]+" -consistent!(skim_3, r"[ \t\n]+"); - -// skim-0.5.0: r"[ \t\n]+" -consistent!(skim_4, r"[ \t\n]+"); - -// skim-0.5.0: r"([^ |]+( +\| +[^ |]*)+)|( +)" -consistent!(skim_5, r"([^ |]+( +\| +[^ |]*)+)|( +)"); - -// skim-0.5.0: r" +\| +" -consistent!(skim_6, r" +\| +"); - -// skim-0.5.0: r"^(?P<left>-?\d+)?(?P<sep>\.\.)?(?P<right>-?\d+)?$" -consistent!(skim_7, r"^(?P<left>-?\d+)?(?P<sep>\.\.)?(?P<right>-?\d+)?$"); - -// skim-0.5.0: "," -consistent!(skim_8, ","); - -// skim-0.5.0: ".*?," -consistent!(skim_9, ".*?,"); - -// skim-0.5.0: ".*?," -consistent!(skim_10, ".*?,"); - -// skim-0.5.0: "," -consistent!(skim_11, ","); - -// skim-0.5.0: r"\x1B\[(?:([0-9]+;[0-9]+[Hf])|([0-9]+[ABCD])|(s|u|2J|K)|([0-9;]*m)|(=[0-9]+[hI]))" -consistent!(skim_12, r"\x1B\[(?:([0-9]+;[0-9]+[Hf])|([0-9]+[ABCD])|(s|u|2J|K)|([0-9;]*m)|(=[0-9]+[hI]))"); - -// egg-mode-text-1.14.7: r"[-_./]\z" -consistent!(egg_mode_text_0, r"[-_./]\z"); - -// java-properties-1.1.1: "^[ \t\r\n\x0c]*[#!]" -consistent!(java_properties_0, "^[ \t\r\n\x0c]*[#!]"); - -// java-properties-1.1.1: r"^[ \t\x0c]*[#!][^\r\n]*$" -consistent!(java_properties_1, r"^[ \t\x0c]*[#!][^\r\n]*$"); - -// java-properties-1.1.1: r"^([ \t\x0c]*[:=][ \t\x0c]*|[ \t\x0c]+)$" -consistent!(java_properties_2, r"^([ \t\x0c]*[:=][ \t\x0c]*|[ \t\x0c]+)$"); - -// ipaddress-0.1.2: r":.+\." -consistent!(ipaddress_0, r":.+\."); - -// ipaddress-0.1.2: r"\." -consistent!(ipaddress_1, r"\."); - -// ipaddress-0.1.2: r":" -consistent!(ipaddress_2, r":"); - -// iptables-0.2.2: r"v(\d+)\.(\d+)\.(\d+)" -consistent!(iptables_0, r"v(\d+)\.(\d+)\.(\d+)"); - -// rsure-0.8.1: r"^([^-]+)-(.*)\.dat\.gz$" -consistent!(rsure_0, r"^([^-]+)-(.*)\.dat\.gz$"); - -// rs-jsonpath-0.1.0: "^(.*?)(<=|<|==|>=|>)(.*?)$" -consistent!(rs_jsonpath_0, "^(.*?)(<=|<|==|>=|>)(.*?)$"); - -// oatie-0.3.0: r"(\n|^)(\w+):([\n\w\W]+?)(\n(?:\w)|(\n\]))" -consistent!(oatie_0, r"(\n|^)(\w+):([\n\w\W]+?)(\n(?:\w)|(\n\]))"); - -// weld-0.2.0: "#.*$" -consistent!(weld_0, "#.*$"); - -// weld-0.2.0: r"^[A-Za-z$_][A-Za-z0-9$_]*$" -consistent!(weld_1, r"^[A-Za-z$_][A-Za-z0-9$_]*$"); - -// weld-0.2.0: r"^[0-9]+[cC]$" -consistent!(weld_2, r"^[0-9]+[cC]$"); - -// weld-0.2.0: r"^0b[0-1]+[cC]$" -consistent!(weld_3, r"^0b[0-1]+[cC]$"); - -// weld-0.2.0: r"^0x[0-9a-fA-F]+[cC]$" -consistent!(weld_4, r"^0x[0-9a-fA-F]+[cC]$"); - -// weld-0.2.0: r"^[0-9]+$" -consistent!(weld_5, r"^[0-9]+$"); - -// weld-0.2.0: r"^0b[0-1]+$" -consistent!(weld_6, r"^0b[0-1]+$"); - -// weld-0.2.0: r"^0x[0-9a-fA-F]+$" -consistent!(weld_7, r"^0x[0-9a-fA-F]+$"); - -// weld-0.2.0: r"^[0-9]+[lL]$" -consistent!(weld_8, r"^[0-9]+[lL]$"); - -// weld-0.2.0: r"^0b[0-1]+[lL]$" -consistent!(weld_9, r"^0b[0-1]+[lL]$"); - -// weld-0.2.0: r"^0x[0-9a-fA-F]+[lL]$" -consistent!(weld_10, r"^0x[0-9a-fA-F]+[lL]$"); - -// webgl_generator-0.1.0: "([(, ])enum\\b" -consistent!(webgl_generator_0, "([(, ])enum\\b"); - -// webgl_generator-0.1.0: "\\bAcquireResourcesCallback\\b" -consistent!(webgl_generator_1, "\\bAcquireResourcesCallback\\b"); - -// weave-0.2.0: r"^(\d+)(,(\d+))?([acd]).*$" -consistent!(weave_0, r"^(\d+)(,(\d+))?([acd]).*$"); - -// wemo-0.0.12: r"<BinaryState>(\d)(\|-?\d+)*</BinaryState>" -consistent!(wemo_0, r"<BinaryState>(\d)(\|-?\d+)*</BinaryState>"); - -// webscale-0.9.4: r"(http[s]?://[^\s]+)" -consistent!(webscale_0, r"(http[s]?://[^\s]+)"); - -// svgrep-1.1.0: r"^\d+.*$" -consistent!(svgrep_0, r"^\d+.*$"); - -// ignore-0.4.2: r"^[\pL\pN]+$" -consistent!(ignore_0, r"^[\pL\pN]+$"); - -// ommui_string_patterns-0.1.2: r"^([A-Za-z][0-9A-Za-z_]*)?$" -consistent!(ommui_string_patterns_0, r"^([A-Za-z][0-9A-Za-z_]*)?$"); - -// ommui_string_patterns-0.1.2: r"^(\S+(?:.*\S)?)?$" -consistent!(ommui_string_patterns_1, r"^(\S+(?:.*\S)?)?$"); - -// opcua-types-0.3.0: "^(?P<min>[0-9]{1,10})(:(?P<max>[0-9]{1,10}))?$" -consistent!(opcua_types_0, "^(?P<min>[0-9]{1,10})(:(?P<max>[0-9]{1,10}))?$"); - -// opcua-types-0.3.0: r"^(ns=(?P<ns>[0-9]+);)?(?P<t>[isgb])=(?P<v>.+)$" -consistent!(opcua_types_1, r"^(ns=(?P<ns>[0-9]+);)?(?P<t>[isgb])=(?P<v>.+)$"); - -// open_read_later-1.1.1: r"^(.+?)\s*:\s*(.+)$" -consistent!(open_read_later_0, r"^(.+?)\s*:\s*(.+)$"); - -// youtube-downloader-0.1.0: r"^.*(?:(?:youtu\.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*" -consistent!(youtube_downloader_0, r"^.*(?:(?:youtu\.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*"); - -// yobot-0.1.1: "." -consistent!(yobot_0, "."); - -// yobot-0.1.1: r"." -consistent!(yobot_1, r"."); - -// yobot-0.1.1: r".+" -consistent!(yobot_2, r".+"); - -// yobot-0.1.1: r"." -consistent!(yobot_3, r"."); - -// ubiquity-0.1.5: r"foo" -consistent!(ubiquity_0, r"foo"); - -// ubiquity-0.1.5: r"/target/" -consistent!(ubiquity_1, r"/target/"); - -// ubiquity-0.1.5: r".DS_Store" -consistent!(ubiquity_2, r".DS_Store"); - -// qasm-1.0.0: r"//.*" -consistent!(qasm_0, r"//.*"); - -// drill-0.3.5: r"\{\{ *([a-z\._]+) *\}\}" -consistent!(drill_0, r"\{\{ *([a-z\._]+) *\}\}"); - -// queryst-2.0.0: r"^([^\]\[]+)" -consistent!(queryst_0, r"^([^\]\[]+)"); - -// queryst-2.0.0: r"(\[[^\]\[]*\])" -consistent!(queryst_1, r"(\[[^\]\[]*\])"); - -// qui-vive-0.1.0: r"^/(\w+)$" -consistent!(qui_vive_0, r"^/(\w+)$"); - -// qui-vive-0.1.0: r"^/key$" -consistent!(qui_vive_1, r"^/key$"); - -// qui-vive-0.1.0: r"^/key/(\w+)$" -consistent!(qui_vive_2, r"^/key/(\w+)$"); - -// qui-vive-0.1.0: r"^/url$" -consistent!(qui_vive_3, r"^/url$"); - -// qui-vive-0.1.0: r"^/url/(\w+)$" -consistent!(qui_vive_4, r"^/url/(\w+)$"); - -// qui-vive-0.1.0: r"^/inv$" -consistent!(qui_vive_5, r"^/inv$"); - -// qui-vive-0.1.0: r"^/inv/(\w+)$" -consistent!(qui_vive_6, r"^/inv/(\w+)$"); - -// subdiff-0.1.0: r"\b" -// consistent!(subdiff_0, r"\b"); - -// substudy-0.4.5: r"^(\d+)/(\d+)$" -consistent!(substudy_0, r"^(\d+)/(\d+)$"); - -// substudy-0.4.5: r"\s+" -consistent!(substudy_1, r"\s+"); - -// substudy-0.4.5: r"<[a-z/][^>]*>" -consistent!(substudy_2, r"<[a-z/][^>]*>"); - -// substudy-0.4.5: r"(\([^)]*\)|♪[^♪]*♪|[A-Z]{2,} ?:)" -consistent!(substudy_3, r"(\([^)]*\)|♪[^♪]*♪|[A-Z]{2,} ?:)"); - -// substudy-0.4.5: r"\s+" -consistent!(substudy_4, r"\s+"); - -// isbnid-0.1.3: r"^(\d(-| )?){9}(x|X|\d|(\d(-| )?){3}\d)$" -consistent!(isbnid_0, r"^(\d(-| )?){9}(x|X|\d|(\d(-| )?){3}\d)$"); - -// isbnid-0.1.3: r"[^0-9X]" -consistent!(isbnid_1, r"[^0-9X]"); - -// ispc-0.3.5: r"Intel\(r\) SPMD Program Compiler \(ispc\), (\d+\.\d+\.\d+)" -consistent!(ispc_0, r"Intel\(r\) SPMD Program Compiler \(ispc\), (\d+\.\d+\.\d+)"); - diff --git a/third_party/rust/regex/tests/test_crates_regex.rs b/third_party/rust/regex/tests/test_crates_regex.rs deleted file mode 100644 index 1f9ce9277abc..000000000000 --- a/third_party/rust/regex/tests/test_crates_regex.rs +++ /dev/null @@ -1,57 +0,0 @@ -extern crate regex; -extern crate quickcheck; - -/* - * This test is a minimal version of <rofl_0> and <subdiff_0> - * - * Once this bug gets fixed, uncomment rofl_0 and subdiff_0 - * (in `tests/crates_regex.rs`). -#[test] -fn word_boundary_backtracking_default_mismatch() { - use regex::internal::ExecBuilder; - - let backtrack_re = ExecBuilder::new(r"\b") - .bounded_backtracking() - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err)) - .unwrap(); - - let default_re = ExecBuilder::new(r"\b") - .build() - .map(|exec| exec.into_regex()) - .map_err(|err| format!("{}", err)) - .unwrap(); - - let input = "䅅\\u{a0}"; - - let fi1 = backtrack_re.find_iter(input); - let fi2 = default_re.find_iter(input); - for (m1, m2) in fi1.zip(fi2) { - assert_eq!(m1, m2); - } -} -*/ - -mod consistent; - -mod crates_regex { - - macro_rules! consistent { - ($test_name:ident, $regex_src:expr) => { - #[test] - fn $test_name() { - use super::consistent::backends_are_consistent; - - if option_env!("RUST_REGEX_RANDOM_TEST").is_some() { - match backends_are_consistent($regex_src) { - Ok(_) => {}, - Err(err) => panic!("{}", err), - } - } - } - } - } - - include!("crates_regex.rs"); -} diff --git a/third_party/rust/sha2-0.7.1/.cargo-checksum.json b/third_party/rust/sha2-0.7.1/.cargo-checksum.json new file mode 100644 index 000000000000..6144e702f3d3 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"1edde1679db6070037fff3fe48cfacc14ac1ce9fd59142a629ec948ba272158b","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"b4eb00df6e2a4d22518fcaa6a2b4646f249b3a3c9814509b22bd2091f1392ff1","benches/sha256.rs":"221b7fc2f43cb57094adfdf3f422d24fead8c87653d3fb36b764f103542d7cef","benches/sha512.rs":"0455cf7e63c3145eb109f860e81a0c1af504b61456e8d2372ac5e158e95c1b30","examples/sha256sum.rs":"82f5c111cfc3c6db386b2e1ed300e0f45cd781d6b0f291537e3db9f390dfb79b","examples/sha512sum.rs":"ba7690db22ff7ac7f5884bde6896a54ac6a82f05802e118d2f8c5458198687a6","src/consts.rs":"06e7bae76155291d1f896b72b625500859fbcfb80ee948ab3919620c96320610","src/lib.rs":"05c31c49cd10f421028acb37c52fcffec6b6006e47274a212e906c9fd7c62199","src/sha256.rs":"17e6efc69c3910b05116e44aabef22b2b770b4d42fba53465ba07dee5f211eab","src/sha256_utils.rs":"4d764643ee34a5387d4deea26e12ad6d8d51480fe3e3c502dcbe97bb8b3148a0","src/sha512.rs":"ccc6679ddb21d11abefd940e119ae78eee8214d44446ff7186797feed70d2e45","src/sha512_utils.rs":"0b67350b0f796981290e152a1020275527d6e0ed902328097b1ee1c7dfaedf5c","tests/data/sha224/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha224/test1.output.bin":"70e01c74bb4c4b3e5b2dc7cba0694f9bc78e220e89e1f133f62c38781ebd1378","tests/data/sha224/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha224/test2.output.bin":"7cfed1501838fd337c201c54ab622bf2337edded6aac84a978cff9f1db267c08","tests/data/sha224/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha224/test3.output.bin":"3fea089ea073f5b90609aa1bcef080c3af270e3c57fc142f6aaec9a6e041f347","tests/data/sha256/one_million_a.output.bin":"80d1189477563e1b5206b2749f1afe4807e5705e8bd77887a60187a712156688","tests/data/sha256/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha256/test1.output.bin":"5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456","tests/data/sha256/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha256/test2.output.bin":"6d37795021e544d82b41850edf7aabab9a0ebe274e54a519840c4666f35b3937","tests/data/sha256/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha256/test3.output.bin":"a51a910ecba8a599555b32133bf1829455d55fe576677b49cb561d874077385c","tests/data/sha384/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha384/test1.output.bin":"4800fbfc4566eb02d1727a4b1c949ccbc7535c216a0766564c199308631b5dd6","tests/data/sha384/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha384/test2.output.bin":"0743eb48e2913c5d5d963ec13a4515ec2f9ca6ffe72e91a935871b2bff2103a0","tests/data/sha384/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha384/test3.output.bin":"b3917c6fb1f65c2b91fdbfe3a484f171949f27f3980796f4ae1b31ec9841d0f6","tests/data/sha512/one_million_a.output.bin":"a872d736156b28b7784fcc124cfb9993ed31707f1754a0a448d26bf84f5cc7f5","tests/data/sha512/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha512/test1.output.bin":"001d686db504e20c792eaa07fe09224a45ff328e24a80072d04d16abc5c2b5d2","tests/data/sha512/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha512/test2.output.bin":"372efde43fa80632b3a582d8908909f25d628928242d44531e7bef0012f6c811","tests/data/sha512/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha512/test3.output.bin":"53e379e5e4d9afd6229cb1bbb8698a59e311ed6c7111c2f8239be08f081b88d0","tests/data/sha512_224/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha512_224/test1.output.bin":"480be8cbde48b8416d5576ed5909ae9adbc4054b8e2b3ebdd5c63326f52ec4fc","tests/data/sha512_224/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha512_224/test2.output.bin":"cb5de67a5f215eb179fa45a2bb3f1b4583bbd2f510c90c21486aa47054f9745a","tests/data/sha512_224/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha512_224/test3.output.bin":"2a664dfa12b7b792709bea1a44b64eba03862a0ca60e251e99c6e05f94467c79","tests/data/sha512_256/test1.input.bin":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/data/sha512_256/test1.output.bin":"5a480c713c47fb00a9b4943583ca0401fc147cce25efdc2594f958a4aeeafe48","tests/data/sha512_256/test2.input.bin":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","tests/data/sha512_256/test2.output.bin":"906e1d233a2d982ffe13f14b9bdc9c4229857dfdd5ec17be732d8fa4b7cc00cc","tests/data/sha512_256/test3.input.bin":"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c","tests/data/sha512_256/test3.output.bin":"5ecc2545c93c4465c022b07ee5ff58d9b42fd91e1577bff7284e63f4c7c08d2e","tests/lib.rs":"52b23f0c2f72b88bfadca0dfdb0a0709e1157c53a9221d54484d75db4b747385"},"package":"9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0"} \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/Cargo.toml b/third_party/rust/sha2-0.7.1/Cargo.toml new file mode 100644 index 000000000000..8a062c76c088 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/Cargo.toml @@ -0,0 +1,45 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g. crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +name = "sha2" +version = "0.7.1" +authors = ["RustCrypto Developers"] +description = "SHA-2 hash functions" +documentation = "https://docs.rs/sha2" +keywords = ["crypto", "sha2", "hash", "digest"] +categories = ["cryptography", "no-std"] +license = "MIT/Apache-2.0" +repository = "https://github.com/RustCrypto/hashes" +[dependencies.block-buffer] +version = "0.3" + +[dependencies.byte-tools] +version = "0.2" + +[dependencies.digest] +version = "0.7" + +[dependencies.fake-simd] +version = "0.1" + +[dependencies.sha2-asm] +version = "0.5" +optional = true +[dev-dependencies.digest] +version = "^0.7.1" +features = ["dev"] + +[features] +asm = ["sha2-asm"] +[badges.travis-ci] +repository = "RustCrypto/hashes" diff --git a/third_party/rust/sha2-0.7.1/LICENSE-APACHE b/third_party/rust/sha2-0.7.1/LICENSE-APACHE new file mode 100644 index 000000000000..78173fa2e753 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/third_party/rust/sha2-0.7.1/LICENSE-MIT b/third_party/rust/sha2-0.7.1/LICENSE-MIT new file mode 100644 index 000000000000..66cf75563b39 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/LICENSE-MIT @@ -0,0 +1,27 @@ +Copyright (c) 2006-2009 Graydon Hoare +Copyright (c) 2009-2013 Mozilla Foundation +Copyright (c) 2016 Artyom Pavlov + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/third_party/rust/sha2-0.7.1/benches/sha256.rs b/third_party/rust/sha2-0.7.1/benches/sha256.rs new file mode 100644 index 000000000000..fdb80f664ec7 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/benches/sha256.rs @@ -0,0 +1,7 @@ +#![no_std] +#![feature(test)] +#[macro_use] +extern crate digest; +extern crate sha2; + +bench_digest!(sha2::Sha256); diff --git a/third_party/rust/sha2-0.7.1/benches/sha512.rs b/third_party/rust/sha2-0.7.1/benches/sha512.rs new file mode 100644 index 000000000000..69dd87b44274 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/benches/sha512.rs @@ -0,0 +1,7 @@ +#![no_std] +#![feature(test)] +#[macro_use] +extern crate digest; +extern crate sha2; + +bench_digest!(sha2::Sha512); diff --git a/third_party/rust/sha2-0.7.1/examples/sha256sum.rs b/third_party/rust/sha2-0.7.1/examples/sha256sum.rs new file mode 100644 index 000000000000..96bf2abc22ff --- /dev/null +++ b/third_party/rust/sha2-0.7.1/examples/sha256sum.rs @@ -0,0 +1,49 @@ +extern crate sha2; + +use sha2::{Sha256, Digest}; +use std::env; +use std::fs; +use std::io::{self, Read}; + +const BUFFER_SIZE: usize = 1024; + +/// Print digest result as hex string and name pair +fn print_result(sum: &[u8], name: &str) { + for byte in sum { + print!("{:02x}", byte); + } + println!("\t{}", name); +} + +/// Compute digest value for given `Reader` and print it +/// On any error simply return without doing anything +fn process<D: Digest + Default, R: Read>(reader: &mut R, name: &str) { + let mut sh = D::default(); + let mut buffer = [0u8; BUFFER_SIZE]; + loop { + let n = match reader.read(&mut buffer) { + Ok(n) => n, + Err(_) => return, + }; + sh.input(&buffer[..n]); + if n == 0 || n < BUFFER_SIZE { + break; + } + } + print_result(&sh.result(), name); +} + +fn main() { + let args = env::args(); + // Process files listed in command line arguments one by one + // If no files provided process input from stdin + if args.len() > 1 { + for path in args.skip(1) { + if let Ok(mut file) = fs::File::open(&path) { + process::<Sha256, _>(&mut file, &path); + } + } + } else { + process::<Sha256, _>(&mut io::stdin(), "-"); + } +} diff --git a/third_party/rust/sha2-0.7.1/examples/sha512sum.rs b/third_party/rust/sha2-0.7.1/examples/sha512sum.rs new file mode 100644 index 000000000000..5b59d8aa768c --- /dev/null +++ b/third_party/rust/sha2-0.7.1/examples/sha512sum.rs @@ -0,0 +1,49 @@ +extern crate sha2; + +use sha2::{Sha512, Digest}; +use std::env; +use std::fs; +use std::io::{self, Read}; + +const BUFFER_SIZE: usize = 1024; + +/// Print digest result as hex string and name pair +fn print_result(sum: &[u8], name: &str) { + for byte in sum { + print!("{:02x}", byte); + } + println!("\t{}", name); +} + +/// Compute digest value for given `Reader` and print it +/// On any error simply return without doing anything +fn process<D: Digest + Default, R: Read>(reader: &mut R, name: &str) { + let mut sh = D::default(); + let mut buffer = [0u8; BUFFER_SIZE]; + loop { + let n = match reader.read(&mut buffer) { + Ok(n) => n, + Err(_) => return, + }; + sh.input(&buffer[..n]); + if n == 0 || n < BUFFER_SIZE { + break; + } + } + print_result(&sh.result(), name); +} + +fn main() { + let args = env::args(); + // Process files listed in command line arguments one by one + // If no files provided process input from stdin + if args.len() > 1 { + for path in args.skip(1) { + if let Ok(mut file) = fs::File::open(&path) { + process::<Sha512, _>(&mut file, &path); + } + } + } else { + process::<Sha512, _>(&mut io::stdin(), "-"); + } +} diff --git a/third_party/rust/sha2-0.7.1/src/consts.rs b/third_party/rust/sha2-0.7.1/src/consts.rs new file mode 100644 index 000000000000..fc96b401a50c --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/consts.rs @@ -0,0 +1,200 @@ +#![allow(dead_code)] +#![cfg_attr(feature = "cargo-clippy", allow(unreadable_literal))] + +use simd::u64x2; +use simd::u32x4; + +pub const STATE_LEN: usize = 8; +pub const BLOCK_LEN: usize = 16; + +/// Constants necessary for SHA-256 family of digests. +pub const K32: [u32; 64] = + [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; + +/// Constants necessary for SHA-256 family of digests. +pub const K32X4: [u32x4; 16] = [u32x4(K32[3], K32[2], K32[1], K32[0]), + u32x4(K32[7], K32[6], K32[5], K32[4]), + u32x4(K32[11], K32[10], K32[9], K32[8]), + u32x4(K32[15], K32[14], K32[13], K32[12]), + u32x4(K32[19], K32[18], K32[17], K32[16]), + u32x4(K32[23], K32[22], K32[21], K32[20]), + u32x4(K32[27], K32[26], K32[25], K32[24]), + u32x4(K32[31], K32[30], K32[29], K32[28]), + u32x4(K32[35], K32[34], K32[33], K32[32]), + u32x4(K32[39], K32[38], K32[37], K32[36]), + u32x4(K32[43], K32[42], K32[41], K32[40]), + u32x4(K32[47], K32[46], K32[45], K32[44]), + u32x4(K32[51], K32[50], K32[49], K32[48]), + u32x4(K32[55], K32[54], K32[53], K32[52]), + u32x4(K32[59], K32[58], K32[57], K32[56]), + u32x4(K32[63], K32[62], K32[61], K32[60])]; + +/// Constants necessary for SHA-512 family of digests. +pub const K64: [u64; 80] = [0x428a2f98d728ae22, + 0x7137449123ef65cd, + 0xb5c0fbcfec4d3b2f, + 0xe9b5dba58189dbbc, + 0x3956c25bf348b538, + 0x59f111f1b605d019, + 0x923f82a4af194f9b, + 0xab1c5ed5da6d8118, + 0xd807aa98a3030242, + 0x12835b0145706fbe, + 0x243185be4ee4b28c, + 0x550c7dc3d5ffb4e2, + 0x72be5d74f27b896f, + 0x80deb1fe3b1696b1, + 0x9bdc06a725c71235, + 0xc19bf174cf692694, + 0xe49b69c19ef14ad2, + 0xefbe4786384f25e3, + 0x0fc19dc68b8cd5b5, + 0x240ca1cc77ac9c65, + 0x2de92c6f592b0275, + 0x4a7484aa6ea6e483, + 0x5cb0a9dcbd41fbd4, + 0x76f988da831153b5, + 0x983e5152ee66dfab, + 0xa831c66d2db43210, + 0xb00327c898fb213f, + 0xbf597fc7beef0ee4, + 0xc6e00bf33da88fc2, + 0xd5a79147930aa725, + 0x06ca6351e003826f, + 0x142929670a0e6e70, + 0x27b70a8546d22ffc, + 0x2e1b21385c26c926, + 0x4d2c6dfc5ac42aed, + 0x53380d139d95b3df, + 0x650a73548baf63de, + 0x766a0abb3c77b2a8, + 0x81c2c92e47edaee6, + 0x92722c851482353b, + 0xa2bfe8a14cf10364, + 0xa81a664bbc423001, + 0xc24b8b70d0f89791, + 0xc76c51a30654be30, + 0xd192e819d6ef5218, + 0xd69906245565a910, + 0xf40e35855771202a, + 0x106aa07032bbd1b8, + 0x19a4c116b8d2d0c8, + 0x1e376c085141ab53, + 0x2748774cdf8eeb99, + 0x34b0bcb5e19b48a8, + 0x391c0cb3c5c95a63, + 0x4ed8aa4ae3418acb, + 0x5b9cca4f7763e373, + 0x682e6ff3d6b2b8a3, + 0x748f82ee5defb2fc, + 0x78a5636f43172f60, + 0x84c87814a1f0ab72, + 0x8cc702081a6439ec, + 0x90befffa23631e28, + 0xa4506cebde82bde9, + 0xbef9a3f7b2c67915, + 0xc67178f2e372532b, + 0xca273eceea26619c, + 0xd186b8c721c0c207, + 0xeada7dd6cde0eb1e, + 0xf57d4f7fee6ed178, + 0x06f067aa72176fba, + 0x0a637dc5a2c898a6, + 0x113f9804bef90dae, + 0x1b710b35131c471b, + 0x28db77f523047d84, + 0x32caab7b40c72493, + 0x3c9ebe0a15c9bebc, + 0x431d67c49c100d4c, + 0x4cc5d4becb3e42b6, + 0x597f299cfc657e2a, + 0x5fcb6fab3ad6faec, + 0x6c44198c4a475817]; + +/// Constants necessary for SHA-512 family of digests. +pub const K64X2: [u64x2; 40] = [u64x2(K64[1], K64[0]), + u64x2(K64[3], K64[2]), + u64x2(K64[5], K64[4]), + u64x2(K64[7], K64[6]), + u64x2(K64[9], K64[8]), + u64x2(K64[11], K64[10]), + u64x2(K64[13], K64[12]), + u64x2(K64[15], K64[14]), + u64x2(K64[17], K64[16]), + u64x2(K64[19], K64[18]), + u64x2(K64[21], K64[20]), + u64x2(K64[23], K64[22]), + u64x2(K64[25], K64[24]), + u64x2(K64[27], K64[26]), + u64x2(K64[29], K64[28]), + u64x2(K64[31], K64[30]), + u64x2(K64[33], K64[32]), + u64x2(K64[35], K64[34]), + u64x2(K64[37], K64[36]), + u64x2(K64[39], K64[38]), + u64x2(K64[41], K64[40]), + u64x2(K64[43], K64[42]), + u64x2(K64[45], K64[44]), + u64x2(K64[47], K64[46]), + u64x2(K64[49], K64[48]), + u64x2(K64[51], K64[50]), + u64x2(K64[53], K64[52]), + u64x2(K64[55], K64[54]), + u64x2(K64[57], K64[56]), + u64x2(K64[59], K64[58]), + u64x2(K64[61], K64[60]), + u64x2(K64[63], K64[62]), + u64x2(K64[65], K64[64]), + u64x2(K64[67], K64[66]), + u64x2(K64[69], K64[68]), + u64x2(K64[71], K64[70]), + u64x2(K64[73], K64[72]), + u64x2(K64[75], K64[74]), + u64x2(K64[77], K64[76]), + u64x2(K64[79], K64[78])]; + +pub static H224: [u32; STATE_LEN] = [0xc1059ed8, 0x367cd507, 0x3070dd17, + 0xf70e5939, 0xffc00b31, 0x68581511, + 0x64f98fa7, 0xbefa4fa4]; + +pub static H256: [u32; STATE_LEN] = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, + 0xa54ff53a, 0x510e527f, 0x9b05688c, + 0x1f83d9ab, 0x5be0cd19]; + +pub static H384: [u64; STATE_LEN] = [0xcbbb9d5dc1059ed8, 0x629a292a367cd507, + 0x9159015a3070dd17, 0x152fecd8f70e5939, + 0x67332667ffc00b31, 0x8eb44a8768581511, + 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4]; + +pub static H512: [u64; STATE_LEN] = [0x6a09e667f3bcc908, 0xbb67ae8584caa73b, + 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, + 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179]; + +pub static H512_TRUNC_224: [u64; STATE_LEN] = [0x8c3d37c819544da2, + 0x73e1996689dcd4d6, + 0x1dfab7ae32ff9c82, + 0x679dd514582f9fcf, + 0x0f6d2b697bd44da8, + 0x77e36f7304c48942, + 0x3f9d85a86a1d36c8, + 0x1112e6ad91d692a1]; + +pub static H512_TRUNC_256: [u64; STATE_LEN] = [0x22312194fc2bf72c, + 0x9f555fa3c84c64c2, + 0x2393b86b6f53b151, + 0x963877195940eabd, + 0x96283ee2a88effe3, + 0xbe5e1e2553863992, + 0x2b0199fc2c85b8aa, + 0x0eb72ddc81c52ca2]; diff --git a/third_party/rust/sha2-0.7.1/src/lib.rs b/third_party/rust/sha2-0.7.1/src/lib.rs new file mode 100644 index 000000000000..4f01d20bb7bd --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/lib.rs @@ -0,0 +1,85 @@ +//! An implementation of the SHA-2 cryptographic hash algorithms. +//! +//! There are 6 standard algorithms specified in the SHA-2 standard: +//! +//! * `Sha224`, which is the 32-bit `Sha256` algorithm with the result truncated +//! to 224 bits. +//! * `Sha256`, which is the 32-bit `Sha256` algorithm. +//! * `Sha384`, which is the 64-bit `Sha512` algorithm with the result truncated +//! to 384 bits. +//! * `Sha512`, which is the 64-bit `Sha512` algorithm. +//! * `Sha512Trunc224`, which is the 64-bit `Sha512` algorithm with the result +//! truncated to 224 bits. +//! * `Sha512Trunc256`, which is the 64-bit `Sha512` algorithm with the result +//! truncated to 256 bits. +//! +//! Algorithmically, there are only 2 core algorithms: `Sha256` and `Sha512`. +//! All other algorithms are just applications of these with different initial +//! hash values, and truncated to different digest bit lengths. +//! +//! # Usage +//! +//! An example of using `Sha256` is: +//! +//! ```rust +//! use sha2::{Sha256, Digest}; +//! +//! // create a Sha256 object +//! let mut hasher = Sha256::default(); +//! +//! // write input message +//! hasher.input(b"hello world"); +//! +//! // read hash digest and consume hasher +//! let output = hasher.result(); +//! +//! assert_eq!(output[..], [0xb9, 0x4d, 0x27, 0xb9, 0x93, 0x4d, 0x3e, 0x08, +//! 0xa5, 0x2e, 0x52, 0xd7, 0xda, 0x7d, 0xab, 0xfa, +//! 0xc4, 0x84, 0xef, 0xe3, 0x7a, 0x53, 0x80, 0xee, +//! 0x90, 0x88, 0xf7, 0xac, 0xe2, 0xef, 0xcd, 0xe9]); +//! ``` +//! +//! An example of using `Sha512` is: +//! +//! ```rust +//! use sha2::{Sha512, Digest}; +//! +//! // create a Sha512 object +//! let mut hasher = Sha512::default(); +//! +//! // write input message +//! hasher.input(b"hello world"); +//! +//! // read hash digest and consume hasher +//! let output = hasher.result(); +//! +//! assert_eq!(output[..], [0x30, 0x9e, 0xcc, 0x48, 0x9c, 0x12, 0xd6, 0xeb, +//! 0x4c, 0xc4, 0x0f, 0x50, 0xc9, 0x02, 0xf2, 0xb4, +//! 0xd0, 0xed, 0x77, 0xee, 0x51, 0x1a, 0x7c, 0x7a, +//! 0x9b, 0xcd, 0x3c, 0xa8, 0x6d, 0x4c, 0xd8, 0x6f, +//! 0x98, 0x9d, 0xd3, 0x5b, 0xc5, 0xff, 0x49, 0x96, +//! 0x70, 0xda, 0x34, 0x25, 0x5b, 0x45, 0xb0, 0xcf, +//! 0xd8, 0x30, 0xe8, 0x1f, 0x60, 0x5d, 0xcf, 0x7d, +//! 0xc5, 0x54, 0x2e, 0x93, 0xae, 0x9c, 0xd7, 0x6f][..]); +//! ``` + +#![no_std] +extern crate byte_tools; +#[macro_use] +extern crate digest; +extern crate block_buffer; +extern crate fake_simd as simd; +#[cfg(feature = "asm")] +extern crate sha2_asm; + +mod consts; +#[cfg(not(feature = "asm"))] +mod sha256_utils; +#[cfg(not(feature = "asm"))] +mod sha512_utils; +mod sha256; +mod sha512; + +pub use digest::Digest; +pub use sha256::{Sha256, Sha224}; +pub use sha512::{Sha512, Sha384, Sha512Trunc224, Sha512Trunc256}; diff --git a/third_party/rust/sha2-0.7.1/src/sha256.rs b/third_party/rust/sha2-0.7.1/src/sha256.rs new file mode 100644 index 000000000000..6de9c6c29af9 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/sha256.rs @@ -0,0 +1,127 @@ +use digest; +use digest::generic_array::GenericArray; +use digest::generic_array::typenum::{U28, U32, U64}; +use block_buffer::BlockBuffer512; +use byte_tools::write_u32v_be; + +use consts::{STATE_LEN, H224, H256}; + +#[cfg(not(feature = "asm"))] +use sha256_utils::compress256; +#[cfg(feature = "asm")] +use sha2_asm::compress256; + +type BlockSize = U64; +pub type Block = [u8; 64]; + +/// A structure that represents that state of a digest computation for the +/// SHA-2 512 family of digest functions +#[derive(Clone)] +struct Engine256State { + h: [u32; 8], +} + +impl Engine256State { + fn new(h: &[u32; STATE_LEN]) -> Engine256State { Engine256State { h: *h } } + + pub fn process_block(&mut self, data: &Block) { + compress256(&mut self.h, data); + } +} + +/// A structure that keeps track of the state of the Sha-256 operation and +/// contains the logic necessary to perform the final calculations. +#[derive(Clone)] +struct Engine256 { + len: u64, + buffer: BlockBuffer512, + state: Engine256State, +} + +impl Engine256 { + fn new(h: &[u32; STATE_LEN]) -> Engine256 { + Engine256 { + len: 0, + buffer: Default::default(), + state: Engine256State::new(h), + } + } + + fn input(&mut self, input: &[u8]) { + // Assumes that input.len() can be converted to u64 without overflow + self.len += (input.len() as u64) << 3; + let self_state = &mut self.state; + self.buffer.input(input, |input| self_state.process_block(input)); + } + + fn finish(&mut self) { + let self_state = &mut self.state; + let l = self.len; + // TODO: replace with `len_padding_be` method + let l = if cfg!(target_endian = "little") { l.to_be() } else { l.to_le() }; + self.buffer.len_padding(l, |input| self_state.process_block(input)); + } +} + + +/// The SHA-256 hash algorithm with the SHA-256 initial hash value. +#[derive(Clone)] +pub struct Sha256 { + engine: Engine256, +} + +impl Default for Sha256 { + fn default() -> Self { Sha256 { engine: Engine256::new(&H256) } } +} + +impl digest::BlockInput for Sha256 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha256 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha256 { + type OutputSize = U32; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + let mut out = GenericArray::default(); + write_u32v_be(out.as_mut_slice(), &self.engine.state.h); + out + } +} + +/// The SHA-256 hash algorithm with the SHA-224 initial hash value. The result +/// is truncated to 224 bits. +#[derive(Clone)] +pub struct Sha224 { + engine: Engine256, +} + +impl Default for Sha224 { + fn default() -> Self { Sha224 { engine: Engine256::new(&H224) } } +} + +impl digest::BlockInput for Sha224 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha224 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha224 { + type OutputSize = U28; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + let mut out = GenericArray::default(); + write_u32v_be(out.as_mut_slice(), &self.engine.state.h[..7]); + out + } +} + +impl_opaque_debug!(Sha224); +impl_opaque_debug!(Sha256); diff --git a/third_party/rust/sha2-0.7.1/src/sha256_utils.rs b/third_party/rust/sha2-0.7.1/src/sha256_utils.rs new file mode 100644 index 000000000000..0a9d22b19362 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/sha256_utils.rs @@ -0,0 +1,267 @@ +#![cfg_attr(feature = "cargo-clippy", allow(many_single_char_names))] + +use simd::u32x4; +use consts::{BLOCK_LEN, K32X4}; +use byte_tools::{read_u32v_be}; +use sha256::Block; + +/// Not an intrinsic, but works like an unaligned load. +#[inline] +fn sha256load(v2: u32x4, v3: u32x4) -> u32x4 { + u32x4(v3.3, v2.0, v2.1, v2.2) +} + +/// Not an intrinsic, but useful for swapping vectors. +#[inline] +fn sha256swap(v0: u32x4) -> u32x4 { + u32x4(v0.2, v0.3, v0.0, v0.1) +} + +/// Emulates `llvm.x86.sha256msg1` intrinsic. +// #[inline] +fn sha256msg1(v0: u32x4, v1: u32x4) -> u32x4 { + + // sigma 0 on vectors + #[inline] + fn sigma0x4(x: u32x4) -> u32x4 { + ((x >> u32x4( 7, 7, 7, 7)) | (x << u32x4(25, 25, 25, 25))) ^ + ((x >> u32x4(18, 18, 18, 18)) | (x << u32x4(14, 14, 14, 14))) ^ + (x >> u32x4( 3, 3, 3, 3)) + } + + v0 + sigma0x4(sha256load(v0, v1)) +} + +/// Emulates `llvm.x86.sha256msg2` intrinsic. +// #[inline] +fn sha256msg2(v4: u32x4, v3: u32x4) -> u32x4 { + + macro_rules! sigma1 { + ($a:expr) => ($a.rotate_right(17) ^ $a.rotate_right(19) ^ ($a >> 10)) + } + + let u32x4(x3, x2, x1, x0) = v4; + let u32x4(w15, w14, _, _) = v3; + + let w16 = x0.wrapping_add(sigma1!(w14)); + let w17 = x1.wrapping_add(sigma1!(w15)); + let w18 = x2.wrapping_add(sigma1!(w16)); + let w19 = x3.wrapping_add(sigma1!(w17)); + + u32x4(w19, w18, w17, w16) +} + +/* +/// Performs 4 rounds of the SHA-256 message schedule update. +fn sha256_schedule_x4(v0: u32x4, v1: u32x4, v2: u32x4, v3: u32x4) -> u32x4 { + sha256msg2(sha256msg1(v0, v1) + sha256load(v2, v3), v3) +}*/ + +/// Emulates `llvm.x86.sha256rnds2` intrinsic. +// #[inline] +fn sha256_digest_round_x2(cdgh: u32x4, abef: u32x4, wk: u32x4) -> u32x4 { + + macro_rules! big_sigma0 { + ($a:expr) => (($a.rotate_right(2) ^ $a.rotate_right(13) ^ $a.rotate_right(22))) + } + macro_rules! big_sigma1 { + ($a:expr) => (($a.rotate_right(6) ^ $a.rotate_right(11) ^ $a.rotate_right(25))) + } + macro_rules! bool3ary_202 { + ($a:expr, $b:expr, $c:expr) => ($c ^ ($a & ($b ^ $c))) + } // Choose, MD5F, SHA1C + macro_rules! bool3ary_232 { + ($a:expr, $b:expr, $c:expr) => (($a & $b) ^ ($a & $c) ^ ($b & $c)) + } // Majority, SHA1M + + let u32x4(_, _, wk1, wk0) = wk; + let u32x4(a0, b0, e0, f0) = abef; + let u32x4(c0, d0, g0, h0) = cdgh; + + // a round + let x0 = big_sigma1!(e0) + .wrapping_add(bool3ary_202!(e0, f0, g0)) + .wrapping_add(wk0) + .wrapping_add(h0); + let y0 = big_sigma0!(a0).wrapping_add(bool3ary_232!(a0, b0, c0)); + let (a1, b1, c1, d1, e1, f1, g1, h1) = + (x0.wrapping_add(y0), a0, b0, c0, x0.wrapping_add(d0), e0, f0, g0); + + // a round + let x1 = big_sigma1!(e1) + .wrapping_add(bool3ary_202!(e1, f1, g1)) + .wrapping_add(wk1) + .wrapping_add(h1); + let y1 = big_sigma0!(a1).wrapping_add(bool3ary_232!(a1, b1, c1)); + let (a2, b2, _, _, e2, f2, _, _) = + (x1.wrapping_add(y1), a1, b1, c1, x1.wrapping_add(d1), e1, f1, g1); + + u32x4(a2, b2, e2, f2) +} + +/// Process a block with the SHA-256 algorithm. +fn sha256_digest_block_u32(state: &mut [u32; 8], block: &[u32; 16]) { + let k = &K32X4; + + macro_rules! schedule { + ($v0:expr, $v1:expr, $v2:expr, $v3:expr) => ( + sha256msg2(sha256msg1($v0, $v1) + sha256load($v2, $v3), $v3) + ) + } + + macro_rules! rounds4 { + ($abef:ident, $cdgh:ident, $rest:expr) => { + { + $cdgh = sha256_digest_round_x2($cdgh, $abef, $rest); + $abef = sha256_digest_round_x2($abef, $cdgh, sha256swap($rest)); + } + } + } + + let mut abef = u32x4(state[0], state[1], state[4], state[5]); + let mut cdgh = u32x4(state[2], state[3], state[6], state[7]); + + // Rounds 0..64 + let mut w0 = u32x4(block[3], block[2], block[1], block[0]); + rounds4!(abef, cdgh, k[0] + w0); + let mut w1 = u32x4(block[7], block[6], block[5], block[4]); + rounds4!(abef, cdgh, k[1] + w1); + let mut w2 = u32x4(block[11], block[10], block[9], block[8]); + rounds4!(abef, cdgh, k[2] + w2); + let mut w3 = u32x4(block[15], block[14], block[13], block[12]); + rounds4!(abef, cdgh, k[3] + w3); + let mut w4 = schedule!(w0, w1, w2, w3); + rounds4!(abef, cdgh, k[4] + w4); + w0 = schedule!(w1, w2, w3, w4); + rounds4!(abef, cdgh, k[5] + w0); + w1 = schedule!(w2, w3, w4, w0); + rounds4!(abef, cdgh, k[6] + w1); + w2 = schedule!(w3, w4, w0, w1); + rounds4!(abef, cdgh, k[7] + w2); + w3 = schedule!(w4, w0, w1, w2); + rounds4!(abef, cdgh, k[8] + w3); + w4 = schedule!(w0, w1, w2, w3); + rounds4!(abef, cdgh, k[9] + w4); + w0 = schedule!(w1, w2, w3, w4); + rounds4!(abef, cdgh, k[10] + w0); + w1 = schedule!(w2, w3, w4, w0); + rounds4!(abef, cdgh, k[11] + w1); + w2 = schedule!(w3, w4, w0, w1); + rounds4!(abef, cdgh, k[12] + w2); + w3 = schedule!(w4, w0, w1, w2); + rounds4!(abef, cdgh, k[13] + w3); + w4 = schedule!(w0, w1, w2, w3); + rounds4!(abef, cdgh, k[14] + w4); + w0 = schedule!(w1, w2, w3, w4); + rounds4!(abef, cdgh, k[15] + w0); + + let u32x4(a, b, e, f) = abef; + let u32x4(c, d, g, h) = cdgh; + + state[0] = state[0].wrapping_add(a); + state[1] = state[1].wrapping_add(b); + state[2] = state[2].wrapping_add(c); + state[3] = state[3].wrapping_add(d); + state[4] = state[4].wrapping_add(e); + state[5] = state[5].wrapping_add(f); + state[6] = state[6].wrapping_add(g); + state[7] = state[7].wrapping_add(h); +} + +/// Process a block with the SHA-256 algorithm. (See more...) +/// +/// Internally, this uses functions which resemble the new Intel SHA instruction +/// sets, and so it's data locality properties may improve performance. However, +/// to benefit the most from this implementation, replace these functions with +/// x86 intrinsics to get a possible speed boost. +/// +/// # Implementation +/// +/// The `Sha256` algorithm is implemented with functions that resemble the new +/// Intel SHA instruction set extensions. These intructions fall into two +/// categories: message schedule calculation, and the message block 64-round +/// digest calculation. The schedule-related instructions allow 4 rounds to be +/// calculated as: +/// +/// ```ignore +/// use std::simd::u32x4; +/// use self::crypto::sha2::{ +/// sha256msg1, +/// sha256msg2, +/// sha256load +/// }; +/// +/// fn schedule4_data(work: &mut [u32x4], w: &[u32]) { +/// +/// // this is to illustrate the data order +/// work[0] = u32x4(w[3], w[2], w[1], w[0]); +/// work[1] = u32x4(w[7], w[6], w[5], w[4]); +/// work[2] = u32x4(w[11], w[10], w[9], w[8]); +/// work[3] = u32x4(w[15], w[14], w[13], w[12]); +/// } +/// +/// fn schedule4_work(work: &mut [u32x4], t: usize) { +/// +/// // this is the core expression +/// work[t] = sha256msg2(sha256msg1(work[t - 4], work[t - 3]) + +/// sha256load(work[t - 2], work[t - 1]), +/// work[t - 1]) +/// } +/// ``` +/// +/// instead of 4 rounds of: +/// +/// ```ignore +/// fn schedule_work(w: &mut [u32], t: usize) { +/// w[t] = sigma1!(w[t - 2]) + w[t - 7] + sigma0!(w[t - 15]) + w[t - 16]; +/// } +/// ``` +/// +/// and the digest-related instructions allow 4 rounds to be calculated as: +/// +/// ```ignore +/// use std::simd::u32x4; +/// use self::crypto::sha2::{K32X4, +/// sha256rnds2, +/// sha256swap +/// }; +/// +/// fn rounds4(state: &mut [u32; 8], work: &mut [u32x4], t: usize) { +/// let [a, b, c, d, e, f, g, h]: [u32; 8] = *state; +/// +/// // this is to illustrate the data order +/// let mut abef = u32x4(a, b, e, f); +/// let mut cdgh = u32x4(c, d, g, h); +/// let temp = K32X4[t] + work[t]; +/// +/// // this is the core expression +/// cdgh = sha256rnds2(cdgh, abef, temp); +/// abef = sha256rnds2(abef, cdgh, sha256swap(temp)); +/// +/// *state = [abef.0, abef.1, cdgh.0, cdgh.1, +/// abef.2, abef.3, cdgh.2, cdgh.3]; +/// } +/// ``` +/// +/// instead of 4 rounds of: +/// +/// ```ignore +/// fn round(state: &mut [u32; 8], w: &mut [u32], t: usize) { +/// let [a, b, c, mut d, e, f, g, mut h]: [u32; 8] = *state; +/// +/// h += big_sigma1!(e) + choose!(e, f, g) + K32[t] + w[t]; d += h; +/// h += big_sigma0!(a) + majority!(a, b, c); +/// +/// *state = [h, a, b, c, d, e, f, g]; +/// } +/// ``` +/// +/// **NOTE**: It is important to note, however, that these instructions are not +/// implemented by any CPU (at the time of this writing), and so they are +/// emulated in this library until the instructions become more common, and gain +/// support in LLVM (and GCC, etc.). +pub fn compress256(state: &mut [u32; 8], block: &Block) { + let mut block_u32 = [0u32; BLOCK_LEN]; + read_u32v_be(&mut block_u32[..], block); + sha256_digest_block_u32(state, &block_u32); +} diff --git a/third_party/rust/sha2-0.7.1/src/sha512.rs b/third_party/rust/sha2-0.7.1/src/sha512.rs new file mode 100644 index 000000000000..b22cfeba92df --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/sha512.rs @@ -0,0 +1,209 @@ +use digest; +use digest::generic_array::GenericArray; +use digest::generic_array::typenum::{U28, U32, U48, U64, U128}; +use block_buffer::BlockBuffer1024; +use byte_tools::{write_u64v_be, write_u32_be}; + +use consts::{STATE_LEN, H384, H512, H512_TRUNC_224, H512_TRUNC_256}; + +#[cfg(not(feature = "asm"))] +use sha512_utils::compress512; +#[cfg(feature = "asm")] +use sha2_asm::compress512; + +type BlockSize = U128; +pub type Block = [u8; 128]; + +/// A structure that represents that state of a digest computation for the +/// SHA-2 512 family of digest functions +#[derive(Clone)] +struct Engine512State { + h: [u64; 8], +} + +impl Engine512State { + fn new(h: &[u64; 8]) -> Engine512State { Engine512State { h: *h } } + + pub fn process_block(&mut self, data: &Block) { + compress512(&mut self.h, data); + } +} + +/// A structure that keeps track of the state of the Sha-512 operation and +/// contains the logic necessary to perform the final calculations. +#[derive(Clone)] +struct Engine512 { + len: (u64, u64), // TODO: replace with u128 on stabilization + buffer: BlockBuffer1024, + state: Engine512State, +} + +impl Engine512 { + fn new(h: &[u64; STATE_LEN]) -> Engine512 { + Engine512 { + len: (0, 0), + buffer: Default::default(), + state: Engine512State::new(h), + } + } + + fn input(&mut self, input: &[u8]) { + let (res, over) = self.len.1.overflowing_add((input.len() as u64) << 3); + self.len.1 = res; + if over { self.len.0 += 1; } + let self_state = &mut self.state; + self.buffer.input(input, |d| self_state.process_block(d)); + } + + fn finish(&mut self) { + let self_state = &mut self.state; + let (mut hi, mut lo) = self.len; + // TODO: change `len_padding_u128` to use BE + if cfg!(target_endian = "little") { + hi = hi.to_be(); + lo = lo.to_be(); + } else { + hi = hi.to_le(); + lo = lo.to_le(); + }; + self.buffer.len_padding_u128(hi, lo, |d| self_state.process_block(d)); + } +} + + +/// The SHA-512 hash algorithm with the SHA-512 initial hash value. +#[derive(Clone)] +pub struct Sha512 { + engine: Engine512, +} + +impl Default for Sha512 { + fn default() -> Self { Sha512 { engine: Engine512::new(&H512) } } +} + +impl digest::BlockInput for Sha512 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha512 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha512 { + type OutputSize = U64; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + + let mut out = GenericArray::default(); + write_u64v_be(out.as_mut_slice(), &self.engine.state.h[..]); + out + } +} + + + +/// The SHA-512 hash algorithm with the SHA-384 initial hash value. The result +/// is truncated to 384 bits. +#[derive(Clone)] +pub struct Sha384 { + engine: Engine512, +} + +impl Default for Sha384 { + fn default() -> Self { Sha384 { engine: Engine512::new(&H384) } } +} + +impl digest::BlockInput for Sha384 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha384 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha384 { + type OutputSize = U48; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + + let mut out = GenericArray::default(); + write_u64v_be(out.as_mut_slice(), &self.engine.state.h[..6]); + out + } +} + + + +/// The SHA-512 hash algorithm with the SHA-512/256 initial hash value. The +/// result is truncated to 256 bits. +#[derive(Clone)] +pub struct Sha512Trunc256 { + engine: Engine512, +} + +impl Default for Sha512Trunc256 { + fn default() -> Self { + Sha512Trunc256 { engine: Engine512::new(&H512_TRUNC_256) } + } +} + +impl digest::BlockInput for Sha512Trunc256 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha512Trunc256 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha512Trunc256 { + type OutputSize = U32; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + + let mut out = GenericArray::default(); + write_u64v_be(out.as_mut_slice(), &self.engine.state.h[..4]); + out + } +} + +/// The SHA-512 hash algorithm with the SHA-512/224 initial hash value. +/// The result is truncated to 224 bits. +#[derive(Clone)] +pub struct Sha512Trunc224 { + engine: Engine512, +} + +impl Default for Sha512Trunc224 { + fn default() -> Self { + Sha512Trunc224 { engine: Engine512::new(&H512_TRUNC_224) } + } +} + +impl digest::BlockInput for Sha512Trunc224 { + type BlockSize = BlockSize; +} + +impl digest::Input for Sha512Trunc224 { + fn process(&mut self, msg: &[u8]) { self.engine.input(msg); } +} + +impl digest::FixedOutput for Sha512Trunc224 { + type OutputSize = U28; + + fn fixed_result(mut self) -> GenericArray<u8, Self::OutputSize> { + self.engine.finish(); + + let mut out = GenericArray::default(); + write_u64v_be(&mut out[..24], &self.engine.state.h[..3]); + write_u32_be(&mut out[24..28], (self.engine.state.h[3] >> 32) as u32); + out + } +} + +impl_opaque_debug!(Sha384); +impl_opaque_debug!(Sha512); +impl_opaque_debug!(Sha512Trunc224); +impl_opaque_debug!(Sha512Trunc256); diff --git a/third_party/rust/sha2-0.7.1/src/sha512_utils.rs b/third_party/rust/sha2-0.7.1/src/sha512_utils.rs new file mode 100644 index 000000000000..0ab6ad3077c0 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/src/sha512_utils.rs @@ -0,0 +1,287 @@ +#![cfg_attr(feature = "cargo-clippy", allow(many_single_char_names))] + +use simd::u64x2; +use consts::{BLOCK_LEN, K64X2}; +use byte_tools::{read_u64v_be}; +use sha512::Block; + +/// Not an intrinsic, but works like an unaligned load. +#[inline] +fn sha512load(v0: u64x2, v1: u64x2) -> u64x2 { + u64x2(v1.1, v0.0) +} + +/// Performs 2 rounds of the SHA-512 message schedule update. +pub fn sha512_schedule_x2(v0: u64x2, v1: u64x2, v4to5: u64x2, v7: u64x2) + -> u64x2 { + + // sigma 0 + fn sigma0(x: u64) -> u64 { + ((x << 63) | (x >> 1)) ^ ((x << 56) | (x >> 8)) ^ (x >> 7) + } + + // sigma 1 + fn sigma1(x: u64) -> u64 { + ((x << 45) | (x >> 19)) ^ ((x << 3) | (x >> 61)) ^ (x >> 6) + } + + let u64x2(w1, w0) = v0; + let u64x2(_, w2) = v1; + let u64x2(w10, w9) = v4to5; + let u64x2(w15, w14) = v7; + + let w16 = + sigma1(w14).wrapping_add(w9).wrapping_add(sigma0(w1)).wrapping_add(w0); + let w17 = + sigma1(w15).wrapping_add(w10).wrapping_add(sigma0(w2)).wrapping_add(w1); + + u64x2(w17, w16) +} + +/// Performs one round of the SHA-512 message block digest. +pub fn sha512_digest_round(ae: u64x2, bf: u64x2, cg: u64x2, dh: u64x2, + wk0: u64) + -> u64x2 { + + macro_rules! big_sigma0 { + ($a:expr) => (($a.rotate_right(28) ^ $a.rotate_right(34) ^ $a.rotate_right(39))) + } + macro_rules! big_sigma1 { + ($a:expr) => (($a.rotate_right(14) ^ $a.rotate_right(18) ^ $a.rotate_right(41))) + } + macro_rules! bool3ary_202 { + ($a:expr, $b:expr, $c:expr) => ($c ^ ($a & ($b ^ $c))) + } // Choose, MD5F, SHA1C + macro_rules! bool3ary_232 { + ($a:expr, $b:expr, $c:expr) => (($a & $b) ^ ($a & $c) ^ ($b & $c)) + } // Majority, SHA1M + + let u64x2(a0, e0) = ae; + let u64x2(b0, f0) = bf; + let u64x2(c0, g0) = cg; + let u64x2(d0, h0) = dh; + + // a round + let x0 = big_sigma1!(e0) + .wrapping_add(bool3ary_202!(e0, f0, g0)) + .wrapping_add(wk0) + .wrapping_add(h0); + let y0 = big_sigma0!(a0).wrapping_add(bool3ary_232!(a0, b0, c0)); + let (a1, _, _, _, e1, _, _, _) = + (x0.wrapping_add(y0), a0, b0, c0, x0.wrapping_add(d0), e0, f0, g0); + + u64x2(a1, e1) +} + +/// Process a block with the SHA-512 algorithm. +pub fn sha512_digest_block_u64(state: &mut [u64; 8], block: &[u64; 16]) { + let k = &K64X2; + + macro_rules! schedule { + ($v0:expr, $v1:expr, $v4:expr, $v5:expr, $v7:expr) => ( + sha512_schedule_x2($v0, $v1, sha512load($v4, $v5), $v7) + ) + } + + macro_rules! rounds4 { + ($ae:ident, $bf:ident, $cg:ident, $dh:ident, $wk0:expr, $wk1:expr) => { + { + let u64x2(u, t) = $wk0; + let u64x2(w, v) = $wk1; + + $dh = sha512_digest_round($ae, $bf, $cg, $dh, t); + $cg = sha512_digest_round($dh, $ae, $bf, $cg, u); + $bf = sha512_digest_round($cg, $dh, $ae, $bf, v); + $ae = sha512_digest_round($bf, $cg, $dh, $ae, w); + } + } + } + + let mut ae = u64x2(state[0], state[4]); + let mut bf = u64x2(state[1], state[5]); + let mut cg = u64x2(state[2], state[6]); + let mut dh = u64x2(state[3], state[7]); + + // Rounds 0..20 + let (mut w1, mut w0) = (u64x2(block[3], block[2]), + u64x2(block[1], block[0])); + rounds4!(ae, bf, cg, dh, k[0] + w0, k[1] + w1); + let (mut w3, mut w2) = (u64x2(block[7], block[6]), + u64x2(block[5], block[4])); + rounds4!(ae, bf, cg, dh, k[2] + w2, k[3] + w3); + let (mut w5, mut w4) = (u64x2(block[11], block[10]), + u64x2(block[9], block[8])); + rounds4!(ae, bf, cg, dh, k[4] + w4, k[5] + w5); + let (mut w7, mut w6) = (u64x2(block[15], block[14]), + u64x2(block[13], block[12])); + rounds4!(ae, bf, cg, dh, k[6] + w6, k[7] + w7); + let mut w8 = schedule!(w0, w1, w4, w5, w7); + let mut w9 = schedule!(w1, w2, w5, w6, w8); + rounds4!(ae, bf, cg, dh, k[8] + w8, k[9] + w9); + + // Rounds 20..40 + w0 = schedule!(w2, w3, w6, w7, w9); + w1 = schedule!(w3, w4, w7, w8, w0); + rounds4!(ae, bf, cg, dh, k[10] + w0, k[11] + w1); + w2 = schedule!(w4, w5, w8, w9, w1); + w3 = schedule!(w5, w6, w9, w0, w2); + rounds4!(ae, bf, cg, dh, k[12] + w2, k[13] + w3); + w4 = schedule!(w6, w7, w0, w1, w3); + w5 = schedule!(w7, w8, w1, w2, w4); + rounds4!(ae, bf, cg, dh, k[14] + w4, k[15] + w5); + w6 = schedule!(w8, w9, w2, w3, w5); + w7 = schedule!(w9, w0, w3, w4, w6); + rounds4!(ae, bf, cg, dh, k[16] + w6, k[17] + w7); + w8 = schedule!(w0, w1, w4, w5, w7); + w9 = schedule!(w1, w2, w5, w6, w8); + rounds4!(ae, bf, cg, dh, k[18] + w8, k[19] + w9); + + // Rounds 40..60 + w0 = schedule!(w2, w3, w6, w7, w9); + w1 = schedule!(w3, w4, w7, w8, w0); + rounds4!(ae, bf, cg, dh, k[20] + w0, k[21] + w1); + w2 = schedule!(w4, w5, w8, w9, w1); + w3 = schedule!(w5, w6, w9, w0, w2); + rounds4!(ae, bf, cg, dh, k[22] + w2, k[23] + w3); + w4 = schedule!(w6, w7, w0, w1, w3); + w5 = schedule!(w7, w8, w1, w2, w4); + rounds4!(ae, bf, cg, dh, k[24] + w4, k[25] + w5); + w6 = schedule!(w8, w9, w2, w3, w5); + w7 = schedule!(w9, w0, w3, w4, w6); + rounds4!(ae, bf, cg, dh, k[26] + w6, k[27] + w7); + w8 = schedule!(w0, w1, w4, w5, w7); + w9 = schedule!(w1, w2, w5, w6, w8); + rounds4!(ae, bf, cg, dh, k[28] + w8, k[29] + w9); + + // Rounds 60..80 + w0 = schedule!(w2, w3, w6, w7, w9); + w1 = schedule!(w3, w4, w7, w8, w0); + rounds4!(ae, bf, cg, dh, k[30] + w0, k[31] + w1); + w2 = schedule!(w4, w5, w8, w9, w1); + w3 = schedule!(w5, w6, w9, w0, w2); + rounds4!(ae, bf, cg, dh, k[32] + w2, k[33] + w3); + w4 = schedule!(w6, w7, w0, w1, w3); + w5 = schedule!(w7, w8, w1, w2, w4); + rounds4!(ae, bf, cg, dh, k[34] + w4, k[35] + w5); + w6 = schedule!(w8, w9, w2, w3, w5); + w7 = schedule!(w9, w0, w3, w4, w6); + rounds4!(ae, bf, cg, dh, k[36] + w6, k[37] + w7); + w8 = schedule!(w0, w1, w4, w5, w7); + w9 = schedule!(w1, w2, w5, w6, w8); + rounds4!(ae, bf, cg, dh, k[38] + w8, k[39] + w9); + + let u64x2(a, e) = ae; + let u64x2(b, f) = bf; + let u64x2(c, g) = cg; + let u64x2(d, h) = dh; + + state[0] = state[0].wrapping_add(a); + state[1] = state[1].wrapping_add(b); + state[2] = state[2].wrapping_add(c); + state[3] = state[3].wrapping_add(d); + state[4] = state[4].wrapping_add(e); + state[5] = state[5].wrapping_add(f); + state[6] = state[6].wrapping_add(g); + state[7] = state[7].wrapping_add(h); +} + +/// Process a block with the SHA-512 algorithm. (See more...) +/// +/// Internally, this uses functions that resemble the new Intel SHA +/// instruction set extensions, but since no architecture seems to +/// have any designs, these may not be the final designs if and/or when +/// there are instruction set extensions with SHA-512. So to summarize: +/// SHA-1 and SHA-256 are being implemented in hardware soon (at the time +/// of this writing), but it doesn't look like SHA-512 will be hardware +/// accelerated any time soon. +/// +/// # Implementation +/// +/// These functions fall into two categories: message schedule calculation, and +/// the message block 64-round digest calculation. The schedule-related +/// functions allow 4 rounds to be calculated as: +/// +/// ```ignore +/// use std::simd::u64x2; +/// use self::crypto::sha2::{ +/// sha512msg, +/// sha512load +/// }; +/// +/// fn schedule4_data(work: &mut [u64x2], w: &[u64]) { +/// +/// // this is to illustrate the data order +/// work[0] = u64x2(w[1], w[0]); +/// work[1] = u64x2(w[3], w[2]); +/// work[2] = u64x2(w[5], w[4]); +/// work[3] = u64x2(w[7], w[6]); +/// work[4] = u64x2(w[9], w[8]); +/// work[5] = u64x2(w[11], w[10]); +/// work[6] = u64x2(w[13], w[12]); +/// work[7] = u64x2(w[15], w[14]); +/// } +/// +/// fn schedule4_work(work: &mut [u64x2], t: usize) { +/// +/// // this is the core expression +/// work[t] = sha512msg(work[t - 8], +/// work[t - 7], +/// sha512load(work[t - 4], work[t - 3]), +/// work[t - 1]); +/// } +/// ``` +/// +/// instead of 4 rounds of: +/// +/// ```ignore +/// fn schedule_work(w: &mut [u64], t: usize) { +/// w[t] = sigma1!(w[t - 2]) + w[t - 7] + sigma0!(w[t - 15]) + w[t - 16]; +/// } +/// ``` +/// +/// and the digest-related functions allow 4 rounds to be calculated as: +/// +/// ```ignore +/// use std::simd::u64x2; +/// use self::crypto::sha2::{K64X2, sha512rnd}; +/// +/// fn rounds4(state: &mut [u64; 8], work: &mut [u64x2], t: usize) { +/// let [a, b, c, d, e, f, g, h]: [u64; 8] = *state; +/// +/// // this is to illustrate the data order +/// let mut ae = u64x2(a, e); +/// let mut bf = u64x2(b, f); +/// let mut cg = u64x2(c, g); +/// let mut dh = u64x2(d, h); +/// let u64x2(w1, w0) = K64X2[2*t] + work[2*t]; +/// let u64x2(w3, w2) = K64X2[2*t + 1] + work[2*t + 1]; +/// +/// // this is the core expression +/// dh = sha512rnd(ae, bf, cg, dh, w0); +/// cg = sha512rnd(dh, ae, bf, cg, w1); +/// bf = sha512rnd(cg, dh, ae, bf, w2); +/// ae = sha512rnd(bf, cg, dh, ae, w3); +/// +/// *state = [ae.0, bf.0, cg.0, dh.0, +/// ae.1, bf.1, cg.1, dh.1]; +/// } +/// ``` +/// +/// instead of 4 rounds of: +/// +/// ```ignore +/// fn round(state: &mut [u64; 8], w: &mut [u64], t: usize) { +/// let [a, b, c, mut d, e, f, g, mut h]: [u64; 8] = *state; +/// +/// h += big_sigma1!(e) + choose!(e, f, g) + K64[t] + w[t]; d += h; +/// h += big_sigma0!(a) + majority!(a, b, c); +/// +/// *state = [h, a, b, c, d, e, f, g]; +/// } +/// ``` +/// +pub fn compress512(state: &mut [u64; 8], block: &Block) { + let mut block_u64 = [0u64; BLOCK_LEN]; + read_u64v_be(&mut block_u64[..], block); + sha512_digest_block_u64(state, &block_u64); +} diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test1.output.bin new file mode 100644 index 000000000000..ce2f98488724 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha224/test1.output.bin @@ -0,0 +1 @@ +J*:+Ga(4*ų/ \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.output.bin new file mode 100644 index 000000000000..19e6a387c183 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha224/test2.output.bin @@ -0,0 +1 @@ +sר+٠2]$0X}Ë% \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.output.bin new file mode 100644 index 000000000000..ac8109d446c3 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha224/test3.output.bin @@ -0,0 +1,2 @@ +anQ +\he>=KL \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/one_million_a.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/one_million_a.output.bin new file mode 100644 index 000000000000..59757633dd56 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/one_million_a.output.bin @@ -0,0 +1 @@ +n\>gH m9, \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test1.output.bin new file mode 100644 index 000000000000..4811487ee3dc --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/test1.output.bin @@ -0,0 +1 @@ +Bșo$'AdLxRU \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.output.bin new file mode 100644 index 000000000000..fd9179b0cb9d --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/test2.output.bin @@ -0,0 +1 @@ +ר׀iʚ.OVQm<v-п7 \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.output.bin new file mode 100644 index 000000000000..0372bc6b9836 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha256/test3.output.bin @@ -0,0 +1 @@ +S%ȕRe)=cd׉·eD5l \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test1.output.bin new file mode 100644 index 000000000000..5c805201a222 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha384/test1.output.bin @@ -0,0 +1 @@ +8`Q8L2~j!CL ǿc'N޿oeH[ \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.output.bin new file mode 100644 index 000000000000..ca02e14b04a0 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha384/test2.output.bin @@ -0,0 +1 @@ +sL m<wgTLI@1}PA=*ɱ \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.output.bin new file mode 100644 index 000000000000..8e7a80628342 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha384/test3.output.bin @@ -0,0 +1 @@ +$',7 ׼W9!wfxqzz/N4 \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/one_million_a.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/one_million_a.output.bin new file mode 100644 index 0000000000000000000000000000000000000000..6edb1d6cf2a7f7e640b2bf2f36cc561c00e8eae9 GIT binary patch literal 64 zcmV-G0Kfm|7)U(~=V@e4E<(q=6|`fHADFQ_AVeruGN=QusdMYz5AsBZex?dcutO~6 Wcf%X&0GwPbNvbYRt+E%bjKG_9-W**3 literal 0 HcmV?d00001 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test1.output.bin new file mode 100644 index 000000000000..be664a711c60 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512/test1.output.bin @@ -0,0 +1 @@ +σ5~︽T(Pm  W܃!lG<]҇~/c1GAz82z'> \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.output.bin new file mode 100644 index 000000000000..32032f84d4ad --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512/test2.output.bin @@ -0,0 +1 @@ +GXojs?C^iQ!׈ ׅCkd.RT9T};^ x!#?S=T \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.output.bin new file mode 100644 index 000000000000..382de6e6f5d3 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512/test3.output.bin @@ -0,0 +1 @@ +E FzTvM w{+ӧa~EcԁÚ \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.output.bin new file mode 100644 index 000000000000..df162d4cbb31 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test1.output.bin @@ -0,0 +1 @@ +no% Ӭʻ֠\3; \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test2.output.bin new file mode 100644 index 0000000000000000000000000000000000000000..d88bfcc007e90c2977b8abc32b13f6a91138f6d5 GIT binary patch literal 28 kcmbQ@bE&0%t82uS^4JX?Q2`8wf+wEdT4w)T>DVfB0LDHIumAu6 literal 0 HcmV?d00001 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.output.bin new file mode 100644 index 000000000000..4bf3fd1f1051 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_224/test3.output.bin @@ -0,0 +1 @@ +mjyI^iu.Ƌk <Z(yr \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.input.bin new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.output.bin new file mode 100644 index 000000000000..1dbad1dd20c7 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test1.output.bin @@ -0,0 +1 @@ +rV(b,Q:׸stz \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.input.bin new file mode 100644 index 000000000000..ff3bb63948b4 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test2.output.bin new file mode 100644 index 0000000000000000000000000000000000000000..f264a9b276e3c037d5f84c44b55f07710a6a8d9a GIT binary patch literal 32 qcmV+*0N?-JooBOgQJgcL*xS-t`3{$A9`5~0)7XgsUQ;i{zVJ;fq7l*n literal 0 HcmV?d00001 diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.input.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.input.bin new file mode 100644 index 000000000000..8fe2a4b5ad11 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.input.bin @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.output.bin b/third_party/rust/sha2-0.7.1/tests/data/sha512_256/test3.output.bin new file mode 100644 index 0000000000000000000000000000000000000000..d406dafee598b82a034b45eb5c0c9365fd342b0e GIT binary patch literal 32 qcmV+*0N?)=MsyfJ_@t7#S=qR<G)tQfwHp9Sx;4PAx~zuOQe?yMOb>(r literal 0 HcmV?d00001 diff --git a/third_party/rust/sha2-0.7.1/tests/lib.rs b/third_party/rust/sha2-0.7.1/tests/lib.rs new file mode 100644 index 000000000000..e386fcc46105 --- /dev/null +++ b/third_party/rust/sha2-0.7.1/tests/lib.rs @@ -0,0 +1,54 @@ +#![no_std] +#[macro_use] +extern crate digest; +extern crate sha2; + +use digest::dev::{Test, main_test, one_million_a}; + +#[test] +fn sha2_224_main() { + let tests = new_tests!("sha224/test1", "sha224/test2", "sha224/test3"); + main_test::<sha2::Sha224>(&tests); +} + +#[test] +fn sha2_256_main() { + let tests = new_tests!("sha256/test1", "sha256/test2", "sha256/test3"); + main_test::<sha2::Sha256>(&tests); +} + +#[test] +fn sha2_384_main() { + let tests = new_tests!("sha384/test1", "sha384/test2", "sha384/test3"); + main_test::<sha2::Sha384>(&tests); +} + +#[test] +fn sha2_512_main() { + let tests = new_tests!("sha512/test1", "sha512/test2", "sha512/test3"); + main_test::<sha2::Sha512>(&tests); +} + +#[test] +fn sha2_512_trunc_256_main() { + let tests = new_tests!("sha512_256/test1", "sha512_256/test2", "sha512_256/test3"); + main_test::<sha2::Sha512Trunc256>(&tests); +} + +#[test] +fn sha2_512_trunc_224_main() { + let tests = new_tests!("sha512_224/test1", "sha512_224/test2", "sha512_224/test3"); + main_test::<sha2::Sha512Trunc224>(&tests); +} + +#[test] +fn sha2_256_1million_a() { + let output = include_bytes!("data/sha256/one_million_a.output.bin"); + one_million_a::<sha2::Sha256>(output); +} + +#[test] +fn sha2_512_1million_a() { + let output = include_bytes!("data/sha512/one_million_a.output.bin"); + one_million_a::<sha2::Sha512>(output); +} \ No newline at end of file diff --git a/third_party/rust/strsim-0.6.0/.cargo-checksum.json b/third_party/rust/strsim-0.6.0/.cargo-checksum.json new file mode 100644 index 000000000000..676ef90fb771 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{".editorconfig":"d87dec5ba57378b3c32bbf67526e434f7ac4f44d8b1acc7f44b6d8e7ee6919ad",".travis.yml":"10ee132e43d2a5e3c304a4970adfec8939014403c32d178728a56c8cb18046ee","CHANGELOG.md":"5f3e55f36768b2d2e40ee54702d6298175b7736e9b8918ca03592011f053c25f","Cargo.toml":"ff9b4b5bd80560ed36b14313261763d321cfb9e3f212896ec565fb872e26c3f0","LICENSE":"9b60c5838cbe7953b84bb2206835cb2bc898802da4c449e4442cf23e3ad4841e","README.md":"1778e287c6788197322a352721414f7ceab0c84ee0918513bb9f5382d3e40bc6","appveyor.yml":"b41eae9798a9bb250f6046509d9bbd6e63bac9ad2655d342b3d9c8975584f0c0","dev":"498932c7296d8abeb9e432e797a579787a85a052fa514325b873c4fe3200ec67","src/lib.rs":"a79164ec2334c477ca9d25e10c161e0e9bb8ae8670eb22976948c2a574b40985","tests/lib.rs":"43c707f9c9d35fafa07b34f61418ac877687daba5a0790d87e47b3d2c8bad274"},"package":"b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"} \ No newline at end of file diff --git a/third_party/rust/strsim-0.6.0/.editorconfig b/third_party/rust/strsim-0.6.0/.editorconfig new file mode 100644 index 000000000000..ee635471570f --- /dev/null +++ b/third_party/rust/strsim-0.6.0/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_brace_style = K&R +indent_size = 4 +indent_style = space +insert_final_newline = true +max_line_length = 80 +trim_trailing_whitespace = true + diff --git a/third_party/rust/strsim-0.6.0/.travis.yml b/third_party/rust/strsim-0.6.0/.travis.yml new file mode 100644 index 000000000000..3078661b6d51 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/.travis.yml @@ -0,0 +1,11 @@ +language: rust + +rust: + - nightly + - beta + - stable + +matrix: + allow_failures: + - rust: nightly + diff --git a/third_party/rust/strsim-0.6.0/CHANGELOG.md b/third_party/rust/strsim-0.6.0/CHANGELOG.md new file mode 100644 index 000000000000..2570cbdc956a --- /dev/null +++ b/third_party/rust/strsim-0.6.0/CHANGELOG.md @@ -0,0 +1,103 @@ +# Change Log +This project attempts to adhere to [Semantic Versioning](http://semver.org). + +## [0.6.0] - (2016-12-26) +### Added +- Add optimal string alignment distance + +### Fixed +- Fix Damerau-Levenshtein implementation (previous implementation was actually +optimal string alignment; see this [Damerau-Levenshtein explanation]) + +## [0.5.2] - (2016-11-21) +### Changed +- Remove Cargo generated documentation in favor of a [docs.rs] link + +## [0.5.1] - (2016-08-23) +### Added +- Add Cargo generated documentation + +### Fixed +- Fix panic when Jaro or Jaro-Winkler are given strings both with a length of +one + +## [0.5.0] - (2016-08-11) +### Changed +- Make Hamming faster (thanks @IBUzPE9) when the two strings have the same +length but slower when they have different lengths + +## [0.4.1] - (2016-04-18) +### Added +- Add Vagrant setup for development +- Add AppVeyor configuration for Windows CI + +### Fixed +- Fix metrics when given strings with multibyte characters (thanks @WanzenBug) + +## [0.4.0] - (2015-06-10) +### Added +- For each metric, add a function that takes a vector of strings and returns a +vector of results (thanks @ovarene) + +## [0.3.0] - (2015-04-30) +### Changed +- Remove usage of unstable Rust features + +## [0.2.5] - (2015-04-24) +### Fixed +- Remove unnecessary `Float` import from doc tests + +## [0.2.4] - (2015-04-15) +### Fixed +- Remove unused `core` feature flag + +## [0.2.3] - (2015-04-01) +### Fixed +- Remove now unnecessary `Float` import + +## [0.2.2] - (2015-03-29) +### Fixed +- Remove usage of `char_at` (marked as unstable) + +## [0.2.1] - (2015-02-20) +### Fixed +- Update bit vector import to match Rust update + +## [0.2.0] - (2015-02-19) +### Added +- Implement Damerau-Levenshtein +- Add tests in docs + +## [0.1.1] - (2015-02-10) +### Added +- Configure Travis for CI +- Add rustdoc comments + +### Fixed +- Limit Jaro-Winkler return value to a maximum of 1.0 +- Fix float comparsions in tests + +## [0.1.0] - (2015-02-09) +### Added +- Implement Hamming, Jaro, Jaro-Winkler, and Levenshtein + +[Unreleased]: https://github.com/dguo/strsim-rs/compare/0.6.0...HEAD +[0.6.0]: https://github.com/dguo/strsim-rs/compare/0.5.2...0.6.0 +[0.5.2]: https://github.com/dguo/strsim-rs/compare/0.5.1...0.5.2 +[0.5.1]: https://github.com/dguo/strsim-rs/compare/0.5.0...0.5.1 +[0.5.0]: https://github.com/dguo/strsim-rs/compare/0.4.1...0.5.0 +[0.4.1]: https://github.com/dguo/strsim-rs/compare/0.4.0...0.4.1 +[0.4.0]: https://github.com/dguo/strsim-rs/compare/0.3.0...0.4.0 +[0.3.0]: https://github.com/dguo/strsim-rs/compare/0.2.5...0.3.0 +[0.2.5]: https://github.com/dguo/strsim-rs/compare/0.2.4...0.2.5 +[0.2.4]: https://github.com/dguo/strsim-rs/compare/0.2.3...0.2.4 +[0.2.3]: https://github.com/dguo/strsim-rs/compare/0.2.2...0.2.3 +[0.2.2]: https://github.com/dguo/strsim-rs/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/dguo/strsim-rs/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/dguo/strsim-rs/compare/0.1.1...0.2.0 +[0.1.1]: https://github.com/dguo/strsim-rs/compare/0.1.0...0.1.1 +[0.1.0]: https://github.com/dguo/strsim-rs/compare/fabad4...0.1.0 +[docs.rs]: https://docs.rs/strsim/ +[Damerau-Levenshtein explanation]: +http://scarcitycomputing.blogspot.com/2013/04/damerau-levenshtein-edit-distance.html + diff --git a/third_party/rust/strsim-0.6.0/Cargo.toml b/third_party/rust/strsim-0.6.0/Cargo.toml new file mode 100644 index 000000000000..1db4882045f3 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/Cargo.toml @@ -0,0 +1,17 @@ +[package] + +name = "strsim" +version = "0.6.0" +authors = ["Danny Guo <dannyguo91@gmail.com>"] +description = """ +Implementations of string similarity metrics. +Includes Hamming, Levenshtein, Damerau-Levenshtein, Jaro, and Jaro-Winkler. +""" +license = "MIT" +readme = "README.md" +keywords = ["string", "similarity", "Hamming", + "Levenshtein", "Jaro"] +homepage = "https://github.com/dguo/strsim-rs" +repository = "https://github.com/dguo/strsim-rs" +documentation = "http://dannyguo.com/strsim-rs/" + diff --git a/third_party/rust/strsim-0.6.0/LICENSE b/third_party/rust/strsim-0.6.0/LICENSE new file mode 100644 index 000000000000..d35e62c38fe1 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Danny Guo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/third_party/rust/strsim-0.6.0/README.md b/third_party/rust/strsim-0.6.0/README.md new file mode 100644 index 000000000000..dc0a1e33e152 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/README.md @@ -0,0 +1,95 @@ +# strsim-rs [![Crates.io](https://img.shields.io/crates/v/strsim.svg)](https://crates.io/crates/strsim) [![Crates.io](https://img.shields.io/crates/l/strsim.svg?maxAge=2592000)](https://github.com/dguo/strsim-rs/blob/master/LICENSE) [![Linux build status](https://travis-ci.org/dguo/strsim-rs.svg?branch=master)](https://travis-ci.org/dguo/strsim-rs) [![Windows build status](https://ci.appveyor.com/api/projects/status/ggue6i785618a39w?svg=true)](https://ci.appveyor.com/project/dguo/strsim-rs) + +[Rust](https://www.rust-lang.org) implementations of [string similarity metrics]: + - [Hamming] + - [Levenshtein] + - [Optimal string alignment] + - [Damerau-Levenshtein] + - [Jaro and Jaro-Winkler] - this implementation of Jaro-Winkler does not limit the common prefix length + +### Installation +```toml +# Cargo.toml +[dependencies] +strsim = "0.6.0" +``` + +### [Documentation](https://docs.rs/strsim/) +You can change the version in the url to see the documentation for an older +version in the +[changelog](https://github.com/dguo/strsim-rs/blob/master/CHANGELOG.md). + +### Usage +```rust +extern crate strsim; + +use strsim::{hamming, levenshtein, osa_distance, damerau_levenshtein, jaro, + jaro_winkler, levenshtein_against_vec, osa_distance_against_vec, + damerau_levenshtein_against_vec, jaro_against_vec, + jaro_winkler_against_vec}; + +fn main() { + match hamming("hamming", "hammers") { + Ok(distance) => assert_eq!(3, distance), + Err(why) => panic!("{:?}", why) + } + + assert_eq!(3, levenshtein("kitten", "sitting")); + + assert_eq!(3, osa_distance("ac", "cba")); + + assert_eq!(2, damerau_levenshtein("ac", "cba")); + + assert!((0.392 - jaro("Friedrich Nietzsche", "Jean-Paul Sartre")).abs() < + 0.001); + + assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() < + 0.001); + + // get vectors of values back + let v = vec!["test", "test1", "test12", "test123", "", "tset", "tsvet"]; + + assert_eq!(levenshtein_against_vec("test", &v), + vec![0, 1, 2, 3, 4, 2, 3]); + + assert_eq!(osa_distance_against_vec("test", &v), + vec![0, 1, 2, 3, 4, 1, 3]); + + assert_eq!(damerau_levenshtein_against_vec("test", &v), + vec![0, 1, 2, 3, 4, 1, 2]); + + let jaro_distances = jaro_against_vec("test", &v); + let jaro_expected = vec![1.0, 0.933333, 0.888889, 0.857143, 0.0, 0.916667]; + let jaro_delta: f64 = jaro_distances.iter() + .zip(jaro_expected.iter()) + .map(|(x, y)| (x - y).abs() as f64) + .fold(0.0, |x, y| x + y as f64); + assert!(jaro_delta < 0.0001); + + let jaro_winkler_distances = jaro_winkler_against_vec("test", &v); + let jaro_winkler_expected = vec![1.0, 0.96, 0.933333, 0.914286, 0.0, 0.925]; + let jaro_winkler_delta = jaro_winkler_distances.iter() + .zip(jaro_winkler_expected.iter()) + .map(|(x, y)| (x - y).abs() as f64) + .fold(0.0, |x, y| x + y as f64); + assert!(jaro_winkler_delta < 0.0001); +} +``` + +### Development +If you don't want to install Rust itself, you can install [Docker], and run +`$ ./dev`. This should bring up a temporary container from which you can run +[cargo] commands. + +### License +[MIT](https://github.com/dguo/strsim-rs/blob/master/LICENSE) + +[string similarity metrics]:http://en.wikipedia.org/wiki/String_metric +[Damerau-Levenshtein]:http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance +[Jaro and Jaro-Winkler]:http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance +[Levenshtein]:http://en.wikipedia.org/wiki/Levenshtein_distance +[Hamming]:http://en.wikipedia.org/wiki/Hamming_distance +[Optimal string alignment]:https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance#Optimal_string_alignment_distance +[Docker]:https://docs.docker.com/engine/installation/ +[cargo]:https://github.com/rust-lang/cargo + diff --git a/third_party/rust/strsim-0.6.0/appveyor.yml b/third_party/rust/strsim-0.6.0/appveyor.yml new file mode 100644 index 000000000000..fb992db82b66 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/appveyor.yml @@ -0,0 +1,13 @@ +install: + - ps: Start-FileDownload 'https://static.rust-lang.org/dist/rust-beta-x86_64-pc-windows-gnu.exe' + - rust-beta-x86_64-pc-windows-gnu.exe /VERYSILENT /NORESTART /DIR="C:\Program Files (x86)\Rust" + - SET PATH=%PATH%;C:\Program Files (x86)\Rust\bin + - rustc -V + - cargo -V + +build: false + +test_script: + - cargo build + - cargo test --verbose + diff --git a/third_party/rust/strsim-0.6.0/dev b/third_party/rust/strsim-0.6.0/dev new file mode 100755 index 000000000000..0e32354d093e --- /dev/null +++ b/third_party/rust/strsim-0.6.0/dev @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from __future__ import print_function + +import os +from subprocess import call +import sys + +try: + call(['docker', 'run', '-it', '--rm', '-v', os.getcwd() + ':/source', + 'jimmycuadra/rust:1.14.0']) +except OSError: + print('Please install Docker.', file=sys.stderr) + diff --git a/third_party/rust/strsim-0.6.0/src/lib.rs b/third_party/rust/strsim-0.6.0/src/lib.rs new file mode 100644 index 000000000000..3cf285bbe91a --- /dev/null +++ b/third_party/rust/strsim-0.6.0/src/lib.rs @@ -0,0 +1,911 @@ +//! This library implements string similarity metrics. + +use std::char; +use std::cmp::{max, min}; +use std::collections::HashMap; + +#[derive(Debug, PartialEq)] +pub enum StrSimError { + DifferentLengthArgs +} + +pub type HammingResult = Result<usize, StrSimError>; + +/// Calculates the number of positions in the two strings where the characters +/// differ. Returns an error if the strings have different lengths. +/// +/// ``` +/// use strsim::hamming; +/// +/// match hamming("hamming", "hammers") { +/// Ok(distance) => assert_eq!(3, distance), +/// Err(why) => panic!("{:?}", why) +/// } +/// ``` +pub fn hamming(a: &str, b: &str) -> HammingResult { + let (mut ita, mut itb, mut count) = (a.chars(), b.chars(), 0); + loop { + match (ita.next(), itb.next()){ + (Some(x), Some(y)) => if x != y { count += 1 }, + (None, None) => return Ok(count), + _ => return Err(StrSimError::DifferentLengthArgs), + } + } +} + +/// Calculates the Jaro similarity between two strings. The returned value +/// is between 0.0 and 1.0 (higher value means more similar). +/// +/// ``` +/// use strsim::jaro; +/// +/// assert!((0.392 - jaro("Friedrich Nietzsche", "Jean-Paul Sartre")).abs() < +/// 0.001); +/// ``` +pub fn jaro(a: &str, b: &str) -> f64 { + if a == b { return 1.0; } + + let a_len = a.chars().count(); + let b_len = b.chars().count(); + + // The check for lengths of one here is to prevent integer overflow when + // calculating the search range. + if a_len == 0 || b_len == 0 || (a_len == 1 && b_len == 1) { + return 0.0; + } + + let search_range = (max(a_len, b_len) / 2) - 1; + + let mut b_consumed = Vec::with_capacity(b_len); + for _ in 0..b_len { + b_consumed.push(false); + } + let mut matches = 0.0; + + let mut transpositions = 0.0; + let mut b_match_index = 0; + + for (i, a_char) in a.chars().enumerate() { + let min_bound = + // prevent integer wrapping + if i > search_range { + max(0, i - search_range) + } else { + 0 + }; + + let max_bound = min(b_len - 1, i + search_range); + + if min_bound > max_bound { + continue; + } + + for (j, b_char) in b.chars().enumerate() { + if min_bound <= j && j <= max_bound && a_char == b_char && + !b_consumed[j] { + b_consumed[j] = true; + matches += 1.0; + + if j < b_match_index { + transpositions += 1.0; + } + b_match_index = j; + + break; + } + } + } + + if matches == 0.0 { + 0.0 + } else { + (1.0 / 3.0) * ((matches / a_len as f64) + + (matches / b_len as f64) + + ((matches - transpositions) / matches)) + } +} + +/// Calculates the Jaro distance between a string and each string in a vector. +/// Returns a vector of corresponding values between 0.0 and 1.0 (higher value +/// means more similar). +/// +/// ``` +/// use strsim::jaro_against_vec; +/// +/// let v = vec!["test", "test1", "test12", "test123", "", "tset"]; +/// let result = jaro_against_vec("test", &v); +/// let expected = vec![1.0, 0.933333, 0.888889, 0.857143, 0.0, 0.916667]; +/// let delta: f64 = result.iter() +/// .zip(expected.iter()) +/// .map(|(x, y)| (x - y).abs() as f64) +/// .fold(0.0, |x, y| x + y as f64); +/// assert!(delta.abs() < 0.0001); +/// ``` +pub fn jaro_against_vec(a: &str, v: &[&str]) -> Vec<f64> { + v.iter().map(|b| jaro(a, b)).collect() +} + +/// Like Jaro but gives a boost to strings that have a common prefix. +/// +/// ``` +/// use strsim::jaro_winkler; +/// +/// assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() < +/// 0.001); +/// ``` +pub fn jaro_winkler(a: &str, b: &str) -> f64 { + let jaro_distance = jaro(a, b); + + // Don't limit the length of the common prefix + let prefix_length = a.chars() + .zip(b.chars()) + .take_while(|&(a_char, b_char)| a_char == b_char) + .count(); + + let jaro_winkler_distance = + jaro_distance + (0.1 * prefix_length as f64 * (1.0 - jaro_distance)); + + if jaro_winkler_distance <= 1.0 { + jaro_winkler_distance + } else { + 1.0 + } +} + +/// Calculates the Jaro-Winkler distances between a string and each string +/// in a vector. Returns a vector of corresponding values. +/// +/// ``` +/// use strsim::jaro_winkler_against_vec; +/// +/// let v = vec!["test", "test1", "test12", "test123", "", "tset"]; +/// let result = jaro_winkler_against_vec("test", &v); +/// let expected = vec![1.0, 0.96, 0.933333, 0.914286, 0.0, 0.925]; +/// let delta: f64 = result.iter() +/// .zip(expected.iter()) +/// .map(|(x, y)| (x - y).abs() as f64) +/// .fold(0.0, |x, y| x + y as f64); +/// assert!(delta.abs() < 0.0001); +/// ``` +pub fn jaro_winkler_against_vec(a: &str, v: &[&str]) -> Vec<f64> { + v.iter().map(|b| jaro_winkler(a, b)).collect() +} + +/// Calculates the minimum number of insertions, deletions, and substitutions +/// required to change one string into the other. +/// +/// ``` +/// use strsim::levenshtein; +/// +/// assert_eq!(3, levenshtein("kitten", "sitting")); +/// ``` +pub fn levenshtein(a: &str, b: &str) -> usize { + let a_len = a.chars().count(); + let b_len = b.chars().count(); + if a == b { return 0; } + else if a_len == 0 { return b_len; } + else if b_len == 0 { return a_len; } + + let mut prev_distances: Vec<usize> = Vec::with_capacity(b_len + 1); + let mut curr_distances: Vec<usize> = Vec::with_capacity(b_len + 1); + + for i in 0..(b_len + 1) { + prev_distances.push(i); + curr_distances.push(0); + } + + for (i, a_char) in a.chars().enumerate() { + curr_distances[0] = i + 1; + + for (j, b_char) in b.chars().enumerate() { + let cost = if a_char == b_char { 0 } else { 1 }; + curr_distances[j + 1] = min(curr_distances[j] + 1, + min(prev_distances[j + 1] + 1, + prev_distances[j] + cost)); + } + + prev_distances.clone_from(&curr_distances); + } + + curr_distances[b_len] +} + +/// Calculates the Levenshtein distance between a string and each string in a +/// vector. Returns a vector of corresponding values. +/// +/// ``` +/// use strsim::levenshtein_against_vec; +/// +/// let v = vec!["test", "test1", "test12", "test123", "", "tset"]; +/// let result = levenshtein_against_vec("test", &v); +/// let expected = vec![0, 1, 2, 3, 4, 2]; +/// assert_eq!(expected, result); +/// ``` +pub fn levenshtein_against_vec(a: &str, v: &[&str]) -> Vec<usize> { + v.iter().map(|b| levenshtein(a, b)).collect() +} + +/// Like Levenshtein but allows for adjacent transpositions. Each substring can +/// only be edited once. +/// +/// ``` +/// use strsim::osa_distance; +/// +/// assert_eq!(3, osa_distance("ab", "bca")); +/// ``` +pub fn osa_distance(a: &str, b: &str) -> usize { + let a_len = a.chars().count(); + let b_len = b.chars().count(); + if a == b { return 0; } + else if a_len == 0 { return b_len; } + else if b_len == 0 { return a_len; } + + let mut prev_two_distances: Vec<usize> = Vec::with_capacity(b_len + 1); + let mut prev_distances: Vec<usize> = Vec::with_capacity(b_len + 1); + let mut curr_distances: Vec<usize> = Vec::with_capacity(b_len + 1); + + let mut prev_a_char = char::MAX; + let mut prev_b_char = char::MAX; + + for i in 0..(b_len + 1) { + prev_two_distances.push(i); + prev_distances.push(i); + curr_distances.push(0); + } + + for (i, a_char) in a.chars().enumerate() { + curr_distances[0] = i + 1; + + for (j, b_char) in b.chars().enumerate() { + let cost = if a_char == b_char { 0 } else { 1 }; + curr_distances[j + 1] = min(curr_distances[j] + 1, + min(prev_distances[j + 1] + 1, + prev_distances[j] + cost)); + if i > 0 && j > 0 && a_char != b_char && + a_char == prev_b_char && b_char == prev_a_char { + curr_distances[j + 1] = min(curr_distances[j + 1], + prev_two_distances[j - 1] + 1); + } + + prev_b_char = b_char; + } + + prev_two_distances.clone_from(&prev_distances); + prev_distances.clone_from(&curr_distances); + prev_a_char = a_char; + } + + curr_distances[b_len] + +} + +/// Calculates the optimal string alignment distance between a string and each +/// string in a vector. Returns a vector of corresponding values. +/// +/// ``` +/// use strsim::osa_distance_against_vec; +/// +/// let v = vec!["test", "test1", "test12", "test123", "", "tset"]; +/// let result = osa_distance_against_vec("test", &v); +/// let expected = vec![0, 1, 2, 3, 4, 1]; +/// assert_eq!(expected, result); +/// ``` +pub fn osa_distance_against_vec(a: &str, v: &[&str]) -> Vec<usize> { + v.iter().map(|b| osa_distance(a, b)).collect() +} + +/// Like optimal string alignment, but substrings can be edited an unlimited +/// number of times, and the triangle inequality holds. +/// +/// ``` +/// use strsim::damerau_levenshtein; +/// +/// assert_eq!(2, damerau_levenshtein("ab", "bca")); +/// ``` +pub fn damerau_levenshtein(a: &str, b: &str) -> usize { + if a == b { return 0; } + + let a_chars: Vec<char> = a.chars().collect(); + let b_chars: Vec<char> = b.chars().collect(); + let a_len = a_chars.len(); + let b_len = b_chars.len(); + + if a_len == 0 { return b_len; } + if b_len == 0 { return a_len; } + + let mut distances = vec![vec![0; b_len + 2]; a_len + 2]; + let max_distance = a_len + b_len; + distances[0][0] = max_distance; + + for i in 0..(a_len + 1) { + distances[i + 1][0] = max_distance; + distances[i + 1][1] = i; + } + + for j in 0..(b_len + 1) { + distances[0][j + 1] = max_distance; + distances[1][j + 1] = j; + } + + let mut chars: HashMap<char, usize> = HashMap::new(); + + for i in 1..(a_len + 1) { + let mut db = 0; + + for j in 1..(b_len + 1) { + let k = match chars.get(&b_chars[j - 1]) { + Some(value) => value.clone(), + None => 0 + }; + + let l = db; + + let mut cost = 1; + if a_chars[i - 1] == b_chars[j - 1] { + cost = 0; + db = j; + } + + let substitution_cost = distances[i][j] + cost; + let insertion_cost = distances[i][j + 1] + 1; + let deletion_cost = distances[i + 1][j] + 1; + let transposition_cost = distances[k][l] + (i - k - 1) + 1 + + (j - l - 1); + + distances[i + 1][j + 1] = min(substitution_cost, + min(insertion_cost, + min(deletion_cost, + transposition_cost))); + } + + chars.insert(a_chars[i - 1], i); + } + + distances[a_len + 1][b_len + 1] +} + +/// Calculates the Damerau-Levenshtein distance between a string and each string +/// in a vector. Returns a vector of corresponding values. +/// +/// ``` +/// use strsim::damerau_levenshtein_against_vec; +/// +/// let v = vec!["test", "test1", "test12", "test123", "", "tset"]; +/// let result = damerau_levenshtein_against_vec("test", &v); +/// let expected = vec![0, 1, 2, 3, 4, 1]; +/// assert_eq!(expected, result); +/// ``` +pub fn damerau_levenshtein_against_vec(a: &str, v: &[&str]) -> Vec<usize> { + v.iter().map(|b| damerau_levenshtein(a, b)).collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn hamming_empty() { + match hamming("", "") { + Ok(distance) => { assert_eq!(0, distance); }, + Err(why) => { panic!("{:?}", why); } + } + } + + #[test] + fn hamming_same() { + match hamming("hamming", "hamming") { + Ok(distance) => { assert_eq!(0, distance); }, + Err(why) => { panic!("{:?}", why); } + } + } + + #[test] + fn hamming_diff() { + match hamming("hamming", "hammers") { + Ok(distance) => { assert_eq!(3, distance); }, + Err(why) => { panic!("{:?}", why); } + } + } + + #[test] + fn hamming_diff_multibyte() { + match hamming("hamming", "h香mmüng") { + Ok(distance) => { assert_eq!(2, distance); }, + Err(why) => { panic!("{:?}", why); } + } + } + + #[test] + fn hamming_unequal_length() { + match hamming("ham", "hamming") { + Ok(_) => { panic!(); }, + Err(why) => { assert_eq!(why, StrSimError::DifferentLengthArgs); } + } + } + + #[test] + fn hamming_names() { + match hamming("Friedrich Nietzs", "Jean-Paul Sartre") { + Ok(distance) => { assert_eq!(14, distance); }, + Err(why) => { panic!("{:?}", why); } + } + } + + #[test] + fn jaro_both_empty() { + assert_eq!(1.0, jaro("", "")); + } + + #[test] + fn jaro_first_empty() { + assert_eq!(0.0, jaro("", "jaro")); + } + + #[test] + fn jaro_second_empty() { + assert_eq!(0.0, jaro("distance", "")); + } + + #[test] + fn jaro_same() { + assert_eq!(1.0, jaro("jaro", "jaro")); + } + + #[test] + fn jaro_multibyte() { + assert!((0.818 - jaro("testabctest", "testöঙ香test")) < 0.001); + assert!((0.818 - jaro("testöঙ香test", "testabctest")) < 0.001); + } + + #[test] + fn jaro_diff_short() { + assert!((0.767 - jaro("dixon", "dicksonx")).abs() < 0.001); + } + + #[test] + fn jaro_diff_one_character() { + assert_eq!(0.0, jaro("a", "b")); + } + + #[test] + fn jaro_diff_one_and_two() { + assert!((0.83 - jaro("a", "ab")).abs() < 0.01); + } + + #[test] + fn jaro_diff_two_and_one() { + assert!((0.83 - jaro("ab", "a")).abs() < 0.01); + } + + #[test] + fn jaro_diff_no_transposition() { + assert!((0.822 - jaro("dwayne", "duane")).abs() < 0.001); + } + + #[test] + fn jaro_diff_with_transposition() { + assert!((0.944 - jaro("martha", "marhta")).abs() < 0.001); + } + + #[test] + fn jaro_names() { + assert!((0.392 - jaro("Friedrich Nietzsche", + "Jean-Paul Sartre")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_both_empty() { + assert_eq!(1.0, jaro_winkler("", "")); + } + + #[test] + fn jaro_winkler_first_empty() { + assert_eq!(0.0, jaro_winkler("", "jaro-winkler")); + } + + #[test] + fn jaro_winkler_second_empty() { + assert_eq!(0.0, jaro_winkler("distance", "")); + } + + #[test] + fn jaro_winkler_same() { + assert_eq!(1.0, jaro_winkler("Jaro-Winkler", "Jaro-Winkler")); + } + + #[test] + fn jaro_winkler_multibyte() { + assert!((0.89 - jaro_winkler("testabctest", "testöঙ香test")).abs() < + 0.001); + assert!((0.89 - jaro_winkler("testöঙ香test", "testabctest")).abs() < + 0.001); + } + + #[test] + fn jaro_winkler_diff_short() { + assert!((0.813 - jaro_winkler("dixon", "dicksonx")).abs() < 0.001); + assert!((0.813 - jaro_winkler("dicksonx", "dixon")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_diff_one_character() { + assert_eq!(0.0, jaro_winkler("a", "b")); + } + + #[test] + fn jaro_winkler_diff_no_transposition() { + assert!((0.840 - jaro_winkler("dwayne", "duane")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_diff_with_transposition() { + assert!((0.961 - jaro_winkler("martha", "marhta")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_names() { + assert!((0.562 - jaro_winkler("Friedrich Nietzsche", + "Fran-Paul Sartre")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_long_prefix() { + assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() < + 0.001); + } + + #[test] + fn jaro_winkler_more_names() { + assert!((0.868 - jaro_winkler("Thorkel", "Thorgier")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_length_of_one() { + assert!((0.738 - jaro_winkler("Dinsdale", "D")).abs() < 0.001); + } + + #[test] + fn jaro_winkler_very_long_prefix() { + assert!((1.0 - jaro_winkler("thequickbrownfoxjumpedoverx", + "thequickbrownfoxjumpedovery")).abs() < + 0.001); + } + + #[test] + fn levenshtein_empty() { + assert_eq!(0, levenshtein("", "")); + } + + #[test] + fn levenshtein_same() { + assert_eq!(0, levenshtein("levenshtein", "levenshtein")); + } + + #[test] + fn levenshtein_diff_short() { + assert_eq!(3, levenshtein("kitten", "sitting")); + } + + #[test] + fn levenshtein_diff_with_space() { + assert_eq!(5, levenshtein("hello, world", "bye, world")); + } + + #[test] + fn levenshtein_diff_multibyte() { + assert_eq!(3, levenshtein("öঙ香", "abc")); + assert_eq!(3, levenshtein("abc", "öঙ香")); + } + + #[test] + fn levenshtein_diff_longer() { + let a = "The quick brown fox jumped over the angry dog."; + let b = "Lorem ipsum dolor sit amet, dicta latine an eam."; + assert_eq!(37, levenshtein(a, b)); + } + + #[test] + fn levenshtein_first_empty() { + assert_eq!(7, levenshtein("", "sitting")); + } + + #[test] + fn levenshtein_second_empty() { + assert_eq!(6, levenshtein("kitten", "")); + } + + #[test] + fn osa_distance_empty() { + assert_eq!(0, osa_distance("", "")); + } + + #[test] + fn osa_distance_same() { + assert_eq!(0, osa_distance("damerau", "damerau")); + } + + #[test] + fn osa_distance_first_empty() { + assert_eq!(7, osa_distance("", "damerau")); + } + + #[test] + fn osa_distance_second_empty() { + assert_eq!(7, osa_distance("damerau", "")); + } + + #[test] + fn osa_distance_diff() { + assert_eq!(3, osa_distance("ca", "abc")); + } + + #[test] + fn osa_distance_diff_short() { + assert_eq!(3, osa_distance("damerau", "aderua")); + } + + #[test] + fn osa_distance_diff_reversed() { + assert_eq!(3, osa_distance("aderua", "damerau")); + } + + #[test] + fn osa_distance_diff_multibyte() { + assert_eq!(3, osa_distance("öঙ香", "abc")); + assert_eq!(3, osa_distance("abc", "öঙ香")); + } + + #[test] + fn osa_distance_diff_unequal_length() { + assert_eq!(6, osa_distance("damerau", "aderuaxyz")); + } + + #[test] + fn osa_distance_diff_unequal_length_reversed() { + assert_eq!(6, osa_distance("aderuaxyz", "damerau")); + } + + #[test] + fn osa_distance_diff_comedians() { + assert_eq!(5, osa_distance("Stewart", "Colbert")); + } + + #[test] + fn osa_distance_many_transpositions() { + assert_eq!(4, osa_distance("abcdefghijkl", "bacedfgihjlk")); + } + + #[test] + fn osa_distance_diff_longer() { + let a = "The quick brown fox jumped over the angry dog."; + let b = "Lehem ipsum dolor sit amet, dicta latine an eam."; + assert_eq!(36, osa_distance(a, b)); + } + + #[test] + fn osa_distance_beginning_transposition() { + assert_eq!(1, osa_distance("foobar", "ofobar")); + } + + #[test] + fn osa_distance_end_transposition() { + assert_eq!(1, osa_distance("specter", "spectre")); + } + + #[test] + fn osa_distance_restricted_edit() { + assert_eq!(4, osa_distance("a cat", "an abct")); + } + + #[test] + fn damerau_levenshtein_empty() { + assert_eq!(0, damerau_levenshtein("", "")); + } + + #[test] + fn damerau_levenshtein_same() { + assert_eq!(0, damerau_levenshtein("damerau", "damerau")); + } + + #[test] + fn damerau_levenshtein_first_empty() { + assert_eq!(7, damerau_levenshtein("", "damerau")); + } + + #[test] + fn damerau_levenshtein_second_empty() { + assert_eq!(7, damerau_levenshtein("damerau", "")); + } + + #[test] + fn damerau_levenshtein_diff() { + assert_eq!(2, damerau_levenshtein("ca", "abc")); + } + + #[test] + fn damerau_levenshtein_diff_short() { + assert_eq!(3, damerau_levenshtein("damerau", "aderua")); + } + + #[test] + fn damerau_levenshtein_diff_reversed() { + assert_eq!(3, damerau_levenshtein("aderua", "damerau")); + } + + #[test] + fn damerau_levenshtein_diff_multibyte() { + assert_eq!(3, damerau_levenshtein("öঙ香", "abc")); + assert_eq!(3, damerau_levenshtein("abc", "öঙ香")); + } + + #[test] + fn damerau_levenshtein_diff_unequal_length() { + assert_eq!(6, damerau_levenshtein("damerau", "aderuaxyz")); + } + + #[test] + fn damerau_levenshtein_diff_unequal_length_reversed() { + assert_eq!(6, damerau_levenshtein("aderuaxyz", "damerau")); + } + + #[test] + fn damerau_levenshtein_diff_comedians() { + assert_eq!(5, damerau_levenshtein("Stewart", "Colbert")); + } + + #[test] + fn damerau_levenshtein_many_transpositions() { + assert_eq!(4, damerau_levenshtein("abcdefghijkl", "bacedfgihjlk")); + } + + #[test] + fn damerau_levenshtein_diff_longer() { + let a = "The quick brown fox jumped over the angry dog."; + let b = "Lehem ipsum dolor sit amet, dicta latine an eam."; + assert_eq!(36, damerau_levenshtein(a, b)); + } + + #[test] + fn damerau_levenshtein_beginning_transposition() { + assert_eq!(1, damerau_levenshtein("foobar", "ofobar")); + } + + #[test] + fn damerau_levenshtein_end_transposition() { + assert_eq!(1, damerau_levenshtein("specter", "spectre")); + } + + #[test] + fn damerau_levenshtein_unrestricted_edit() { + assert_eq!(3, damerau_levenshtein("a cat", "an abct")); + } + + #[test] + fn levenshtein_against_vec_empty() { + let v = Vec::new(); + let result = levenshtein_against_vec("test", &v); + let expected: Vec<usize> = Vec::new(); + assert_eq!(expected, result); + } + + #[test] + fn levenshtein_against_vec_one() { + let v = vec!["testy"]; + let result = levenshtein_against_vec("test", &v); + let expected = vec![1]; + assert_eq!(expected, result); + } + + #[test] + fn levenshtein_against_vec_many() { + let v = vec!["test", "test1", "test12", "test123", "", "tset"]; + let result = levenshtein_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 2]; + assert_eq!(expected, result); + } + + #[test] + fn osa_distance_against_vec_empty() { + let v = Vec::new(); + let result = osa_distance_against_vec("test", &v); + let expected: Vec<usize> = Vec::new(); + assert_eq!(expected, result); + } + + #[test] + fn osa_distance_against_vec_one() { + let v = vec!["etst"]; + let result = osa_distance_against_vec("test", &v); + let expected = vec![1]; + assert_eq!(expected, result); + } + + #[test] + fn osa_distance_against_vec_many() { + let v = vec!["test", "test1", "test12", "test123", "", "tsvet"]; + let result = osa_distance_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 3]; + assert_eq!(expected, result); + } + + #[test] + fn damerau_levenshtein_against_vec_empty() { + let v = Vec::new(); + let result = damerau_levenshtein_against_vec("test", &v); + let expected: Vec<usize> = Vec::new(); + assert_eq!(expected, result); + } + + #[test] + fn damerau_levenshtein_against_vec_one() { + let v = vec!["etst"]; + let result = damerau_levenshtein_against_vec("test", &v); + let expected = vec![1]; + assert_eq!(expected, result); + } + + #[test] + fn damerau_levenshtein_against_vec_many() { + let v = vec!["test", "test1", "test12", "test123", "", "tsvet"]; + let result = damerau_levenshtein_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 2]; + assert_eq!(expected, result); + } + + fn equal_float_vecs(a: Vec<f64>, b: Vec<f64>) -> bool { + let delta: f64 = a.iter() + .zip(b.iter()) + .map(|(x, y)| (x - y).abs() as f64) + .fold(0.0, |x, y| x + y as f64); + delta < 0.0001 + } + + #[test] + fn jaro_against_vec_empty() { + let v = Vec::new(); + let result = jaro_against_vec("test", &v); + let expected: Vec<f64> = Vec::new(); + assert_eq!(expected, result); + } + + #[test] + fn jaro_against_vec_one() { + let v = vec!["test1"]; + let result = jaro_against_vec("test", &v); + let expected = vec![0.93333]; + assert!(equal_float_vecs(result, expected)); + } + + #[test] + fn jaro_against_vec_many() { + let v = vec!["test", "test1", "test12", "test123", "", "tset"]; + let result = jaro_against_vec("test", &v); + let expected = vec![1.0, 0.933333, 0.888889, 0.857143, 0.0, 0.916667]; + assert!(equal_float_vecs(result, expected)); + } + + #[test] + fn jaro_winkler_against_vec_empty() { + let v = Vec::new(); + let result = jaro_winkler_against_vec("test", &v); + let expected: Vec<f64> = Vec::new(); + assert_eq!(expected, result); + } + + #[test] + fn jaro_winkler_against_vec_one() { + let v = vec!["test123"]; + let result = jaro_winkler_against_vec("test", &v); + let expected = vec![0.914286]; + assert!(equal_float_vecs(result, expected)); + } + + #[test] + fn jaro_winkler_against_vec_many() { + let v = vec!["test", "test1", "test12", "test123", "", "tset"]; + let result = jaro_winkler_against_vec("test", &v); + let expected = vec![1.0, 0.96, 0.933333, 0.914286, 0.0, 0.925]; + assert!(equal_float_vecs(result, expected)); + } +} + diff --git a/third_party/rust/strsim-0.6.0/tests/lib.rs b/third_party/rust/strsim-0.6.0/tests/lib.rs new file mode 100644 index 000000000000..956d0f5679f1 --- /dev/null +++ b/third_party/rust/strsim-0.6.0/tests/lib.rs @@ -0,0 +1,89 @@ +extern crate strsim; + +use strsim::{hamming, levenshtein, osa_distance, damerau_levenshtein, jaro, + jaro_winkler, levenshtein_against_vec, osa_distance_against_vec, + damerau_levenshtein_against_vec, jaro_against_vec, + jaro_winkler_against_vec}; + +#[test] +fn hamming_works() { + match hamming("hamming", "hammers") { + Ok(distance) => assert_eq!(3, distance), + Err(why) => panic!("{:?}", why) + } +} + +#[test] +fn levenshtein_works() { + assert_eq!(3, levenshtein("kitten", "sitting")); +} + +#[test] +fn osa_distance_works() { + assert_eq!(3, osa_distance("ac", "cba")); +} + +#[test] +fn damerau_levenshtein_works() { + assert_eq!(2, damerau_levenshtein("ac", "cba")); +} + +#[test] +fn jaro_works() { + assert!((0.392 - jaro("Friedrich Nietzsche", "Jean-Paul Sartre")).abs() < + 0.001); +} + +#[test] +fn jaro_winkler_works() { + assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() < + 0.001); +} + +#[test] +fn levenshtein_against_vec_works() { + let v = vec!["test", "test1", "test12", "test123", "", "tset", "tsvet"]; + let result = levenshtein_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 2, 3]; + assert_eq!(expected, result); +} + +#[test] +fn osa_distance_against_vec_works() { + let v = vec!["test", "test1", "test12", "test123", "", "tset", "tsvet"]; + let result = osa_distance_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 1, 3]; + assert_eq!(expected, result); +} + +#[test] +fn damerau_levenshtein_against_vec_works() { + let v = vec!["test", "test1", "test12", "test123", "", "tset", "tsvet"]; + let result = damerau_levenshtein_against_vec("test", &v); + let expected = vec![0, 1, 2, 3, 4, 1, 2]; + assert_eq!(expected, result); +} + +#[test] +fn jaro_against_vec_works() { + let v = vec!["test", "test1", "test12", "test123", "", "tset"]; + let result = jaro_against_vec("test", &v); + let expected = vec![1.0, 0.933333, 0.888889, 0.857143, 0.0, 0.916667]; + let delta: f64 = result.iter() + .zip(expected.iter()) + .map(|(x, y)| (x - y).abs() as f64) + .fold(0.0, |x, y| x + y as f64); + assert!(delta.abs() < 0.0001); +} + +#[test] +fn jaro_winkler_against_vec_works() { + let v = vec!["test", "test1", "test12", "test123", "", "tset"]; + let result = jaro_winkler_against_vec("test", &v); + let expected = vec![1.0, 0.96, 0.933333, 0.914286, 0.0, 0.925]; + let delta: f64 = result.iter() + .zip(expected.iter()) + .map(|(x, y)| (x - y).abs() as f64) + .fold(0.0, |x, y| x + y as f64); + assert!(delta.abs() < 0.0001); +} diff --git a/third_party/rust/thread_local/.cargo-checksum.json b/third_party/rust/thread_local/.cargo-checksum.json index 8798696c8d11..e140a3553d61 100644 --- a/third_party/rust/thread_local/.cargo-checksum.json +++ b/third_party/rust/thread_local/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"b4f81d513b95fff17f96d5da83768187870df83969fd5e49b030aaf6158ccd58","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"00a29378d5aeb66b7a48b77bee0d463c8b408b8a9cb0abb7674edb10d142aca0","benches/thread_local.rs":"cc8bde81ed6206525feff209598caf1e01e89a83bf21d8b7ccc0dadc8b89d815","src/lib.rs":"d7f875b0c4a8e2229f3510c88c0425342f1628fdf2f2b113c80789b6b90378b7","src/thread_id.rs":"0962c130061939557aa272115e4420fbbc63b6bd306783a456a8ffcbf304a447","src/unreachable.rs":"830d44988f86f4fc6c3c4dd7e9e4e7d0f2cb9c5b024c360b5f7ceae365983367"},"package":"c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"} \ No newline at end of file +{"files":{"Cargo.toml":"a1b604dfa7a867267df097ac672afcceff2531c75e15982b7a3ecb3bf1604900","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"00a29378d5aeb66b7a48b77bee0d463c8b408b8a9cb0abb7674edb10d142aca0","benches/thread_local.rs":"cc8bde81ed6206525feff209598caf1e01e89a83bf21d8b7ccc0dadc8b89d815","src/lib.rs":"e5902751bf1768fb756b88146da66a128920d3f1b166b797fd0a5e1528f2e687","src/thread_id.rs":"0962c130061939557aa272115e4420fbbc63b6bd306783a456a8ffcbf304a447"},"package":"279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963"} \ No newline at end of file diff --git a/third_party/rust/thread_local/Cargo.toml b/third_party/rust/thread_local/Cargo.toml index fc7b3c82dd92..012719f943aa 100644 --- a/third_party/rust/thread_local/Cargo.toml +++ b/third_party/rust/thread_local/Cargo.toml @@ -12,7 +12,7 @@ [package] name = "thread_local" -version = "0.3.6" +version = "0.3.5" authors = ["Amanieu d'Antras <amanieu@gmail.com>"] description = "Per-object thread-local storage" documentation = "https://amanieu.github.io/thread_local-rs/thread_local/index.html" @@ -22,5 +22,8 @@ license = "Apache-2.0/MIT" repository = "https://github.com/Amanieu/thread_local-rs" [dependencies.lazy_static] version = "1.0" + +[dependencies.unreachable] +version = "1.0" [badges.travis-ci] repository = "Amanieu/thread_local-rs" diff --git a/third_party/rust/thread_local/src/lib.rs b/third_party/rust/thread_local/src/lib.rs index 2f8e579b5991..dde9a15bed1f 100644 --- a/third_party/rust/thread_local/src/lib.rs +++ b/third_party/rust/thread_local/src/lib.rs @@ -70,11 +70,11 @@ #![warn(missing_docs)] +extern crate unreachable; #[macro_use] extern crate lazy_static; mod thread_id; -mod unreachable; use std::sync::atomic::{AtomicPtr, AtomicUsize, Ordering}; use std::sync::Mutex; @@ -158,7 +158,7 @@ fn hash(id: usize, bits: usize) -> usize { #[cfg(target_pointer_width = "64")] #[inline] fn hash(id: usize, bits: usize) -> usize { - id.wrapping_mul(0x9E37_79B9_7F4A_7C15) >> (64 - bits) + id.wrapping_mul(0x9E3779B97F4A7C15) >> (64 - bits) } impl<T: ?Sized + Send> ThreadLocal<T> { diff --git a/third_party/rust/thread_local/src/unreachable.rs b/third_party/rust/thread_local/src/unreachable.rs deleted file mode 100644 index baff76600cac..000000000000 --- a/third_party/rust/thread_local/src/unreachable.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2017 Amanieu d'Antras -// -// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or -// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or -// http://opensource.org/licenses/MIT>, at your option. This file may not be -// copied, modified, or distributed except according to those terms. - -//! # unreachable -//! inlined from https://github.com/reem/rust-unreachable/ -//! -//! An unreachable code optimization hint in stable rust, and some useful -//! extension traits for `Option` and `Result`. -//! - -/// Hint to the optimizer that any code path which calls this function is -/// statically unreachable and can be removed. -/// -/// Calling this function in reachable code invokes undefined behavior. Be -/// very, very sure this is what you want; often, a simple `panic!` is more -/// suitable. -#[inline] -pub unsafe fn unreachable() -> ! { - /// The empty type for cases which can't occur. - enum Void { } - let x: &Void = ::std::mem::transmute(1usize); - match *x {} -} - -/// An extension trait for `Option<T>` providing unchecked unwrapping methods. -pub trait UncheckedOptionExt<T> { - /// Get the value out of this Option without checking for None. - unsafe fn unchecked_unwrap(self) -> T; - - /// Assert that this Option is a None to the optimizer. - unsafe fn unchecked_unwrap_none(self); -} - -/// An extension trait for `Result<T, E>` providing unchecked unwrapping methods. -pub trait UncheckedResultExt<T, E> { - /// Get the value out of this Result without checking for Err. - unsafe fn unchecked_unwrap_ok(self) -> T; - - /// Get the error out of this Result without checking for Ok. - unsafe fn unchecked_unwrap_err(self) -> E; -} - -impl<T> UncheckedOptionExt<T> for Option<T> { - unsafe fn unchecked_unwrap(self) -> T { - match self { - Some(x) => x, - None => unreachable() - } - } - - unsafe fn unchecked_unwrap_none(self) { - if self.is_some() { unreachable() } - } -} - -impl<T, E> UncheckedResultExt<T, E> for Result<T, E> { - unsafe fn unchecked_unwrap_ok(self) -> T { - match self { - Ok(x) => x, - Err(_) => unreachable() - } - } - - unsafe fn unchecked_unwrap_err(self) -> E { - match self { - Ok(_) => unreachable(), - Err(e) => e - } - } -} \ No newline at end of file

(&mut self, dir: P) -> &mut Self + where + P: Into, + { + self.session.out_dir = Some(dir.into()); + self + } + + /// Apply `cargo` directory location conventions, by setting the + /// input directory to `src` and the output directory to + /// `$OUT_DIR`. + pub fn use_cargo_dir_conventions(&mut self) -> &mut Self { + self.set_in_dir("src") + .set_out_dir(env::var("OUT_DIR").unwrap()); + self + } + + /// If true, always convert `.lalrpop` files into `.rs` files, even if the + /// `.rs` file is newer. Default is false. + pub fn force_build(&mut self, val: bool) -> &mut Configuration { + self.session.force_build = val; + self + } + + /// If true, emit comments into the generated code. This makes the + /// generated code significantly larger. Default is false. + pub fn emit_comments(&mut self, val: bool) -> &mut Configuration { + self.session.emit_comments = val; + self + } + + /// If true, emit report file about generated code. + pub fn emit_report(&mut self, val: bool) -> &mut Configuration { + self.session.emit_report = val; + self + } + + /// Minimal logs: only for errors that halt progress. + pub fn log_quiet(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Taciturn); + self + } + + /// Informative logs: give some high-level indications of + /// progress (default). + pub fn log_info(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Informative); + self + } + + /// Verbose logs: more than info, but still not overwhelming. + pub fn log_verbose(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Verbose); + self + } + + /// Debug logs: better redirect this to a file. Intended for + /// debugging LALRPOP itself. + pub fn log_debug(&mut self) -> &mut Configuration { + self.session.log.set_level(Level::Debug); + self + } + + /// Enables "unit-testing" configuration. This is only for + /// lalrpop-test. + #[doc(hidden)] + pub fn unit_test(&mut self) -> &mut Configuration { + self.session.unit_test = true; + self + } + + /// Process all files according to the `set_in_dir` and + /// `set_out_dir` configuration. + pub fn process(&self) -> Result<(), Box> { + let root = if let Some(ref d) = self.session.in_dir { + d.as_path() + } else { + Path::new(".") + }; + self.process_dir(root) + } + + /// Process all files in the current directory, which -- unless you + /// have changed it -- is typically the root of the crate being compiled. + pub fn process_current_dir(&self) -> Result<(), Box> { + self.process_dir(try!(current_dir())) + } + + /// Process all `.lalrpop` files in `path`. + pub fn process_dir>(&self, path: P) -> Result<(), Box> { + let session = Rc::new(self.session.clone()); + try!(build::process_dir(session, path)); + Ok(()) + } + + /// Process the given `.lalrpop` file. + pub fn process_file>(&self, path: P) -> Result<(), Box> { + let session = Rc::new(self.session.clone()); + try!(build::process_file(session, path)); + Ok(()) + } +} + +/// Process all files in the current directory, which -- unless you +/// have changed it -- is typically the root of the crate being compiled. +/// +/// Equivalent to `Configuration::new().process_current_dir()`. +pub fn process_root() -> Result<(), Box> { + Configuration::new().process_current_dir() +} + +/// Deprecated in favor of `Configuration`. Try: +/// +/// ```rust +/// Configuration::new().force_build(true).process_current_dir() +/// ``` +/// +/// instead. +pub fn process_root_unconditionally() -> Result<(), Box> { + Configuration::new().force_build(true).process_current_dir() +} diff --git a/third_party/rust/lalrpop-snap/src/build/action.rs b/third_party/rust/lalrpop-snap/src/build/action.rs new file mode 100644 index 000000000000..e1f8f8c9ccf8 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/build/action.rs @@ -0,0 +1,422 @@ +//! Code for generating action code. +//! +//! From the outside, action fns have one of two forms. If they take +//! symbols as input, e.g. from a production like `X = Y Z => ...` +//! (which takes Y and Z as input), they have this form: +//! +//! ``` +//! fn __action17< +//! 'input, // user-declared type parameters (*) +//! >( +//! input: &'input str, // user-declared parameters +//! __0: (usize, usize, usize), // symbols being reduced, if any +//! ... +//! __N: (usize, Foo, usize), // each has a type (L, T, L) +//! ) -> Box> +//! ``` +//! +//! Otherwise, they have this form: +//! +//! ``` +//! fn __action17< +//! 'input, // user-declared type parameters (*) +//! >( +//! input: &'input str, // user-declared parameters +//! __lookbehind: &usize, // value for @R -- "end of previous token" +//! __lookahead: &usize, // value for @L -- "start of next token" +//! ) -> Box> +//! ``` +//! +//! * -- in this case, those "user-declared" parameters are inserted by +//! the "internal tokenizer". + +use grammar::repr as r; +use rust::RustWrite; +use std::io::{self, Write}; + +pub fn emit_action_code(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + for (i, defn) in grammar.action_fn_defns.iter().enumerate() { + rust!(rust, ""); + + // we always thread the parameters through to the action code, + // even if they are not used, and hence we need to disable the + // unused variables lint, which otherwise gets very excited. + if !grammar.parameters.is_empty() { + rust!(rust, "#[allow(unused_variables)]"); + } + + match defn.kind { + r::ActionFnDefnKind::User(ref data) => { + try!(emit_user_action_code(grammar, rust, i, defn, data)) + } + r::ActionFnDefnKind::Lookaround(ref variant) => { + try!(emit_lookaround_action_code(grammar, rust, i, defn, variant)) + } + r::ActionFnDefnKind::Inline(ref data) => { + try!(emit_inline_action_code(grammar, rust, i, defn, data)) + } + } + } + + Ok(()) +} + +fn ret_type_string(grammar: &r::Grammar, defn: &r::ActionFnDefn) -> String { + if defn.fallible { + format!( + "Result<{},{}lalrpop_util::ParseError<{},{},{}>>", + defn.ret_type, + grammar.prefix, + grammar.types.terminal_loc_type(), + grammar.types.terminal_token_type(), + grammar.types.error_type() + ) + } else { + format!("{}", defn.ret_type) + } +} + +fn emit_user_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + defn: &r::ActionFnDefn, + data: &r::UserActionFnDefn, +) -> io::Result<()> { + let ret_type = ret_type_string(grammar, defn); + + // For each symbol to be reduced, we will receive + // a (L, T, L) triple where the Ls are locations and + // the T is the data. Ignore the locations and bind + // the data to the name the user gave. + let mut arguments: Vec = data.arg_patterns + .iter() + .zip( + data.arg_types + .iter() + .cloned() + .map(|t| grammar.types.spanned_type(t)), + ) + .map(|(p, t)| format!("(_, {}, _): {}", p, t)) + .collect(); + + // If this is a reduce of an empty production, we will + // automatically add position information in the form of + // lookbehind/lookahead values. Otherwise, those values would be + // determined from the arguments themselves. + if data.arg_patterns.is_empty() { + arguments.extend(vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ]); + } + + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + arguments, + ret_type, + vec![] + )); + rust!(rust, "{{"); + rust!(rust, "{}", data.code); + rust!(rust, "}}"); + Ok(()) +} + +fn emit_lookaround_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + _defn: &r::ActionFnDefn, + data: &r::LookaroundActionFnDefn, +) -> io::Result<()> { + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ], + format!("{}", grammar.types.terminal_loc_type()), + vec![] + )); + + rust!(rust, "{{"); + match *data { + r::LookaroundActionFnDefn::Lookahead => { + // take the lookahead, if any; otherwise, we are + // at EOF, so taker the lookbehind (end of last + // pushed token); if that is missing too, then + // supply default. + rust!(rust, "{}lookahead.clone()", grammar.prefix); + } + r::LookaroundActionFnDefn::Lookbehind => { + // take lookbehind or supply default + rust!(rust, "{}lookbehind.clone()", grammar.prefix); + } + } + rust!(rust, "}}"); + Ok(()) +} + +fn emit_inline_action_code( + grammar: &r::Grammar, + rust: &mut RustWrite, + index: usize, + defn: &r::ActionFnDefn, + data: &r::InlineActionFnDefn, +) -> io::Result<()> { + let ret_type = ret_type_string(grammar, defn); + + let arg_types: Vec<_> = data.symbols + .iter() + .flat_map(|sym| match *sym { + r::InlinedSymbol::Original(ref s) => vec![s.clone()], + r::InlinedSymbol::Inlined(_, ref syms) => syms.clone(), + }) + .map(|s| s.ty(&grammar.types)) + .collect(); + + // this is the number of symbols we expect to be passed in; it is + // distinct from data.symbols.len(), because sometimes we have + // inlined actions with no input symbols + let num_flat_args = arg_types.len(); + + let mut arguments: Vec<_> = arg_types + .iter() + .map(|&t| grammar.types.spanned_type(t.clone())) + .enumerate() + .map(|(i, t)| format!("{}{}: {}", grammar.prefix, i, t)) + .collect(); + + // If no symbols are being reduced, add in the + // lookbehind/lookahead. + if arguments.len() == 0 { + arguments.extend(vec![ + format!( + "{}lookbehind: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + format!( + "{}lookahead: &{}", + grammar.prefix, + grammar.types.terminal_loc_type() + ), + ]); + } + + try!(rust.write_fn_header( + grammar, + &r::Visibility::Priv, + format!("{}action{}", grammar.prefix, index), + vec![], + None, + arguments, + ret_type, + vec![] + )); + rust!(rust, "{{"); + + // For each inlined thing, compute the start/end locations. + // Do this first so that none of the arguments have been moved + // yet and we can easily access their locations. + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + arg_counter += 1; + } + r::InlinedSymbol::Inlined(_, ref syms) => { + if syms.len() > 0 { + // If we are reducing symbols, then start and end + // can be the start/end location of the first/last + // symbol respectively. Easy peezy. + + rust!( + rust, + "let {}start{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + + let last_arg_index = arg_counter + syms.len() - 1; + rust!( + rust, + "let {}end{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + last_arg_index + ); + } else { + // If we have no symbols, then `arg_counter` + // represents index of the first symbol after this + // inlined item (if any), and `arg_counter-1` + // represents index of the symbol before this + // item. + + if arg_counter > 0 { + rust!( + rust, + "let {}start{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter - 1 + ); + } else if num_flat_args > 0 { + rust!( + rust, + "let {}start{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + } else { + rust!( + rust, + "let {}start{} = {}lookbehind.clone();", + grammar.prefix, + temp_counter, + grammar.prefix + ); + } + + if arg_counter < num_flat_args { + rust!( + rust, + "let {}end{} = {}{}.0.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + arg_counter + ); + } else if num_flat_args > 0 { + rust!( + rust, + "let {}end{} = {}{}.2.clone();", + grammar.prefix, + temp_counter, + grammar.prefix, + num_flat_args - 1 + ); + } else { + rust!( + rust, + "let {}end{} = {}lookahead.clone();", + grammar.prefix, + temp_counter, + grammar.prefix + ); + } + } + + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + + // Now create temporaries for the inlined things + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + arg_counter += 1; + } + r::InlinedSymbol::Inlined(inlined_action, ref syms) => { + // execute the inlined reduce action + rust!( + rust, + "let {}temp{} = {}action{}(", + grammar.prefix, + temp_counter, + grammar.prefix, + inlined_action.index() + ); + for parameter in &grammar.parameters { + rust!(rust, "{},", parameter.name); + } + for i in 0..syms.len() { + rust!(rust, "{}{},", grammar.prefix, arg_counter + i); + } + if syms.len() == 0 { + rust!(rust, "&{}start{},", grammar.prefix, temp_counter); + rust!(rust, "&{}end{},", grammar.prefix, temp_counter); + } + rust!(rust, ");"); + + // wrap up the inlined value along with its span + rust!( + rust, + "let {}temp{} = ({}start{}, {}temp{}, {}end{});", + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter, + grammar.prefix, + temp_counter + ); + + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + + rust!(rust, "{}action{}(", grammar.prefix, data.action.index()); + for parameter in &grammar.parameters { + rust!(rust, "{},", parameter.name); + } + let mut arg_counter = 0; + let mut temp_counter = 0; + for symbol in &data.symbols { + match *symbol { + r::InlinedSymbol::Original(_) => { + rust!(rust, "{}{},", grammar.prefix, arg_counter); + arg_counter += 1; + } + r::InlinedSymbol::Inlined(_, ref syms) => { + rust!(rust, "{}temp{},", grammar.prefix, temp_counter); + temp_counter += 1; + arg_counter += syms.len(); + } + } + } + assert!(data.symbols.len() > 0); + rust!(rust, ")"); + + rust!(rust, "}}"); + Ok(()) +} diff --git a/third_party/rust/lalrpop-snap/src/build/fake_term.rs b/third_party/rust/lalrpop-snap/src/build/fake_term.rs new file mode 100644 index 000000000000..30f67d08b3df --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/build/fake_term.rs @@ -0,0 +1,84 @@ +use std::io::{self, Write}; +use term::{self, Attr, Terminal}; +use term::color::Color; + +/// A `Terminal` that just ignores all attempts at formatting. Used +/// to report errors when no ANSI terminfo is available. +pub struct FakeTerminal { + write: W, +} + +impl FakeTerminal { + pub fn new(write: W) -> FakeTerminal { + FakeTerminal { write: write } + } +} + +impl Write for FakeTerminal { + fn write(&mut self, buf: &[u8]) -> io::Result { + self.write.write(buf) + } + + fn flush(&mut self) -> io::Result<()> { + self.write.flush() + } +} + +impl Terminal for FakeTerminal { + type Output = W; + + fn fg(&mut self, _color: Color) -> term::Result<()> { + Ok(()) + } + + fn bg(&mut self, _color: Color) -> term::Result<()> { + Ok(()) + } + + fn attr(&mut self, _attr: Attr) -> term::Result<()> { + Ok(()) + } + + fn supports_attr(&self, _attr: Attr) -> bool { + false + } + + fn reset(&mut self) -> term::Result<()> { + Ok(()) + } + + fn supports_reset(&self) -> bool { + false + } + + fn supports_color(&self) -> bool { + false + } + + fn cursor_up(&mut self) -> term::Result<()> { + Ok(()) + } + + fn delete_line(&mut self) -> term::Result<()> { + Ok(()) + } + + fn carriage_return(&mut self) -> term::Result<()> { + Ok(()) + } + + fn get_ref(&self) -> &Self::Output { + &self.write + } + + fn get_mut(&mut self) -> &mut Self::Output { + &mut self.write + } + + fn into_inner(self) -> Self::Output + where + Self: Sized, + { + self.write + } +} diff --git a/third_party/rust/lalrpop-snap/src/build/mod.rs b/third_party/rust/lalrpop-snap/src/build/mod.rs new file mode 100644 index 000000000000..c98150f577e4 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/build/mod.rs @@ -0,0 +1,585 @@ +//! Utilies for running in a build script. + +use atty; +use file_text::FileText; +use grammar::parse_tree as pt; +use grammar::repr as r; +use lalrpop_util::ParseError; +use lexer::intern_token; +use lr1; +use message::{Content, Message}; +use message::builder::InlineBuilder; +use normalize; +use parser; +use rust::RustWrite; +use session::{ColorConfig, Session}; +use term; +use tls::Tls; +use tok; + +use std::fs; +use std::io::{self, BufRead, Write}; +use std::path::{Path, PathBuf}; +use std::process::exit; +use std::rc::Rc; + +mod action; +mod fake_term; + +use self::fake_term::FakeTerminal; + +const LALRPOP_VERSION_HEADER: &'static str = concat!( + "// auto-generated: \"", + env!("CARGO_PKG_NAME"), + " ", + env!("CARGO_PKG_VERSION"), + "\"" +); + +pub fn process_dir>(session: Rc, root_dir: P) -> io::Result<()> { + let lalrpop_files = try!(lalrpop_files(root_dir)); + for lalrpop_file in lalrpop_files { + try!(process_file(session.clone(), lalrpop_file)); + } + Ok(()) +} + +pub fn process_file>(session: Rc, lalrpop_file: P) -> io::Result<()> { + let lalrpop_file = lalrpop_file.as_ref(); + let rs_file = try!(resolve_rs_file(&session, lalrpop_file)); + let report_file = try!(resolve_report_file(&session, lalrpop_file)); + process_file_into(session, lalrpop_file, &rs_file, &report_file) +} + +fn resolve_rs_file(session: &Session, lalrpop_file: &Path) -> io::Result { + gen_resolve_file(session, lalrpop_file, "rs") +} + +fn resolve_report_file(session: &Session, lalrpop_file: &Path) -> io::Result { + gen_resolve_file(session, lalrpop_file, "report") +} + +fn gen_resolve_file(session: &Session, lalrpop_file: &Path, ext: &str) -> io::Result { + let in_dir = if let Some(ref d) = session.in_dir { + d.as_path() + } else { + Path::new(".") + }; + let out_dir = if let Some(ref d) = session.out_dir { + d.as_path() + } else { + in_dir + }; + + // If the lalrpop file is not in in_dir, the result is that the + // .rs file is created in the same directory as the lalrpop file + // for compatibility reasons + Ok(out_dir + .join(lalrpop_file.strip_prefix(&in_dir).unwrap_or(lalrpop_file)) + .with_extension(ext)) +} + +fn process_file_into( + session: Rc, + lalrpop_file: &Path, + rs_file: &Path, + report_file: &Path, +) -> io::Result<()> { + if session.force_build || try!(needs_rebuild(&lalrpop_file, &rs_file)) { + log!( + session, + Informative, + "processing file `{}`", + lalrpop_file.to_string_lossy() + ); + if let Some(parent) = rs_file.parent() { + try!(fs::create_dir_all(parent)); + } + try!(make_read_only(&rs_file, false)); + try!(remove_old_file(&rs_file)); + + // Load the LALRPOP source text for this file: + let file_text = Rc::new(try!(FileText::from_path(lalrpop_file.to_path_buf()))); + + // Store the session and file-text in TLS -- this is not + // intended to be used in this high-level code, but it gives + // easy access to this information pervasively in the + // low-level LR(1) and grammar normalization code. This is + // particularly useful for error-reporting. + let _tls = Tls::install(session.clone(), file_text.clone()); + + // Do the LALRPOP processing itself and write the resulting + // buffer into a file. We use a buffer so that if LR(1) + // generation fails at some point, we don't leave a partial + // file behind. + { + let grammar = try!(parse_and_normalize_grammar(&session, &file_text)); + let buffer = try!(emit_recursive_ascent(&session, &grammar, &report_file)); + let mut output_file = try!(fs::File::create(&rs_file)); + try!(writeln!(output_file, "{}", LALRPOP_VERSION_HEADER)); + try!(output_file.write_all(&buffer)); + } + + try!(make_read_only(&rs_file, true)); + } + Ok(()) +} + +fn remove_old_file(rs_file: &Path) -> io::Result<()> { + match fs::remove_file(rs_file) { + Ok(()) => Ok(()), + Err(e) => { + // Unix reports NotFound, Windows PermissionDenied! + match e.kind() { + io::ErrorKind::NotFound | io::ErrorKind::PermissionDenied => Ok(()), + _ => Err(e), + } + } + } +} + +fn needs_rebuild(lalrpop_file: &Path, rs_file: &Path) -> io::Result { + return match fs::metadata(&rs_file) { + Ok(rs_metadata) => { + let lalrpop_metadata = try!(fs::metadata(&lalrpop_file)); + if compare_modification_times(&lalrpop_metadata, &rs_metadata) { + return Ok(true); + } + + compare_lalrpop_version(rs_file) + } + Err(e) => match e.kind() { + io::ErrorKind::NotFound => Ok(true), + _ => Err(e), + }, + }; + + #[cfg(unix)] + fn compare_modification_times( + lalrpop_metadata: &fs::Metadata, + rs_metadata: &fs::Metadata, + ) -> bool { + use std::os::unix::fs::MetadataExt; + lalrpop_metadata.mtime() >= rs_metadata.mtime() + } + + #[cfg(windows)] + fn compare_modification_times( + lalrpop_metadata: &fs::Metadata, + rs_metadata: &fs::Metadata, + ) -> bool { + use std::os::windows::fs::MetadataExt; + lalrpop_metadata.last_write_time() >= rs_metadata.last_write_time() + } + + #[cfg(not(any(unix, windows)))] + fn compare_modification_times( + lalrpop_metadata: &fs::Metadata, + rs_metadata: &fs::Metadata, + ) -> bool { + true + } + + fn compare_lalrpop_version(rs_file: &Path) -> io::Result { + let mut input_str = String::new(); + let mut f = io::BufReader::new(try!(fs::File::open(&rs_file))); + try!(f.read_line(&mut input_str)); + + Ok(input_str.trim() != LALRPOP_VERSION_HEADER) + } +} + +fn make_read_only(rs_file: &Path, ro: bool) -> io::Result<()> { + if rs_file.is_file() { + let rs_metadata = try!(fs::metadata(&rs_file)); + let mut rs_permissions = rs_metadata.permissions(); + rs_permissions.set_readonly(ro); + fs::set_permissions(&rs_file, rs_permissions) + } else { + Ok(()) + } +} + +fn lalrpop_files>(root_dir: P) -> io::Result> { + let mut result = vec![]; + for entry in try!(fs::read_dir(root_dir)) { + let entry = try!(entry); + let file_type = try!(entry.file_type()); + + let path = entry.path(); + + if file_type.is_dir() { + result.extend(try!(lalrpop_files(&path))); + } + + if file_type.is_file() && path.extension().is_some() + && path.extension().unwrap() == "lalrpop" + { + result.push(path); + } + } + Ok(result) +} + +fn parse_and_normalize_grammar(session: &Session, file_text: &FileText) -> io::Result { + let grammar = match parser::parse_grammar(file_text.text()) { + Ok(grammar) => grammar, + + Err(ParseError::InvalidToken { location }) => { + let ch = file_text.text()[location..].chars().next().unwrap(); + report_error( + &file_text, + pt::Span(location, location), + &format!("invalid character `{}`", ch), + ); + } + + Err(ParseError::UnrecognizedToken { + token: None, + expected: _, + }) => { + let len = file_text.text().len(); + report_error( + &file_text, + pt::Span(len, len), + &format!("unexpected end of file"), + ); + } + + Err(ParseError::UnrecognizedToken { + token: Some((lo, _, hi)), + expected, + }) => { + let _ = expected; // didn't implement this yet :) + let text = &file_text.text()[lo..hi]; + report_error( + &file_text, + pt::Span(lo, hi), + &format!("unexpected token: `{}`", text), + ); + } + + Err(ParseError::ExtraToken { token: (lo, _, hi) }) => { + let text = &file_text.text()[lo..hi]; + report_error( + &file_text, + pt::Span(lo, hi), + &format!("extra token at end of input: `{}`", text), + ); + } + + Err(ParseError::User { error }) => { + let string = match error.code { + tok::ErrorCode::UnrecognizedToken => "unrecognized token", + tok::ErrorCode::UnterminatedEscape => "unterminated escape; missing '`'?", + tok::ErrorCode::UnterminatedStringLiteral => { + "unterminated string literal; missing `\"`?" + } + tok::ErrorCode::UnterminatedCharacterLiteral => { + "unterminated character literal; missing `'`?" + } + tok::ErrorCode::UnterminatedAttribute => "unterminated #! attribute; missing `]`?", + tok::ErrorCode::ExpectedStringLiteral => "expected string literal; missing `\"`?", + tok::ErrorCode::UnterminatedCode => { + "unterminated code block; perhaps a missing `;`, `)`, `]` or `}`?" + } + }; + + report_error( + &file_text, + pt::Span(error.location, error.location + 1), + string, + ) + } + }; + + match normalize::normalize(session, grammar) { + Ok(grammar) => Ok(grammar), + Err(error) => report_error(&file_text, error.span, &error.message), + } +} + +fn report_error(file_text: &FileText, span: pt::Span, message: &str) -> ! { + println!("{} error: {}", file_text.span_str(span), message); + + let out = io::stderr(); + let mut out = out.lock(); + file_text.highlight(span, &mut out).unwrap(); + + exit(1); +} + +fn report_messages(messages: Vec) -> term::Result<()> { + let builder = InlineBuilder::new().begin_paragraphs(); + let builder = messages + .into_iter() + .fold(builder, |b, m| b.push(Box::new(m))); + let content = builder.end().end(); + report_content(&*content) +} + +fn report_content(content: &Content) -> term::Result<()> { + // FIXME -- can we query the size of the terminal somehow? + let canvas = content.emit_to_canvas(80); + + let try_colors = match Tls::session().color_config { + ColorConfig::Yes => true, + ColorConfig::No => false, + ColorConfig::IfTty => atty::is(atty::Stream::Stdout), + }; + + if try_colors { + if let Some(mut stdout) = term::stdout() { + return canvas.write_to(&mut *stdout); + } + } + + let stdout = io::stdout(); + let mut stdout = FakeTerminal::new(stdout.lock()); + canvas.write_to(&mut stdout) +} + +fn emit_module_attributes( + grammar: &r::Grammar, + rust: &mut RustWrite, +) -> io::Result<()> { + rust.write_module_attributes(grammar) +} + +fn emit_uses(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + rust.write_uses("", grammar) +} + +fn emit_recursive_ascent( + session: &Session, + grammar: &r::Grammar, + report_file: &Path, +) -> io::Result> { + let mut rust = RustWrite::new(vec![]); + + // We generate a module structure like this: + // + // ``` + // mod { + // // For each public symbol: + // pub fn parse_XYZ(); + // mod __XYZ { ... } + // + // // For each bit of action code: + // + // } + // ``` + // + // Note that the action code goes in the outer module. This is + // intentional because it means that the foo.lalrpop file serves + // as a module in the rust hierarchy, so if the action code + // includes things like `super::` it will resolve in the natural + // way. + + try!(emit_module_attributes(grammar, &mut rust)); + try!(emit_uses(grammar, &mut rust)); + + if grammar.start_nonterminals.is_empty() { + println!("Error: no public symbols declared in grammar"); + exit(1); + } + + for (user_nt, start_nt) in &grammar.start_nonterminals { + // We generate these, so there should always be exactly 1 + // production. Otherwise the LR(1) algorithm doesn't know + // where to stop! + assert_eq!(grammar.productions_for(start_nt).len(), 1); + + log!( + session, + Verbose, + "Building states for public nonterminal `{}`", + user_nt + ); + + let _lr1_tls = lr1::Lr1Tls::install(grammar.terminals.clone()); + + let lr1result = lr1::build_states(&grammar, start_nt.clone()); + if session.emit_report { + let mut output_report_file = try!(fs::File::create(&report_file)); + try!(lr1::generate_report(&mut output_report_file, &lr1result)); + } + + let states = match lr1result { + Ok(states) => states, + Err(error) => { + let messages = lr1::report_error(&grammar, &error); + let _ = report_messages(messages); + exit(1) // FIXME -- propagate up instead of calling `exit` + } + }; + + match grammar.algorithm.codegen { + r::LrCodeGeneration::RecursiveAscent => try!(lr1::codegen::ascent::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + "super", + &mut rust, + )), + r::LrCodeGeneration::TableDriven => try!(lr1::codegen::parse_table::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + "super", + &mut rust, + )), + + r::LrCodeGeneration::TestAll => try!(lr1::codegen::test_all::compile( + &grammar, + user_nt.clone(), + start_nt.clone(), + &states, + &mut rust, + )), + } + + rust!( + rust, + "{}use self::{}parse{}::{}Parser;", + grammar.nonterminals[&user_nt].visibility, + grammar.prefix, + start_nt, + user_nt + ); + } + + if let Some(ref intern_token) = grammar.intern_token { + try!(intern_token::compile(&grammar, intern_token, &mut rust)); + rust!(rust, "pub use self::{}intern_token::Token;", grammar.prefix); + } + + try!(action::emit_action_code(grammar, &mut rust)); + + try!(emit_to_triple_trait(grammar, &mut rust)); + + Ok(rust.into_inner()) +} + +fn emit_to_triple_trait(grammar: &r::Grammar, rust: &mut RustWrite) -> io::Result<()> { + #![allow(non_snake_case)] + + let L = grammar.types.terminal_loc_type(); + let T = grammar.types.terminal_token_type(); + let E = grammar.types.error_type(); + + let mut user_type_parameters = String::new(); + for type_parameter in &grammar.type_parameters { + user_type_parameters.push_str(&format!("{}, ", type_parameter)); + } + + rust!(rust, ""); + rust!( + rust, + "pub trait {}ToTriple<{}> {{", + grammar.prefix, + user_type_parameters, + ); + rust!(rust, "type Error;"); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),Self::Error>;", + L, + T, + L, + ); + rust!(rust, "}}"); + + rust!(rust, ""); + if grammar.types.opt_terminal_loc_type().is_some() { + rust!( + rust, + "impl<{}> {}ToTriple<{}> for ({}, {}, {}) {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + L, + T, + L, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", + L, + T, + L, + E, + ); + rust!(rust, "Ok(value)"); + rust!(rust, "}}"); + rust!(rust, "}}"); + + rust!( + rust, + "impl<{}> {}ToTriple<{}> for Result<({}, {}, {}),{}> {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + L, + T, + L, + E, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<({},{},{}),{}> {{", + L, + T, + L, + E, + ); + rust!(rust, "value"); + rust!(rust, "}}"); + rust!(rust, "}}"); + } else { + rust!( + rust, + "impl<{}> {}ToTriple<{}> for {} {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + T, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", + T, + E, + ); + rust!(rust, "Ok(((), value, ()))"); + rust!(rust, "}}"); + rust!(rust, "}}"); + + rust!( + rust, + "impl<{}> {}ToTriple<{}> for Result<({}),{}> {{", + user_type_parameters, + grammar.prefix, + user_type_parameters, + T, + E, + ); + rust!(rust, "type Error = {};", E); + rust!( + rust, + "fn to_triple(value: Self) -> Result<((),{},()),{}> {{", + T, + E, + ); + rust!(rust, "value.map(|v| ((), v, ()))"); + rust!(rust, "}}"); + rust!(rust, "}}"); + } + + Ok(()) +} diff --git a/third_party/rust/lalrpop-snap/src/collections/map.rs b/third_party/rust/lalrpop-snap/src/collections/map.rs new file mode 100644 index 000000000000..56b45196d6a7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/collections/map.rs @@ -0,0 +1,15 @@ +use std::collections::BTreeMap; + +pub use std::collections::btree_map::Entry; + +/// In general, we avoid coding directly against any particular map, +/// but rather build against `util::Map` (and `util::map` to construct +/// an instance). This should be a deterministic map, such that two +/// runs of LALRPOP produce the same output, but otherwise it doesn't +/// matter much. I'd probably prefer to use `HashMap` with an +/// alternative hasher, but that's not stable. +pub type Map = BTreeMap; + +pub fn map() -> Map { + Map::::default() +} diff --git a/third_party/rust/lalrpop-snap/src/collections/mod.rs b/third_party/rust/lalrpop-snap/src/collections/mod.rs new file mode 100644 index 000000000000..566cae9090ad --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/collections/mod.rs @@ -0,0 +1,7 @@ +mod map; +mod multimap; +mod set; + +pub use self::map::{map, Entry, Map}; +pub use self::multimap::{Collection, Multimap}; +pub use self::set::{set, Set}; diff --git a/third_party/rust/lalrpop-snap/src/collections/multimap.rs b/third_party/rust/lalrpop-snap/src/collections/multimap.rs new file mode 100644 index 000000000000..7e5c1a77666d --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/collections/multimap.rs @@ -0,0 +1,140 @@ +use std::collections::btree_map; +use std::default::Default; +use std::iter::FromIterator; + +use super::map::{map, Map}; +use super::set::Set; + +pub struct Multimap { + map: Map, +} + +pub trait Collection: Default { + type Item; + + /// Push `item` into the collection and return `true` if + /// collection changed. + fn push(&mut self, item: Self::Item) -> bool; +} + +impl Multimap { + pub fn new() -> Multimap { + Multimap { map: map() } + } + + pub fn is_empty(&self) -> bool { + self.map.is_empty() + } + + /// Push `value` to the collection associated with `key`. Returns + /// true if the collection was changed from the default. + pub fn push(&mut self, key: K, value: C::Item) -> bool { + let mut inserted = false; + let pushed = self.map + .entry(key) + .or_insert_with(|| { + inserted = true; + C::default() + }) + .push(value); + inserted || pushed + } + + pub fn get(&self, key: &K) -> Option<&C> { + self.map.get(key) + } + + pub fn iter(&self) -> btree_map::Iter { + self.map.iter() + } + + pub fn into_iter(self) -> btree_map::IntoIter { + self.map.into_iter() + } +} + +impl IntoIterator for Multimap { + type Item = (K, C); + type IntoIter = btree_map::IntoIter; + fn into_iter(self) -> btree_map::IntoIter { + self.into_iter() + } +} + +impl<'iter, K: Ord, C: Collection> IntoIterator for &'iter Multimap { + type Item = (&'iter K, &'iter C); + type IntoIter = btree_map::Iter<'iter, K, C>; + fn into_iter(self) -> btree_map::Iter<'iter, K, C> { + self.iter() + } +} + +impl FromIterator<(K, C::Item)> for Multimap { + fn from_iter(iterator: T) -> Self + where + T: IntoIterator, + { + let mut map = Multimap::new(); + for (key, value) in iterator { + map.push(key, value); + } + map + } +} + +impl Collection for () { + type Item = (); + fn push(&mut self, _item: ()) -> bool { + false + } +} + +impl Collection for Vec { + type Item = T; + + fn push(&mut self, item: T) -> bool { + self.push(item); + true // always changes + } +} + +impl Collection for Set { + type Item = T; + + fn push(&mut self, item: T) -> bool { + self.insert(item) + } +} + +impl Default for Multimap { + fn default() -> Self { + Multimap::new() + } +} + +impl, I> Collection for Multimap { + type Item = (K, I); + + fn push(&mut self, item: (K, I)) -> bool { + let (key, value) = item; + self.push(key, value) + } +} + +#[test] +fn push() { + let mut m: Multimap> = Multimap::new(); + assert!(m.push(0, 'a')); + assert!(m.push(0, 'b')); + assert!(!m.push(0, 'b')); + assert!(m.push(1, 'a')); +} + +#[test] +fn push_nil() { + let mut m: Multimap = Multimap::new(); + assert!(m.push(0, ())); + assert!(!m.push(0, ())); + assert!(m.push(1, ())); + assert!(!m.push(0, ())); +} diff --git a/third_party/rust/lalrpop-snap/src/collections/set.rs b/third_party/rust/lalrpop-snap/src/collections/set.rs new file mode 100644 index 000000000000..26aa3de894fd --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/collections/set.rs @@ -0,0 +1,8 @@ +use std::collections::BTreeSet; + +/// As `Map`, but for sets. +pub type Set = BTreeSet; + +pub fn set() -> Set { + Set::::default() +} diff --git a/third_party/rust/lalrpop-snap/src/file_text.rs b/third_party/rust/lalrpop-snap/src/file_text.rs new file mode 100644 index 000000000000..234477625d55 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/file_text.rs @@ -0,0 +1,144 @@ +use grammar::parse_tree as pt; +use std::fmt::{Display, Error, Formatter}; +use std::fs::File; +use std::path::PathBuf; +use std::io::{self, Read, Write}; + +pub struct FileText { + path: PathBuf, + input_str: String, + newlines: Vec, +} + +impl FileText { + pub fn from_path(path: PathBuf) -> io::Result { + let mut input_str = String::new(); + let mut f = try!(File::open(&path)); + try!(f.read_to_string(&mut input_str)); + Ok(FileText::new(path, input_str)) + } + + pub fn new(path: PathBuf, input_str: String) -> FileText { + let newline_indices: Vec = { + let input_indices = input_str + .as_bytes() + .iter() + .enumerate() + .filter(|&(_, &b)| b == ('\n' as u8)) + .map(|(i, _)| i + 1); // index of first char in the line + Some(0).into_iter().chain(input_indices).collect() + }; + + FileText { + path: path, + input_str: input_str, + newlines: newline_indices, + } + } + + #[cfg(test)] + pub fn test() -> FileText { + Self::new(PathBuf::from("test.lalrpop"), String::from("")) + } + + pub fn text(&self) -> &String { + &self.input_str + } + + pub fn span_str(&self, span: pt::Span) -> String { + let (start_line, start_col) = self.line_col(span.0); + let (end_line, end_col) = self.line_col(span.1); + format!( + "{}:{}:{}: {}:{}", + self.path.display(), + start_line + 1, + start_col + 1, + end_line + 1, + end_col + ) + } + + fn line_col(&self, pos: usize) -> (usize, usize) { + let num_lines = self.newlines.len(); + let line = (0..num_lines) + .filter(|&i| self.newlines[i] > pos) + .map(|i| i - 1) + .next() + .unwrap_or(num_lines - 1); + + // offset of the first character in `line` + let line_offset = self.newlines[line]; + + // find the column; use `saturating_sub` in case `pos` is the + // newline itself, which we'll call column 0 + let col = pos - line_offset; + + (line, col) + } + + fn line_text(&self, line_num: usize) -> &str { + let start_offset = self.newlines[line_num]; + if line_num == self.newlines.len() - 1 { + &self.input_str[start_offset..] + } else { + let end_offset = self.newlines[line_num + 1]; + &self.input_str[start_offset..end_offset - 1] + } + } + + pub fn highlight(&self, span: pt::Span, out: &mut Write) -> io::Result<()> { + let (start_line, start_col) = self.line_col(span.0); + let (end_line, end_col) = self.line_col(span.1); + + // (*) use `saturating_sub` since the start line could be the newline + // itself, in which case we'll call it column zero + + // span is within one line: + if start_line == end_line { + let text = self.line_text(start_line); + try!(writeln!(out, " {}", text)); + + if end_col - start_col <= 1 { + try!(writeln!(out, " {}^", Repeat(' ', start_col))); + } else { + let width = end_col - start_col; + try!(writeln!( + out, + " {}~{}~", + Repeat(' ', start_col), + Repeat('~', width.saturating_sub(2)) + )); + } + } else { + // span is across many lines, find the maximal width of any of those + let line_strs: Vec<_> = (start_line..end_line + 1) + .map(|i| self.line_text(i)) + .collect(); + let max_len = line_strs.iter().map(|l| l.len()).max().unwrap(); + try!(writeln!( + out, + " {}{}~+", + Repeat(' ', start_col), + Repeat('~', max_len - start_col) + )); + for line in &line_strs[..line_strs.len() - 1] { + try!(writeln!(out, "| {0:<1$} |", line, max_len)); + } + try!(writeln!(out, "| {}", line_strs[line_strs.len() - 1])); + try!(writeln!(out, "+~{}", Repeat('~', end_col))); + } + + Ok(()) + } +} + +struct Repeat(char, usize); + +impl Display for Repeat { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + for _ in 0..self.1 { + try!(write!(fmt, "{}", self.0)); + } + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/generate.rs b/third_party/rust/lalrpop-snap/src/generate.rs new file mode 100644 index 000000000000..609c8263f3bd --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/generate.rs @@ -0,0 +1,78 @@ +//! Generate valid parse trees. + +use grammar::repr::*; +use rand::{self, Rng}; +use std::iter::Iterator; + +#[derive(PartialEq, Eq)] +pub enum ParseTree { + Nonterminal(NonterminalString, Vec), + Terminal(TerminalString), +} + +pub fn random_parse_tree(grammar: &Grammar, symbol: NonterminalString) -> ParseTree { + let mut gen = Generator { + grammar: grammar, + rng: rand::thread_rng(), + depth: 0, + }; + loop { + // sometimes, the random walk overflows the stack, so we have a max, and if + // it is exceeded, we just try again + if let Some(result) = gen.nonterminal(symbol.clone()) { + return result; + } + gen.depth = 0; + } +} + +struct Generator<'grammar> { + grammar: &'grammar Grammar, + rng: rand::ThreadRng, + depth: u32, +} + +const MAX_DEPTH: u32 = 10000; + +impl<'grammar> Generator<'grammar> { + fn nonterminal(&mut self, nt: NonterminalString) -> Option { + if self.depth > MAX_DEPTH { + return None; + } + + self.depth += 1; + let productions = self.grammar.productions_for(&nt); + let index: usize = self.rng.gen_range(0, productions.len()); + let production = &productions[index]; + let trees: Option> = production + .symbols + .iter() + .map(|sym| self.symbol(sym.clone())) + .collect(); + trees.map(|trees| ParseTree::Nonterminal(nt, trees)) + } + + fn symbol(&mut self, symbol: Symbol) -> Option { + match symbol { + Symbol::Nonterminal(nt) => self.nonterminal(nt), + Symbol::Terminal(t) => Some(ParseTree::Terminal(t)), + } + } +} + +impl ParseTree { + pub fn terminals(&self) -> Vec { + let mut vec = vec![]; + self.push_terminals(&mut vec); + vec + } + + fn push_terminals(&self, vec: &mut Vec) { + match *self { + ParseTree::Terminal(ref s) => vec.push(s.clone()), + ParseTree::Nonterminal(_, ref trees) => for tree in trees { + tree.push_terminals(vec); + }, + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/grammar/consts.rs b/third_party/rust/lalrpop-snap/src/grammar/consts.rs new file mode 100644 index 000000000000..57d5e3656648 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/consts.rs @@ -0,0 +1,26 @@ +/// Recognized associated type for the token location +pub const LOCATION: &'static str = "Location"; + +/// Recognized associated type for custom errors +pub const ERROR: &'static str = "Error"; + +/// The lifetime parameter injected when we do not have an external token enum +pub const INPUT_LIFETIME: &'static str = "'input"; + +/// The parameter injected when we do not have an external token enum +pub const INPUT_PARAMETER: &'static str = "input"; + +/// The annotation to request inlining. +pub const INLINE: &'static str = "inline"; + +/// Annotation to request LALR. +pub const LALR: &'static str = "LALR"; + +/// Annotation to request recursive-ascent-style code generation. +pub const TABLE_DRIVEN: &'static str = "table_driven"; + +/// Annotation to request recursive-ascent-style code generation. +pub const RECURSIVE_ASCENT: &'static str = "recursive_ascent"; + +/// Annotation to request test-all-style code generation. +pub const TEST_ALL: &'static str = "test_all"; diff --git a/third_party/rust/lalrpop-snap/src/grammar/mod.rs b/third_party/rust/lalrpop-snap/src/grammar/mod.rs new file mode 100644 index 000000000000..627202e60e32 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/mod.rs @@ -0,0 +1,7 @@ +//! The grammar definition. + +pub mod consts; +pub mod parse_tree; +pub mod pattern; +pub mod repr; +// pub mod token; diff --git a/third_party/rust/lalrpop-snap/src/grammar/parse_tree.rs b/third_party/rust/lalrpop-snap/src/grammar/parse_tree.rs new file mode 100644 index 000000000000..0f72f02b8b0e --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/parse_tree.rs @@ -0,0 +1,1103 @@ +//! The "parse-tree" is what is produced by the parser. We use it do +//! some pre-expansion and so forth before creating the proper AST. + +use string_cache::DefaultAtom as Atom; +use lexer::dfa::DFA; +use grammar::consts::{LALR, RECURSIVE_ASCENT, TABLE_DRIVEN, TEST_ALL}; +use grammar::repr::{self as r, NominalTypeRepr, TypeRepr}; +use grammar::pattern::Pattern; +use message::Content; +use message::builder::InlineBuilder; +use std::fmt::{Debug, Display, Error, Formatter}; +use tls::Tls; +use util::Sep; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Grammar { + // see field `prefix` in `grammar::repr::Grammar` + pub prefix: String, + pub span: Span, + pub type_parameters: Vec, + pub parameters: Vec, + pub where_clauses: Vec>, + pub items: Vec, + pub annotations: Vec, + pub module_attributes: Vec, +} + +#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Span(pub usize, pub usize); + +impl Into> for Span { + fn into(self) -> Box { + let file_text = Tls::file_text(); + let string = file_text.span_str(self); + + // Insert an Adjacent block to prevent wrapping inside this + // string: + InlineBuilder::new() + .begin_adjacent() + .text(string) + .end() + .end() + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum GrammarItem { + MatchToken(MatchToken), + ExternToken(ExternToken), + InternToken(InternToken), + Nonterminal(NonterminalData), + Use(String), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MatchToken { + pub contents: Vec, + pub span: Span, +} + +impl MatchToken { + pub fn new(contents: MatchContents, span: Span) -> MatchToken { + MatchToken { + contents: vec![contents], + span: span, + } + } + + // Not really sure if this is the best way to do it + pub fn add(self, contents: MatchContents) -> MatchToken { + let mut new_contents = self.contents.clone(); + new_contents.push(contents); + MatchToken { + contents: new_contents, + span: self.span, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MatchContents { + pub items: Vec, +} + +// FIXME: Validate that MatchSymbol is actually a TerminalString::Literal +// and that MatchMapping is an Id or String +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum MatchItem { + CatchAll(Span), + Unmapped(MatchSymbol, Span), + Mapped(MatchSymbol, MatchMapping, Span), +} + +impl MatchItem { + pub fn is_catch_all(&self) -> bool { + match *self { + MatchItem::CatchAll(_) => true, + _ => false, + } + } + + pub fn span(&self) -> Span { + match *self { + MatchItem::CatchAll(span) => span, + MatchItem::Unmapped(_, span) => span, + MatchItem::Mapped(_, _, span) => span, + } + } +} + +pub type MatchSymbol = TerminalLiteral; +pub type MatchMapping = TerminalString; + +/// Intern tokens are not typed by the user: they are synthesized in +/// the absence of an "extern" declaration with information about the +/// string literals etc that appear in the grammar. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct InternToken { + /// Set of `r"foo"` and `"foo"` literals extracted from the + /// grammar. Sorted by order of increasing precedence. + pub match_entries: Vec, + pub dfa: DFA, +} + +/// In `token_check`, as we prepare to generate a tokenizer, we +/// combine any `match` declaration the user may have given with the +/// set of literals (e.g. `"foo"` or `r"[a-z]"`) that appear elsewhere +/// in their in the grammar to produce a series of `MatchEntry`. Each +/// `MatchEntry` roughly corresponds to one line in a `match` declaration. +/// +/// So e.g. if you had +/// +/// ``` +/// match { +/// r"(?i)BEGIN" => "BEGIN", +/// "+" => "+", +/// } else { +/// _ +/// } +/// +/// ID = r"[a-zA-Z]+" +/// ``` +/// +/// This would correspond to three match entries: +/// - `MatchEntry { match_literal: r"(?i)BEGIN", user_name: "BEGIN", precedence: 2 }` +/// - `MatchEntry { match_literal: "+", user_name: "+", precedence: 3 }` +/// - `MatchEntry { match_literal: "r[a-zA-Z]+"", user_name: r"[a-zA-Z]+", precedence: 0 }` +/// +/// A couple of things to note: +/// +/// - Literals appearing in the grammar are converting into an "identity" mapping +/// - Each match group G is combined with the implicit priority IP of 1 for literals and 0 for +/// regex to yield the final precedence; the formula is `G*2 + IP`. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct MatchEntry { + /// The precedence of this match entry. + /// + /// NB: This field must go first, so that `PartialOrd` sorts by precedence first! + pub precedence: usize, + pub match_literal: TerminalLiteral, + pub user_name: TerminalString, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ExternToken { + pub span: Span, + pub associated_types: Vec, + pub enum_token: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct AssociatedType { + pub type_span: Span, + pub type_name: Atom, + pub type_ref: TypeRef, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct EnumToken { + pub type_name: TypeRef, + pub type_span: Span, + pub conversions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Conversion { + pub span: Span, + pub from: TerminalString, + pub to: Pattern, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Path { + pub absolute: bool, + pub ids: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum TypeRef { + // (T1, T2) + Tuple(Vec), + + // Foo<'a, 'b, T1, T2>, Foo::Bar, etc + Nominal { + path: Path, + types: Vec, + }, + + Ref { + lifetime: Option, + mutable: bool, + referent: Box, + }, + + // 'x ==> only should appear within nominal types, but what do we care + Lifetime(Atom), + + // Foo or Bar ==> treated specially since macros may care + Id(Atom), + + // ==> type of a nonterminal, emitted by macro expansion + OfSymbol(SymbolKind), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum WhereClause { + // 'a: 'b + 'c + Lifetime { + lifetime: Atom, + bounds: Vec, + }, + // where for<'a> &'a T: Debug + Into + Type { + forall: Option>, + ty: T, + bounds: Vec>, + }, +} + +impl WhereClause { + pub fn map(&self, mut f: F) -> WhereClause + where + F: FnMut(&T) -> U, + { + match *self { + WhereClause::Lifetime { + ref lifetime, + ref bounds, + } => WhereClause::Lifetime { + lifetime: lifetime.clone(), + bounds: bounds.clone(), + }, + WhereClause::Type { + ref forall, + ref ty, + ref bounds, + } => WhereClause::Type { + forall: forall.clone(), + ty: f(ty), + bounds: bounds.iter().map(|b| b.map(&mut f)).collect(), + }, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeBound { + // The `'a` in `T: 'a`. + Lifetime(Atom), + // `for<'a> FnMut(&'a usize)` + Fn { + forall: Option>, + path: Path, + parameters: Vec, + ret: Option, + }, + // `some::Trait` or `some::Trait` or `some::Trait` + // or `for<'a> Trait<'a, T>` + Trait { + forall: Option>, + path: Path, + parameters: Vec>, + }, +} + +impl TypeBound { + pub fn map(&self, mut f: F) -> TypeBound + where + F: FnMut(&T) -> U, + { + match *self { + TypeBound::Lifetime(ref l) => TypeBound::Lifetime(l.clone()), + TypeBound::Fn { + ref forall, + ref path, + ref parameters, + ref ret, + } => TypeBound::Fn { + forall: forall.clone(), + path: path.clone(), + parameters: parameters.iter().map(&mut f).collect(), + ret: ret.as_ref().map(f), + }, + TypeBound::Trait { + ref forall, + ref path, + ref parameters, + } => TypeBound::Trait { + forall: forall.clone(), + path: path.clone(), + parameters: parameters.iter().map(|p| p.map(&mut f)).collect(), + }, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeBoundParameter { + // 'a + Lifetime(Atom), + // `T` or `'a` + TypeParameter(T), + // `Item = T` + Associated(Atom, T), +} + +impl TypeBoundParameter { + pub fn map(&self, mut f: F) -> TypeBoundParameter + where + F: FnMut(&T) -> U, + { + match *self { + TypeBoundParameter::Lifetime(ref l) => TypeBoundParameter::Lifetime(l.clone()), + TypeBoundParameter::TypeParameter(ref t) => TypeBoundParameter::TypeParameter(f(t)), + TypeBoundParameter::Associated(ref id, ref t) => { + TypeBoundParameter::Associated(id.clone(), f(t)) + } + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum TypeParameter { + Lifetime(Atom), + Id(Atom), +} + +impl TypeParameter { + pub fn is_lifetime(&self) -> bool { + match *self { + TypeParameter::Lifetime(_) => true, + _ => false, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Parameter { + pub name: Atom, + pub ty: TypeRef, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Visibility { + Pub(Option), + Priv, +} + +impl Visibility { + pub fn is_pub(&self) -> bool { + match *self { + Visibility::Pub(_) => true, + Visibility::Priv => false, + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct NonterminalData { + pub visibility: Visibility, + pub name: NonterminalString, + pub annotations: Vec, + pub span: Span, + pub args: Vec, // macro arguments + pub type_decl: Option, + pub alternatives: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Annotation { + pub id_span: Span, + pub id: Atom, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Alternative { + pub span: Span, + + pub expr: ExprSymbol, + + // if C, only legal in macros + pub condition: Option, + + // => { code } + pub action: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ActionKind { + User(String), + Fallible(String), + Lookahead, + Lookbehind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Condition { + pub span: Span, + pub lhs: NonterminalString, // X + pub rhs: Atom, // "Foo" + pub op: ConditionOp, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ConditionOp { + // X == "Foo", equality + Equals, + + // X != "Foo", inequality + NotEquals, + + // X ~~ "Foo", regexp match + Match, + + // X !~ "Foo", regexp non-match + NotMatch, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Symbol { + pub span: Span, + pub kind: SymbolKind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum SymbolKind { + // (X Y) + Expr(ExprSymbol), + + // foo, before name resolution + AmbiguousId(Atom), + + // "foo" and foo (after name resolution) + Terminal(TerminalString), + + // foo, after name resolution + Nonterminal(NonterminalString), + + // foo<..> + Macro(MacroSymbol), + + // X+, X?, X* + Repeat(Box), + + // + Choose(Box), + + // x:X + Name(Atom, Box), + + // @L + Lookahead, + + // @R + Lookbehind, + + Error, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum TerminalString { + Literal(TerminalLiteral), + Bare(Atom), + Error, +} + +impl TerminalString { + pub fn as_literal(&self) -> Option { + match *self { + TerminalString::Literal(ref l) => Some(l.clone()), + _ => None, + } + } + + pub fn display_len(&self) -> usize { + match *self { + TerminalString::Literal(ref x) => x.display_len(), + TerminalString::Bare(ref x) => x.len(), + TerminalString::Error => "error".len(), + } + } +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum TerminalLiteral { + Quoted(Atom), + Regex(Atom), +} + +impl TerminalLiteral { + /// The *base precedence* is the precedence within a `match { }` + /// block level. It indicates that quoted things like `"foo"` get + /// precedence over regex matches. + pub fn base_precedence(&self) -> usize { + match *self { + TerminalLiteral::Quoted(_) => 1, + TerminalLiteral::Regex(_) => 0, + } + } + + pub fn display_len(&self) -> usize { + match *self { + TerminalLiteral::Quoted(ref x) => x.len(), + TerminalLiteral::Regex(ref x) => x.len() + "####r".len(), + } + } +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NonterminalString(pub Atom); + +impl NonterminalString { + pub fn len(&self) -> usize { + self.0.len() + } +} + +impl Into> for NonterminalString { + fn into(self) -> Box { + let session = Tls::session(); + + InlineBuilder::new() + .text(self) + .styled(session.nonterminal_symbol) + .end() + } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum RepeatOp { + Star, + Plus, + Question, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct RepeatSymbol { + pub op: RepeatOp, + pub symbol: Symbol, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ExprSymbol { + pub symbols: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MacroSymbol { + pub name: NonterminalString, + pub args: Vec, +} + +impl TerminalString { + pub fn quoted(i: Atom) -> TerminalString { + TerminalString::Literal(TerminalLiteral::Quoted(i)) + } + + pub fn regex(i: Atom) -> TerminalString { + TerminalString::Literal(TerminalLiteral::Regex(i)) + } +} + +impl Into> for TerminalString { + fn into(self) -> Box { + let session = Tls::session(); + InlineBuilder::new() + .text(self) + .styled(session.terminal_symbol) + .end() + } +} + +impl Grammar { + pub fn extern_token(&self) -> Option<&ExternToken> { + self.items.iter().flat_map(|i| i.as_extern_token()).next() + } + + pub fn enum_token(&self) -> Option<&EnumToken> { + self.items + .iter() + .flat_map(|i| i.as_extern_token()) + .flat_map(|et| et.enum_token.as_ref()) + .next() + } + + pub fn intern_token(&self) -> Option<&InternToken> { + self.items.iter().flat_map(|i| i.as_intern_token()).next() + } + + pub fn match_token(&self) -> Option<&MatchToken> { + self.items.iter().flat_map(|i| i.as_match_token()).next() + } +} + +impl GrammarItem { + pub fn is_macro_def(&self) -> bool { + match *self { + GrammarItem::Nonterminal(ref d) => d.is_macro_def(), + _ => false, + } + } + + pub fn as_nonterminal(&self) -> Option<&NonterminalData> { + match *self { + GrammarItem::Nonterminal(ref d) => Some(d), + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_match_token(&self) -> Option<&MatchToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(ref d) => Some(d), + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_extern_token(&self) -> Option<&ExternToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(ref d) => Some(d), + GrammarItem::InternToken(..) => None, + } + } + + pub fn as_intern_token(&self) -> Option<&InternToken> { + match *self { + GrammarItem::Nonterminal(..) => None, + GrammarItem::Use(..) => None, + GrammarItem::MatchToken(..) => None, + GrammarItem::ExternToken(..) => None, + GrammarItem::InternToken(ref d) => Some(d), + } + } +} + +impl NonterminalData { + pub fn is_macro_def(&self) -> bool { + !self.args.is_empty() + } +} + +impl Symbol { + pub fn new(span: Span, kind: SymbolKind) -> Symbol { + Symbol { + span: span, + kind: kind, + } + } + + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl Display for Visibility { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Visibility::Pub(Some(ref path)) => write!(fmt, "pub({}) ", path), + Visibility::Pub(None) => write!(fmt, "pub "), + Visibility::Priv => Ok(()), + } + } +} + +impl Display for WhereClause { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + WhereClause::Lifetime { + ref lifetime, + ref bounds, + } => { + write!(fmt, "{}:", lifetime)?; + for (i, b) in bounds.iter().enumerate() { + if i != 0 { + write!(fmt, " +")?; + } + write!(fmt, " {}", b)?; + } + Ok(()) + } + WhereClause::Type { + ref forall, + ref ty, + ref bounds, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}: ", ty)?; + for (i, b) in bounds.iter().enumerate() { + if i != 0 { + write!(fmt, " +")?; + } + write!(fmt, " {}", b)?; + } + Ok(()) + } + } + } +} + +impl Display for TypeBound { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeBound::Lifetime(ref l) => write!(fmt, "{}", l), + TypeBound::Fn { + ref forall, + ref path, + ref parameters, + ref ret, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}(", path)?; + for (i, p) in parameters.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", p)?; + } + write!(fmt, ")")?; + + if let Some(ref ret) = *ret { + write!(fmt, " -> {}", ret)?; + } + + Ok(()) + } + TypeBound::Trait { + ref forall, + ref path, + ref parameters, + } => { + if let Some(ref forall) = *forall { + write!(fmt, "for<")?; + for (i, l) in forall.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", l)?; + } + write!(fmt, "> ")?; + } + + write!(fmt, "{}", path)?; + if parameters.is_empty() { + return Ok(()); + } + + write!(fmt, "<")?; + for (i, p) in parameters.iter().enumerate() { + if i != 0 { + write!(fmt, ", ")?; + } + write!(fmt, "{}", p)?; + } + write!(fmt, ">") + } + } + } +} + +impl Display for TypeBoundParameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeBoundParameter::Lifetime(ref l) => write!(fmt, "{}", l), + TypeBoundParameter::TypeParameter(ref t) => write!(fmt, "{}", t), + TypeBoundParameter::Associated(ref id, ref t) => write!(fmt, "{} = {}", id, t), + } + } +} + +impl Display for TerminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TerminalString::Literal(ref s) => write!(fmt, "{}", s), + TerminalString::Bare(ref s) => write!(fmt, "{}", s), + TerminalString::Error => write!(fmt, "error"), + } + } +} + +impl Debug for TerminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for TerminalLiteral { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TerminalLiteral::Quoted(ref s) => write!(fmt, "{:?}", s.as_ref()), // the Debug impl adds the `"` and escaping + TerminalLiteral::Regex(ref s) => write!(fmt, "r#{:?}#", s.as_ref()), // FIXME -- need to determine proper number of # + } + } +} + +impl Debug for TerminalLiteral { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self) + } +} + +impl Display for Path { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!( + fmt, + "{}{}", + if self.absolute { "::" } else { "" }, + Sep("::", &self.ids), + ) + } +} + +impl Display for NonterminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +impl Debug for NonterminalString { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(&self.kind, fmt) + } +} + +impl Display for SymbolKind { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + SymbolKind::Expr(ref expr) => write!(fmt, "{}", expr), + SymbolKind::Terminal(ref s) => write!(fmt, "{}", s), + SymbolKind::Nonterminal(ref s) => write!(fmt, "{}", s), + SymbolKind::AmbiguousId(ref s) => write!(fmt, "{}", s), + SymbolKind::Macro(ref m) => write!(fmt, "{}", m), + SymbolKind::Repeat(ref r) => write!(fmt, "{}", r), + SymbolKind::Choose(ref s) => write!(fmt, "<{}>", s), + SymbolKind::Name(ref n, ref s) => write!(fmt, "{}:{}", n, s), + SymbolKind::Lookahead => write!(fmt, "@L"), + SymbolKind::Lookbehind => write!(fmt, "@R"), + SymbolKind::Error => write!(fmt, "error"), + } + } +} + +impl Display for RepeatSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}{}", self.symbol, self.op) + } +} + +impl Display for RepeatOp { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + RepeatOp::Plus => write!(fmt, "+"), + RepeatOp::Star => write!(fmt, "*"), + RepeatOp::Question => write!(fmt, "?"), + } + } +} + +impl Display for ExprSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({})", Sep(" ", &self.symbols)) + } +} + +impl ExternToken { + pub fn associated_type(&self, name: Atom) -> Option<&AssociatedType> { + self.associated_types + .iter() + .filter(|a| a.type_name == name) + .next() + } +} + +impl ExprSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl MacroSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl RepeatSymbol { + pub fn canonical_form(&self) -> String { + format!("{}", self) + } +} + +impl Display for MacroSymbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}<{}>", self.name, Sep(", ", &self.args)) + } +} + +impl Display for TypeParameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeParameter::Lifetime(ref s) => write!(fmt, "{}", s), + TypeParameter::Id(ref s) => write!(fmt, "{}", s), + } + } +} + +impl Display for TypeRef { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeRef::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), + TypeRef::Nominal { + ref path, + ref types, + } if types.len() == 0 => + { + write!(fmt, "{}", path) + } + TypeRef::Nominal { + ref path, + ref types, + } => write!(fmt, "{}<{}>", path, Sep(", ", types)), + TypeRef::Lifetime(ref s) => write!(fmt, "{}", s), + TypeRef::Id(ref s) => write!(fmt, "{}", s), + TypeRef::OfSymbol(ref s) => write!(fmt, "`{}`", s), + TypeRef::Ref { + lifetime: None, + mutable: false, + ref referent, + } => write!(fmt, "&{}", referent), + TypeRef::Ref { + lifetime: Some(ref l), + mutable: false, + ref referent, + } => write!(fmt, "&{} {}", l, referent), + TypeRef::Ref { + lifetime: None, + mutable: true, + ref referent, + } => write!(fmt, "&mut {}", referent), + TypeRef::Ref { + lifetime: Some(ref l), + mutable: true, + ref referent, + } => write!(fmt, "&{} mut {}", l, referent), + } + } +} + +impl TypeRef { + // Converts a TypeRef to a TypeRepr, assuming no inference is + // required etc. This is safe for all types a user can directly + // type, but not safe for the result of expanding macros. + pub fn type_repr(&self) -> TypeRepr { + match *self { + TypeRef::Tuple(ref types) => { + TypeRepr::Tuple(types.iter().map(TypeRef::type_repr).collect()) + } + TypeRef::Nominal { + ref path, + ref types, + } => TypeRepr::Nominal(NominalTypeRepr { + path: path.clone(), + types: types.iter().map(TypeRef::type_repr).collect(), + }), + TypeRef::Lifetime(ref id) => TypeRepr::Lifetime(id.clone()), + TypeRef::Id(ref id) => TypeRepr::Nominal(NominalTypeRepr { + path: Path::from_id(id.clone()), + types: vec![], + }), + TypeRef::OfSymbol(_) => unreachable!("OfSymbol produced by parser"), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => TypeRepr::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(referent.type_repr()), + }, + } + } +} + +impl Path { + pub fn from_id(id: Atom) -> Path { + Path { + absolute: false, + ids: vec![id], + } + } + + pub fn usize() -> Path { + Path { + absolute: false, + ids: vec![Atom::from("usize")], + } + } + + pub fn str() -> Path { + Path { + absolute: false, + ids: vec![Atom::from("str")], + } + } + + pub fn vec() -> Path { + Path { + absolute: true, + ids: vec![Atom::from("std"), Atom::from("vec"), Atom::from("Vec")], + } + } + + pub fn option() -> Path { + Path { + absolute: true, + ids: vec![ + Atom::from("std"), + Atom::from("option"), + Atom::from("Option"), + ], + } + } + + pub fn as_id(&self) -> Option { + if !self.absolute && self.ids.len() == 1 { + Some(self.ids[0].clone()) + } else { + None + } + } +} + +pub fn read_algorithm(annotations: &[Annotation], algorithm: &mut r::Algorithm) { + for annotation in annotations { + if annotation.id == Atom::from(LALR) { + algorithm.lalr = true; + } else if annotation.id == Atom::from(TABLE_DRIVEN) { + algorithm.codegen = r::LrCodeGeneration::TableDriven; + } else if annotation.id == Atom::from(RECURSIVE_ASCENT) { + algorithm.codegen = r::LrCodeGeneration::RecursiveAscent; + } else if annotation.id == Atom::from(TEST_ALL) { + algorithm.codegen = r::LrCodeGeneration::TestAll; + } else { + panic!( + "validation permitted unknown annotation: {:?}", + annotation.id, + ); + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/grammar/pattern.rs b/third_party/rust/lalrpop-snap/src/grammar/pattern.rs new file mode 100644 index 000000000000..842cd7e9de69 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/pattern.rs @@ -0,0 +1,129 @@ +/*! + +The definition of patterns is shared between the parse-tree and the +repr, but customized by a type T that represents the different type +representations. + +*/ + +use string_cache::DefaultAtom as Atom; +use grammar::parse_tree::{Path, Span}; +use std::fmt::{Display, Error, Formatter}; +use util::Sep; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Pattern { + pub span: Span, + pub kind: PatternKind, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FieldPattern { + pub field_span: Span, + pub field_name: Atom, + pub pattern: Pattern, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum PatternKind { + Enum(Path, Vec>), + Struct(Path, Vec>, /* trailing ..? */ bool), + Path(Path), + Tuple(Vec>), + TupleStruct(Path, Vec>), + Usize(usize), + Underscore, + DotDot, + Choose(T), + CharLiteral(Atom), +} + +impl Pattern { + pub fn for_each_binding(&self, map_fn: &mut FnMut(&T) -> U) { + self.map(map_fn); + } + + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> Pattern { + Pattern { + span: self.span, + kind: self.kind.map(map_fn), + } + } +} + +impl PatternKind { + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> PatternKind { + match *self { + PatternKind::Path(ref path) => PatternKind::Path(path.clone()), + PatternKind::Enum(ref path, ref pats) => PatternKind::Enum( + path.clone(), + pats.iter().map(|pat| pat.map(map_fn)).collect(), + ), + PatternKind::Struct(ref path, ref fields, dotdot) => PatternKind::Struct( + path.clone(), + fields.iter().map(|pat| pat.map(map_fn)).collect(), + dotdot, + ), + PatternKind::Tuple(ref pats) => { + PatternKind::Tuple(pats.iter().map(|p| p.map(map_fn)).collect()) + } + PatternKind::TupleStruct(ref path, ref pats) => { + PatternKind::TupleStruct(path.clone(), pats.iter().map(|p| p.map(map_fn)).collect()) + } + PatternKind::Underscore => PatternKind::Underscore, + PatternKind::DotDot => PatternKind::DotDot, + PatternKind::Usize(n) => PatternKind::Usize(n), + PatternKind::Choose(ref ty) => PatternKind::Choose(map_fn(ty)), + PatternKind::CharLiteral(ref c) => PatternKind::CharLiteral(c.clone()), + } + } +} + +impl FieldPattern { + pub fn map(&self, map_fn: &mut FnMut(&T) -> U) -> FieldPattern { + FieldPattern { + field_name: self.field_name.clone(), + field_span: self.field_span, + pattern: self.pattern.map(map_fn), + } + } +} + +impl Display for Pattern { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.kind) + } +} + +impl Display for PatternKind { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + PatternKind::Path(ref path) => write!(fmt, "{}", path), + PatternKind::Enum(ref path, ref pats) => write!(fmt, "{}({})", path, Sep(", ", pats)), + PatternKind::Struct(ref path, ref fields, false) => { + write!(fmt, "{} {{ {} }}", path, Sep(", ", fields)) + } + PatternKind::Struct(ref path, ref fields, true) if fields.len() == 0 => { + write!(fmt, "{} {{ .. }}", path) + } + PatternKind::Struct(ref path, ref fields, true) => { + write!(fmt, "{} {{ {}, .. }}", path, Sep(", ", fields)) + } + PatternKind::Tuple(ref paths) => write!(fmt, "({})", Sep(", ", paths)), + PatternKind::TupleStruct(ref path, ref paths) => { + write!(fmt, "{}({})", path, Sep(", ", paths)) + } + PatternKind::Underscore => write!(fmt, "_"), + PatternKind::DotDot => write!(fmt, ".."), + PatternKind::Usize(n) => write!(fmt, "{}", n), + PatternKind::Choose(ref ty) => write!(fmt, "{}", ty), + PatternKind::CharLiteral(ref c) => write!(fmt, "'{}'", c), + } + } +} + +impl Display for FieldPattern { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}: {}", self.field_name, self.pattern) + } +} diff --git a/third_party/rust/lalrpop-snap/src/grammar/repr.rs b/third_party/rust/lalrpop-snap/src/grammar/repr.rs new file mode 100644 index 000000000000..3e8978524f51 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/repr.rs @@ -0,0 +1,600 @@ +/*! + * Compiled representation of a grammar. Simplified, normalized + * version of `parse_tree`. The normalization passes produce this + * representation incrementally. + */ + +use string_cache::DefaultAtom as Atom; +use grammar::pattern::Pattern; +use message::Content; +use std::fmt::{Debug, Display, Error, Formatter}; +use collections::{map, Map}; +use util::Sep; + +// These concepts we re-use wholesale +pub use grammar::parse_tree::{Annotation, InternToken, NonterminalString, Path, Span, + TerminalLiteral, TerminalString, TypeParameter, Visibility, + WhereClause}; + +#[derive(Clone, Debug)] +pub struct Grammar { + // a unique prefix that can be appended to identifiers to ensure + // that they do not conflict with any action strings + pub prefix: String, + + // algorithm user requested for this parser + pub algorithm: Algorithm, + + // true if the grammar mentions the `!` terminal anywhere + pub uses_error_recovery: bool, + + // these are the nonterminals that were declared to be public; the + // key is the user's name for the symbol, the value is the + // artificial symbol we introduce, which will always have a single + // production like `Foo' = Foo`. + pub start_nonterminals: Map, + + // the "use foo;" statements that the user declared + pub uses: Vec, + + // type parameters declared on the grammar, like `grammar;` + pub type_parameters: Vec, + + // actual parameters declared on the grammar, like the `x: u32` in `grammar(x: u32);` + pub parameters: Vec, + + // where clauses declared on the grammar, like `grammar where T: Sized` + pub where_clauses: Vec>, + + // optional tokenizer DFA; this is only needed if the user did not supply + // an extern token declaration + pub intern_token: Option, + + // the grammar proper: + pub action_fn_defns: Vec, + pub terminals: TerminalSet, + pub nonterminals: Map, + pub token_span: Span, + pub conversions: Map>, + pub types: Types, + pub module_attributes: Vec, +} + +/// For each terminal, we map it to a small integer from 0 to N. +/// This struct contains the mappings to go back and forth. +#[derive(Clone, Debug)] +pub struct TerminalSet { + pub all: Vec, + pub bits: Map, +} + +#[derive(Clone, Debug)] +pub struct NonterminalData { + pub name: NonterminalString, + pub visibility: Visibility, + pub span: Span, + pub annotations: Vec, + pub productions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Algorithm { + pub lalr: bool, + pub codegen: LrCodeGeneration, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum LrCodeGeneration { + TableDriven, + RecursiveAscent, + TestAll, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Parameter { + pub name: Atom, + pub ty: TypeRepr, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Production { + // this overlaps with the key in the hashmap, obviously, but it's + // handy to have it + pub nonterminal: NonterminalString, + pub symbols: Vec, + pub action: ActionFn, + pub span: Span, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum Symbol { + Nonterminal(NonterminalString), + Terminal(TerminalString), +} + +#[derive(Clone, PartialEq, Eq)] +pub struct ActionFnDefn { + pub fallible: bool, + pub ret_type: TypeRepr, + pub kind: ActionFnDefnKind, +} + +#[derive(Clone, PartialEq, Eq)] +pub enum ActionFnDefnKind { + User(UserActionFnDefn), + Inline(InlineActionFnDefn), + Lookaround(LookaroundActionFnDefn), +} + +/// An action fn written by a user. +#[derive(Clone, PartialEq, Eq)] +pub struct UserActionFnDefn { + pub arg_patterns: Vec, + pub arg_types: Vec, + pub code: String, +} + +/// An action fn generated by the inlining pass. If we were +/// inlining `A = B C D` (with action 44) into `X = Y A Z` (with +/// action 22), this would look something like: +/// +/// ``` +/// fn __action66(__0: Y, __1: B, __2: C, __3: D, __4: Z) { +/// __action22(__0, __action44(__1, __2, __3), __4) +/// } +/// ``` +#[derive(Clone, PartialEq, Eq)] +pub struct InlineActionFnDefn { + /// in the example above, this would be `action22` + pub action: ActionFn, + + /// in the example above, this would be `Y, {action44: B, C, D}, Z` + pub symbols: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum LookaroundActionFnDefn { + Lookahead, + Lookbehind, +} + +#[derive(Clone, PartialEq, Eq)] +pub enum InlinedSymbol { + Original(Symbol), + Inlined(ActionFn, Vec), +} + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum TypeRepr { + Tuple(Vec), + Nominal(NominalTypeRepr), + Associated { + type_parameter: Atom, + id: Atom, + }, + Lifetime(Atom), + Ref { + lifetime: Option, + mutable: bool, + referent: Box, + }, +} + +impl TypeRepr { + pub fn is_unit(&self) -> bool { + match *self { + TypeRepr::Tuple(ref v) => v.is_empty(), + _ => false, + } + } + + pub fn usize() -> TypeRepr { + TypeRepr::Nominal(NominalTypeRepr { + path: Path::usize(), + types: vec![], + }) + } + + pub fn str() -> TypeRepr { + TypeRepr::Nominal(NominalTypeRepr { + path: Path::str(), + types: vec![], + }) + } + + /// Returns the type parameters (or potential type parameters) + /// referenced by this type. e.g., for the type `&'x X`, would + /// return `[TypeParameter::Lifetime('x), TypeParameter::Id(X)]`. + /// This is later used to prune the type parameters list so that + /// only those that are actually used are included. + pub fn referenced(&self) -> Vec { + match *self { + TypeRepr::Tuple(ref tys) => tys.iter().flat_map(|t| t.referenced()).collect(), + TypeRepr::Nominal(ref data) => data.types + .iter() + .flat_map(|t| t.referenced()) + .chain(match data.path.as_id() { + Some(id) => vec![TypeParameter::Id(id)], + None => vec![], + }) + .collect(), + TypeRepr::Associated { + ref type_parameter, .. + } => vec![TypeParameter::Id(type_parameter.clone())], + TypeRepr::Lifetime(ref l) => vec![TypeParameter::Lifetime(l.clone())], + TypeRepr::Ref { + ref lifetime, + mutable: _, + ref referent, + } => lifetime + .iter() + .map(|id| TypeParameter::Lifetime(id.clone())) + .chain(referent.referenced()) + .collect(), + } + } +} + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] +pub struct NominalTypeRepr { + pub path: Path, + pub types: Vec, +} + +#[derive(Clone, Debug)] +pub struct Types { + terminal_token_type: TypeRepr, + terminal_loc_type: Option, + error_type: Option, + terminal_types: Map, + nonterminal_types: Map, + parse_error_type: TypeRepr, + error_recovery_type: TypeRepr, +} + +impl Types { + pub fn new( + prefix: &str, + terminal_loc_type: Option, + error_type: Option, + terminal_token_type: TypeRepr, + ) -> Types { + let mut types = Types { + terminal_loc_type: terminal_loc_type, + error_type: error_type, + terminal_token_type: terminal_token_type, + terminal_types: map(), + nonterminal_types: map(), + // the following two will be overwritten later + parse_error_type: TypeRepr::Tuple(vec![]), + error_recovery_type: TypeRepr::Tuple(vec![]), + }; + + let args = vec![ + types.terminal_loc_type().clone(), + types.terminal_token_type().clone(), + types.error_type(), + ]; + types.parse_error_type = TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![ + Atom::from(format!("{}lalrpop_util", prefix)), + Atom::from("ParseError"), + ], + }, + types: args.clone(), + }); + types.error_recovery_type = TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![ + Atom::from(format!("{}lalrpop_util", prefix)), + Atom::from("ErrorRecovery"), + ], + }, + types: args, + }); + types + .terminal_types + .insert(TerminalString::Error, types.error_recovery_type.clone()); + types + } + + pub fn add_type(&mut self, nt_id: NonterminalString, ty: TypeRepr) { + assert!(self.nonterminal_types.insert(nt_id, ty).is_none()); + } + + pub fn add_term_type(&mut self, term: TerminalString, ty: TypeRepr) { + assert!(self.terminal_types.insert(term, ty).is_none()); + } + + pub fn terminal_token_type(&self) -> &TypeRepr { + &self.terminal_token_type + } + + pub fn opt_terminal_loc_type(&self) -> Option<&TypeRepr> { + self.terminal_loc_type.as_ref() + } + + pub fn terminal_loc_type(&self) -> TypeRepr { + self.terminal_loc_type + .clone() + .unwrap_or_else(|| TypeRepr::Tuple(vec![])) + } + + pub fn error_type(&self) -> TypeRepr { + self.error_type.clone().unwrap_or_else(|| TypeRepr::Ref { + lifetime: Some(Atom::from("'static")), + mutable: false, + referent: Box::new(TypeRepr::str()), + }) + } + + pub fn terminal_type(&self, id: &TerminalString) -> &TypeRepr { + self.terminal_types + .get(&id) + .unwrap_or(&self.terminal_token_type) + } + + pub fn terminal_types(&self) -> Vec { + self.terminal_types.values().cloned().collect() + } + + pub fn lookup_nonterminal_type(&self, id: &NonterminalString) -> Option<&TypeRepr> { + self.nonterminal_types.get(&id) + } + + pub fn nonterminal_type(&self, id: &NonterminalString) -> &TypeRepr { + &self.nonterminal_types[&id] + } + + pub fn nonterminal_types(&self) -> Vec { + self.nonterminal_types.values().cloned().collect() + } + + pub fn parse_error_type(&self) -> &TypeRepr { + &self.parse_error_type + } + + pub fn error_recovery_type(&self) -> &TypeRepr { + &self.error_recovery_type + } + + /// Returns a type `(L, T, L)` where L is the location type and T + /// is the token type. + pub fn triple_type(&self) -> TypeRepr { + self.spanned_type(self.terminal_token_type().clone()) + } + + /// Returns a type `(L, T, L)` where L is the location type and T + /// is the argument. + pub fn spanned_type(&self, ty: TypeRepr) -> TypeRepr { + let location_type = self.terminal_loc_type(); + TypeRepr::Tuple(vec![location_type.clone(), ty, location_type]) + } +} + +impl Display for Parameter { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}: {}", self.name, self.ty) + } +} + +impl Display for TypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + TypeRepr::Tuple(ref types) => write!(fmt, "({})", Sep(", ", types)), + TypeRepr::Nominal(ref data) => write!(fmt, "{}", data), + TypeRepr::Associated { + ref type_parameter, + ref id, + } => write!(fmt, "{}::{}", type_parameter, id), + TypeRepr::Lifetime(ref id) => write!(fmt, "{}", id), + TypeRepr::Ref { + lifetime: None, + mutable: false, + ref referent, + } => write!(fmt, "&{}", referent), + TypeRepr::Ref { + lifetime: Some(ref l), + mutable: false, + ref referent, + } => write!(fmt, "&{} {}", l, referent), + TypeRepr::Ref { + lifetime: None, + mutable: true, + ref referent, + } => write!(fmt, "&mut {}", referent), + TypeRepr::Ref { + lifetime: Some(ref l), + mutable: true, + ref referent, + } => write!(fmt, "&{} mut {}", l, referent), + } + } +} + +impl Debug for TypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for NominalTypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + if self.types.len() == 0 { + write!(fmt, "{}", self.path) + } else { + write!(fmt, "{}<{}>", self.path, Sep(", ", &self.types)) + } + } +} + +impl Debug for NominalTypeRepr { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +#[derive(Copy, Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)] +pub struct ActionFn(u32); + +impl ActionFn { + pub fn new(x: usize) -> ActionFn { + ActionFn(x as u32) + } + + pub fn index(&self) -> usize { + self.0 as usize + } +} + +impl Symbol { + pub fn is_terminal(&self) -> bool { + match *self { + Symbol::Terminal(..) => true, + Symbol::Nonterminal(..) => false, + } + } + + pub fn ty<'ty>(&self, t: &'ty Types) -> &'ty TypeRepr { + match *self { + Symbol::Terminal(ref id) => t.terminal_type(id), + Symbol::Nonterminal(ref id) => t.nonterminal_type(id), + } + } +} + +impl Display for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Symbol::Nonterminal(ref id) => write!(fmt, "{}", id.clone()), + Symbol::Terminal(ref id) => write!(fmt, "{}", id.clone()), + } + } +} + +impl Debug for Symbol { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Into> for Symbol { + fn into(self) -> Box { + match self { + Symbol::Nonterminal(nt) => nt.into(), + Symbol::Terminal(term) => term.into(), + } + } +} + +impl Debug for Production { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!( + fmt, + "{} = {} => {:?};", + self.nonterminal, + Sep(", ", &self.symbols), + self.action, + ) + } +} + +impl Debug for ActionFnDefn { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.to_fn_string("_")) + } +} + +impl ActionFnDefn { + fn to_fn_string(&self, name: &str) -> String { + match self.kind { + ActionFnDefnKind::User(ref data) => data.to_fn_string(self, name), + ActionFnDefnKind::Inline(ref data) => data.to_fn_string(name), + ActionFnDefnKind::Lookaround(ref data) => format!("{:?}", data), + } + } +} + +impl UserActionFnDefn { + fn to_fn_string(&self, defn: &ActionFnDefn, name: &str) -> String { + let arg_strings: Vec = self.arg_patterns + .iter() + .zip(self.arg_types.iter()) + .map(|(p, t)| format!("{}: {}", p, t)) + .collect(); + + format!( + "fn {}({}) -> {} {{ {} }}", + name, + Sep(", ", &arg_strings), + defn.ret_type, + self.code, + ) + } +} + +impl InlineActionFnDefn { + fn to_fn_string(&self, name: &str) -> String { + let arg_strings: Vec = self.symbols + .iter() + .map(|inline_sym| match *inline_sym { + InlinedSymbol::Original(ref s) => format!("{}", s), + InlinedSymbol::Inlined(a, ref s) => format!("{:?}({})", a, Sep(", ", s)), + }) + .collect(); + + format!( + "fn {}(..) {{ {:?}({}) }}", + name, + self.action, + Sep(", ", &arg_strings), + ) + } +} + +impl Grammar { + pub fn pattern(&self, t: &TerminalString) -> &Pattern { + &self.conversions[t] + } + + pub fn productions_for(&self, nonterminal: &NonterminalString) -> &[Production] { + match self.nonterminals.get(nonterminal) { + Some(v) => &v.productions[..], + None => &[], // this...probably shouldn't happen actually? + } + } + + pub fn user_parameter_refs(&self) -> String { + let mut result = String::new(); + for parameter in &self.parameters { + result.push_str(&format!("{}, ", parameter.name)); + } + result + } + + pub fn action_is_fallible(&self, f: ActionFn) -> bool { + self.action_fn_defns[f.index()].fallible + } + + pub fn non_lifetime_type_parameters(&self) -> Vec<&TypeParameter> { + self.type_parameters + .iter() + .filter(|&tp| match *tp { + TypeParameter::Lifetime(_) => false, + TypeParameter::Id(_) => true, + }) + .collect() + } +} + +impl Default for Algorithm { + fn default() -> Self { + Algorithm { + lalr: false, + codegen: LrCodeGeneration::TableDriven, + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/grammar/token/mod.rs b/third_party/rust/lalrpop-snap/src/grammar/token/mod.rs new file mode 100644 index 000000000000..419d5a4427d7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/token/mod.rs @@ -0,0 +1,28 @@ +use std::collections::HashMap; + +use grammar::parse_tree::TypeRef; +use string_cache::DefaultAtom as Atom; + +#[cfg(test)] +mod test; + +pub struct TokenDefinition { + // if the enum type is `foo::bar::baz` then: + enum_type: TypeRef, + + // map from a custom string, like `"("` to a variant name like LPAREN + token_map: HashMap, +} + +impl TokenDefinition { + pub fn new(enum_type: TypeRef, token_map: Vec<(Atom, Atom)>) -> TokenDefinition { + TokenDefinition { + enum_type: enum_type, + token_map: token_map.into_iter().collect(), + } + } + + pub fn enum_type(&self) -> &TypeRef { + &self.enum_type + } +} diff --git a/third_party/rust/lalrpop-snap/src/grammar/token/test.rs b/third_party/rust/lalrpop-snap/src/grammar/token/test.rs new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/grammar/token/test.rs @@ -0,0 +1 @@ + diff --git a/third_party/rust/lalrpop-snap/src/kernel_set.rs b/third_party/rust/lalrpop-snap/src/kernel_set.rs new file mode 100644 index 000000000000..32805eb2eb1c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/kernel_set.rs @@ -0,0 +1,41 @@ +use std::collections::VecDeque; +use std::fmt::Debug; +use std::hash::Hash; +use collections::{map, Map}; + +pub struct KernelSet { + counter: usize, + kernels: VecDeque, + map: Map, +} + +pub trait Kernel: Clone + Debug + Hash + Eq + PartialOrd + Ord { + type Index: Copy + Debug; + + fn index(c: usize) -> Self::Index; +} + +impl KernelSet { + pub fn new() -> KernelSet { + KernelSet { + kernels: VecDeque::new(), + map: map(), + counter: 0, + } + } + + pub fn add_state(&mut self, kernel: K) -> K::Index { + let kernels = &mut self.kernels; + let counter = &mut self.counter; + *self.map.entry(kernel.clone()).or_insert_with(|| { + let index = *counter; + *counter += 1; + kernels.push_back(kernel); + K::index(index) + }) + } + + pub fn next(&mut self) -> Option { + self.kernels.pop_front() + } +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/dfa/interpret.rs b/third_party/rust/lalrpop-snap/src/lexer/dfa/interpret.rs new file mode 100644 index 000000000000..6fde564b053f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/dfa/interpret.rs @@ -0,0 +1,40 @@ +use lexer::dfa::{Kind, NFAIndex, DFA, START}; + +pub fn interpret<'text>(dfa: &DFA, input: &'text str) -> Option<(NFAIndex, &'text str)> { + let mut longest: Option<(NFAIndex, usize)> = None; + let mut state_index = START; + + for (offset, ch) in input.char_indices() { + let state = &dfa.states[state_index.0]; + + let target = dfa.state(state_index) + .test_edges + .iter() + .filter_map(|&(test, target)| { + if test.contains_char(ch) { + Some(target) + } else { + None + } + }) + .next(); + + if let Some(target) = target { + state_index = target; + } else { + state_index = state.other_edge; + } + + match dfa.state(state_index).kind { + Kind::Accepts(nfa) => { + longest = Some((nfa, offset + ch.len_utf8())); + } + Kind::Reject => { + break; + } + Kind::Neither => {} + } + } + + longest.map(|(index, offset)| (index, &input[..offset])) +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/dfa/mod.rs b/third_party/rust/lalrpop-snap/src/lexer/dfa/mod.rs new file mode 100644 index 000000000000..d87cae74ece3 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/dfa/mod.rs @@ -0,0 +1,326 @@ +//! Constructs a DFA which picks the longest matching regular +//! expression from the input. + +use collections::Set; +use kernel_set::{Kernel, KernelSet}; +use std::fmt::{Debug, Display, Error, Formatter}; +use std::rc::Rc; +use lexer::re; +use lexer::nfa::{self, NFAConstructionError, NFAStateIndex, Test, NFA}; + +#[cfg(test)] +mod test; + +#[cfg(test)] +pub mod interpret; + +mod overlap; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DFA { + pub states: Vec, +} + +#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub struct Precedence(pub usize); + +#[derive(Debug)] +pub enum DFAConstructionError { + NFAConstructionError { + index: NFAIndex, + error: NFAConstructionError, + }, + + /// Either of the two regexs listed could match, and they have equal + /// priority. + Ambiguity { match0: NFAIndex, match1: NFAIndex }, +} + +pub fn build_dfa( + regexs: &[re::Regex], + precedences: &[Precedence], +) -> Result { + assert_eq!(regexs.len(), precedences.len()); + let nfas: Vec<_> = try! { + regexs.iter() + .enumerate() + .map(|(i, r)| match NFA::from_re(r) { + Ok(nfa) => Ok(nfa), + Err(e) => Err(DFAConstructionError::NFAConstructionError { + index: NFAIndex(i), + error: e + }), + }) + .collect() + }; + let builder = DFABuilder { + nfas: &nfas, + precedences: precedences.to_vec(), + }; + let dfa = try!(builder.build()); + Ok(dfa) +} + +struct DFABuilder<'nfa> { + nfas: &'nfa [NFA], + precedences: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct State { + item_set: DFAItemSet, + pub kind: Kind, + pub test_edges: Vec<(Test, DFAStateIndex)>, + pub other_edge: DFAStateIndex, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Kind { + Accepts(NFAIndex), + Reject, + Neither, +} + +#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NFAIndex(usize); + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct DFAStateIndex(usize); + +type DFAKernelSet = KernelSet; + +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct DFAItemSet { + items: Rc>, +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct Item { + // which regular expression? + nfa_index: NFAIndex, + + // what state within the NFA are we at? + nfa_state: NFAStateIndex, +} + +const START: DFAStateIndex = DFAStateIndex(0); + +impl<'nfa> DFABuilder<'nfa> { + fn build(&self) -> Result { + let mut kernel_set = KernelSet::new(); + let mut states = vec![]; + + let start_state_index = self.start_state(&mut kernel_set); + assert_eq!(start_state_index, START); + + while let Some(item_set) = kernel_set.next() { + // collect all the specific tests we expect from any of + // the items in this state + let tests: Set = item_set + .items + .iter() + .flat_map(|&item| { + self.nfa(item) + .edges::(item.nfa_state) + .map(|edge| edge.label) + }) + .collect(); + let tests = overlap::remove_overlap(&tests); + + // if any NFA is in an accepting state, that makes this + // DFA state an accepting state + let mut all_accepts: Vec<(Precedence, NFAIndex)> = item_set + .items + .iter() + .cloned() + .filter(|&item| self.nfa(item).is_accepting_state(item.nfa_state)) + .map(|item| (self.precedences[item.nfa_index.0], item.nfa_index)) + .collect(); + + // if all NFAs are in a rejecting state, that makes this + // DFA a rejecting state + let all_rejects: bool = item_set + .items + .iter() + .all(|&item| self.nfa(item).is_rejecting_state(item.nfa_state)); + + let kind = if all_rejects || item_set.items.is_empty() { + Kind::Reject + } else if all_accepts.len() == 0 { + Kind::Neither + } else if all_accepts.len() == 1 { + // accepts just one NFA, easy case + Kind::Accepts(all_accepts[0].1) + } else { + all_accepts.sort(); // sort regex with higher precedence, well, higher + let (best_priority, best_nfa) = all_accepts[all_accepts.len() - 1]; + let (next_priority, next_nfa) = all_accepts[all_accepts.len() - 2]; + if best_priority == next_priority { + return Err(DFAConstructionError::Ambiguity { + match0: best_nfa, + match1: next_nfa, + }); + } + Kind::Accepts(best_nfa) + }; + + // for each specific test, find what happens if we see a + // character matching that test + let mut test_edges: Vec<(Test, DFAStateIndex)> = tests + .iter() + .map(|&test| { + let items: Vec<_> = item_set + .items + .iter() + .filter_map(|&item| self.accept_test(item, test)) + .collect(); + + // at least one of those items should accept this test + assert!(!items.is_empty()); + + (test, kernel_set.add_state(self.transitive_closure(items))) + }) + .collect(); + + test_edges.sort(); + + // Consider what there is some character that doesn't meet + // any of the tests. In this case, we can just ignore all + // the test edges for each of the items and just union all + // the "other" edges -- because if it were one of those + // test edges, then that transition is represented above. + let other_transitions: Vec<_> = item_set + .items + .iter() + .filter_map(|&item| self.accept_other(item)) + .collect(); + + // we never know the full set + assert!(item_set.items.is_empty() || !other_transitions.is_empty()); + + let other_edge = kernel_set.add_state(self.transitive_closure(other_transitions)); + + let state = State { + item_set: item_set, + kind: kind, + test_edges: test_edges, + other_edge: other_edge, + }; + + states.push(state); + } + + Ok(DFA { states: states }) + } + + fn start_state(&self, kernel_set: &mut DFAKernelSet) -> DFAStateIndex { + // starting state is at the beginning of all regular expressions + let items: Vec<_> = (0..self.nfas.len()) + .map(|i| Item { + nfa_index: NFAIndex(i), + nfa_state: nfa::START, + }) + .collect(); + let item_set = self.transitive_closure(items); + kernel_set.add_state(item_set) + } + + fn accept_test(&self, item: Item, test: Test) -> Option { + let nfa = self.nfa(item); + + let matching_test = nfa.edges::(item.nfa_state) + .filter(|edge| edge.label.intersects(test)) + .map(|edge| item.to(edge.to)); + + let matching_other = nfa.edges::(item.nfa_state) + .map(|edge| item.to(edge.to)); + + matching_test.chain(matching_other).next() + } + + fn accept_other(&self, item: Item) -> Option { + let nfa = self.nfa(item); + nfa.edges::(item.nfa_state) + .map(|edge| item.to(edge.to)) + .next() + } + + fn transitive_closure(&self, mut items: Vec) -> DFAItemSet { + let mut observed: Set = items.iter().cloned().collect(); + + let mut counter = 0; + while counter < items.len() { + let item = items[counter]; + let derived_states = self.nfa(item) + .edges::(item.nfa_state) + .map(|edge| item.to(edge.to)) + .filter(|&item| observed.insert(item)); + items.extend(derived_states); + counter += 1; + } + + items.sort(); + items.dedup(); + + DFAItemSet { + items: Rc::new(items), + } + } + + fn nfa(&self, item: Item) -> &NFA { + &self.nfas[item.nfa_index.0] + } +} + +impl Kernel for DFAItemSet { + type Index = DFAStateIndex; + + fn index(c: usize) -> DFAStateIndex { + DFAStateIndex(c) + } +} + +impl DFA { + fn state(&self, index: DFAStateIndex) -> &State { + &self.states[index.0] + } +} + +impl Item { + fn to(&self, s: NFAStateIndex) -> Item { + Item { + nfa_index: self.nfa_index, + nfa_state: s, + } + } +} + +impl Debug for DFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "DFA{}", self.0) + } +} + +impl Display for DFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Debug::fmt(self, fmt) + } +} + +impl NFAIndex { + pub fn index(&self) -> usize { + self.0 + } +} + +impl DFAStateIndex { + pub fn index(&self) -> usize { + self.0 + } +} + +impl Debug for Item { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({:?}:{:?})", self.nfa_index, self.nfa_state) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/dfa/overlap.rs b/third_party/rust/lalrpop-snap/src/lexer/dfa/overlap.rs new file mode 100644 index 000000000000..099c59c60b38 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/dfa/overlap.rs @@ -0,0 +1,149 @@ +//! When we are combining two NFAs, we will grab all the outgoing +//! edges from a set of nodes and wind up with a bunch of potentially +//! overlapping character ranges like: +//! +//! a-z +//! c-l +//! 0-9 +//! +//! This module contains code to turn those into non-overlapping ranges like: +//! +//! a-b +//! c-l +//! m-z +//! 0-9 +//! +//! Specifically, we want to ensure that the same set of characters is +//! covered when we started, and that each of the input ranges is +//! covered precisely by some set of ranges in the output. + +use collections::Set; +use lexer::nfa::Test; +use std::cmp; + +pub fn remove_overlap(ranges: &Set) -> Vec { + // We will do this in the dumbest possible way to start. :) + // Maintain a result vector that contains disjoint ranges. To + // insert a new range, we walk over this vector and split things + // up as we go. This algorithm is so naive as to be exponential, I + // think. Sue me. + + let mut disjoint_ranges = vec![]; + + for &range in ranges { + add_range(range, 0, &mut disjoint_ranges); + } + + // the algorithm above leaves some empty ranges in for simplicity; + // prune them out. + disjoint_ranges.retain(|r| !r.is_empty()); + + disjoint_ranges +} + +fn add_range(range: Test, start_index: usize, disjoint_ranges: &mut Vec) { + if range.is_empty() { + return; + } + + // Find first overlapping range in `disjoint_ranges`, if any. + match disjoint_ranges[start_index..] + .iter() + .position(|r| r.intersects(range)) + { + Some(index) => { + let index = index + start_index; + let overlapping_range = disjoint_ranges[index]; + + // If the range we are trying to add already exists, we're all done. + if overlapping_range == range { + return; + } + + // Otherwise, we want to create three ranges (some of which may + // be empty). e.g. imagine one range is `a-z` and the other + // is `c-l`, we want `a-b`, `c-l`, and `m-z`. + let min_min = cmp::min(range.start, overlapping_range.start); + let mid_min = cmp::max(range.start, overlapping_range.start); + let mid_max = cmp::min(range.end, overlapping_range.end); + let max_max = cmp::max(range.end, overlapping_range.end); + let low_range = Test { + start: min_min, + end: mid_min, + }; + let mid_range = Test { + start: mid_min, + end: mid_max, + }; + let max_range = Test { + start: mid_max, + end: max_max, + }; + + assert!(low_range.is_disjoint(mid_range)); + assert!(low_range.is_disjoint(max_range)); + assert!(mid_range.is_disjoint(max_range)); + + // Replace the existing range with the low range, and then + // add the mid and max ranges in. (The low range may be + // empty, but we'll prune that out later.) + disjoint_ranges[index] = low_range; + add_range(mid_range, index + 1, disjoint_ranges); + add_range(max_range, index + 1, disjoint_ranges); + } + + None => { + // no overlap -- easy case. + disjoint_ranges.push(range); + } + } +} + +#[cfg(test)] +macro_rules! test { + ($($range:expr,)*) => { + { + use collections::set; + use lexer::nfa::Test; + use std::char; + let mut s = set(); + $({ let r = $range; s.insert(Test::exclusive_range(r.start, r.end)); })* + remove_overlap(&s).into_iter() + .map(|r| + char::from_u32(r.start).unwrap() .. + char::from_u32(r.end).unwrap()) + .collect::>() + } + } +} + +#[test] +fn alphabet() { + let result = test! { + 'a' .. 'z', + 'c' .. 'l', + '0' .. '9', + }; + assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); +} + +#[test] +fn repeat() { + let result = test! { + 'a' .. 'z', + 'c' .. 'l', + 'l' .. 'z', + '0' .. '9', + }; + assert_eq!(result, vec!['0'..'9', 'a'..'c', 'c'..'l', 'l'..'z']); +} + +#[test] +fn stagger() { + let result = test! { + '0' .. '3', + '2' .. '4', + '3' .. '5', + }; + assert_eq!(result, vec!['0'..'2', '2'..'3', '3'..'4', '4'..'5']); +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/dfa/test.rs b/third_party/rust/lalrpop-snap/src/lexer/dfa/test.rs new file mode 100644 index 000000000000..6c2b8c4889b4 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/dfa/test.rs @@ -0,0 +1,76 @@ +use lexer::dfa::{self, DFAConstructionError, NFAIndex, Precedence, DFA}; +use lexer::dfa::interpret::interpret; +use lexer::re; + +pub fn dfa(inputs: &[(&str, Precedence)]) -> Result { + let regexs: Result, _> = inputs.iter().map(|&(s, _)| re::parse_regex(s)).collect(); + let regexs = match regexs { + Ok(rs) => rs, + Err(_) => panic!("unexpected parse error"), + }; + let precedences: Vec<_> = inputs.iter().map(|&(_, p)| p).collect(); + dfa::build_dfa(®exs, &precedences) +} + +const P1: Precedence = Precedence(1); +const P0: Precedence = Precedence(0); + +#[test] +fn tokenizer() { + let dfa = dfa(&[ + /* 0 */ (r#"class"#, P1), + /* 1 */ (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0), + /* 2 */ (r#"[0-9]+"#, P0), + /* 3 */ (r#" +"#, P0), + /* 4 */ (r#">>"#, P0), + /* 5 */ (r#">"#, P0), + ]).unwrap(); + + assert_eq!(interpret(&dfa, "class Foo"), Some((NFAIndex(0), "class"))); + assert_eq!(interpret(&dfa, "classz Foo"), Some((NFAIndex(1), "classz"))); + assert_eq!(interpret(&dfa, "123"), Some((NFAIndex(2), "123"))); + assert_eq!(interpret(&dfa, " classz Foo"), Some((NFAIndex(3), " "))); + assert_eq!(interpret(&dfa, ">"), Some((NFAIndex(5), ">"))); + assert_eq!(interpret(&dfa, ">>"), Some((NFAIndex(4), ">>"))); +} + +#[test] +fn ambiguous_regex() { + // here the keyword and the regex have same precedence, so we have + // an ambiguity + assert!(dfa(&[(r#"class"#, P0), (r#"[a-zA-Z_][a-zA-Z0-9_]*"#, P0)]).is_err()); +} + +#[test] +fn issue_32() { + assert!(dfa(&[(r#"."#, P0)]).is_ok()); +} + +#[test] +fn issue_35() { + assert!(dfa(&[(r#".*"#, P0), (r"[-+]?[0-9]*\.?[0-9]+", P0)]).is_err()); +} + +#[test] +fn alternatives() { + let dfa = dfa(&[(r#"abc|abd"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abd"), Some((NFAIndex(0), "abd"))); + assert_eq!(interpret(&dfa, "123"), None); +} + +#[test] +fn alternatives_extension() { + let dfa = dfa(&[(r#"abc|abcd"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); + assert_eq!(interpret(&dfa, "123"), None); +} + +#[test] +fn alternatives_contraction() { + let dfa = dfa(&[(r#"abcd|abc"#, P0)]).unwrap(); + assert_eq!(interpret(&dfa, "abc"), Some((NFAIndex(0), "abc"))); + assert_eq!(interpret(&dfa, "abcd"), Some((NFAIndex(0), "abcd"))); + assert_eq!(interpret(&dfa, "123"), None); +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/intern_token/mod.rs b/third_party/rust/lalrpop-snap/src/lexer/intern_token/mod.rs new file mode 100644 index 000000000000..47712ead6a11 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/intern_token/mod.rs @@ -0,0 +1,293 @@ +/*! + +Generates an iterator type `Matcher` that looks roughly like + +```ignore +mod intern_token { + extern crate regex as regex; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] + pub struct Token<'input>(pub usize, pub &'input str); + // ~~~~~~ ~~~~~~~~~~~ + // token token + // index text + // (type) + + impl<'a> fmt::Display for Token<'a> { ... } + + pub struct MatcherBuilder { + regex_set: regex::RegexSet, + regex_vec: Vec, + } + + impl MatcherBuilder { + fn new() -> MatchBuilder { ... } + fn matcher<'input, 'builder>(&'builder self, s: &'input str) -> Matcher<'input, 'builder> { ... } + } + + pub struct Matcher<'input, 'builder> { + text: &'input str, + consumed: usize, + regex_set: &'builder regex::RegexSet, + regex_vec: &'builder Vec, + } + + impl Matcher<'input> { + fn tokenize(&self, text: &str) -> Option<(usize, usize)> { ... } + } + + impl<'input> Iterator for Matcher<'input> { + type Item = Result<(usize, Token<'input>, usize), ParseError>; + // ~~~~~ ~~~~~~~~~~~~~ ~~~~~ + // start token end + } +} +``` + + */ + +use lexer::re; +use grammar::parse_tree::InternToken; +use grammar::repr::{Grammar, TerminalLiteral}; +use rust::RustWrite; +use std::io::{self, Write}; + +pub fn compile( + grammar: &Grammar, + intern_token: &InternToken, + out: &mut RustWrite, +) -> io::Result<()> { + let prefix = &grammar.prefix; + + rust!(out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(out, "mod {}intern_token {{", prefix); + rust!(out, "#![allow(unused_imports)]"); + try!(out.write_uses("", &grammar)); + rust!(out, "extern crate regex as {}regex;", prefix); + rust!(out, "use std::fmt as {}fmt;", prefix); + rust!(out, ""); + rust!( + out, + "#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]" + ); + rust!(out, "pub struct Token<'input>(pub usize, pub &'input str);"); + rust!(out, "impl<'a> {}fmt::Display for Token<'a> {{", prefix); + rust!( + out, + "fn fmt(&self, formatter: &mut {}fmt::Formatter) -> Result<(), {}fmt::Error> {{", + prefix, + prefix + ); + rust!(out, "{}fmt::Display::fmt(self.1, formatter)", prefix); + rust!(out, "}}"); + rust!(out, "}}"); + rust!(out, ""); + rust!(out, "pub struct {}MatcherBuilder {{", prefix); + rust!(out, "regex_set: {}regex::RegexSet,", prefix); + rust!(out, "regex_vec: Vec<{}regex::Regex>,", prefix); + rust!(out, "}}"); + rust!(out, ""); + rust!(out, "impl {}MatcherBuilder {{", prefix); + rust!(out, "pub fn new() -> {}MatcherBuilder {{", prefix); + + // create a vector of rust string literals with the text of each + // regular expression + let regex_strings: Vec = { + intern_token + .match_entries + .iter() + .map(|match_entry| match match_entry.match_literal { + TerminalLiteral::Quoted(ref s) => re::parse_literal(&s), + TerminalLiteral::Regex(ref s) => re::parse_regex(&s).unwrap(), + }) + .map(|regex| { + // make sure all regex are anchored at the beginning of the input + format!("^({})", regex) + }) + .map(|regex_str| { + // create a rust string with text of the regex; the Debug impl + // will add quotes and escape + format!("{:?}", regex_str) + }) + .collect() + }; + + rust!(out, "let {}strs: &[&str] = &[", prefix); + for literal in ®ex_strings { + rust!(out, "{},", literal); + } + rust!(out, "];"); + rust!( + out, + "let {}regex_set = {}regex::RegexSet::new({}strs).unwrap();", + prefix, + prefix, + prefix + ); + + rust!(out, "let {}regex_vec = vec![", prefix); + for literal in ®ex_strings { + rust!(out, "{}regex::Regex::new({}).unwrap(),", prefix, literal); + } + rust!(out, "];"); + + rust!( + out, + "{0}MatcherBuilder {{ regex_set: {0}regex_set, regex_vec: {0}regex_vec }}", + prefix + ); + rust!(out, "}}"); // fn new() + rust!( + out, + "pub fn matcher<'input, 'builder>(&'builder self, s: &'input str) \ + -> {}Matcher<'input, 'builder> {{", + prefix + ); + rust!(out, "{}Matcher {{", prefix); + rust!(out, "text: s,"); + rust!(out, "consumed: 0,"); + rust!(out, "regex_set: &self.regex_set,"); + rust!(out, "regex_vec: &self.regex_vec,"); + rust!(out, "}}"); // struct literal + rust!(out, "}}"); // fn matcher() + rust!(out, "}}"); // impl MatcherBuilder + rust!(out, ""); + rust!(out, "pub struct {}Matcher<'input, 'builder> {{", prefix); + rust!(out, "text: &'input str,"); // remaining input + rust!(out, "consumed: usize,"); // number of chars consumed thus far + rust!(out, "regex_set: &'builder {}regex::RegexSet,", prefix); + rust!(out, "regex_vec: &'builder Vec<{}regex::Regex>,", prefix); + rust!(out, "}}"); + rust!(out, ""); + rust!( + out, + "impl<'input, 'builder> Iterator for {}Matcher<'input, 'builder> {{", + prefix + ); + rust!( + out, + "type Item = Result<(usize, Token<'input>, usize), \ + {}lalrpop_util::ParseError,{}>>;", + prefix, + grammar.types.error_type() + ); + rust!(out, ""); + rust!(out, "fn next(&mut self) -> Option {{"); + + // start by trimming whitespace from left + rust!(out, "let {}text = self.text.trim_left();", prefix); + rust!( + out, + "let {}whitespace = self.text.len() - {}text.len();", + prefix, + prefix + ); + rust!( + out, + "let {}start_offset = self.consumed + {}whitespace;", + prefix, + prefix + ); + + // if nothing left, return None + rust!(out, "if {}text.is_empty() {{", prefix); + rust!(out, "self.text = {}text;", prefix); + rust!(out, "self.consumed = {}start_offset;", prefix); + rust!(out, "None"); + rust!(out, "}} else {{"); + + // otherwise, use regex-set to find list of matching tokens + rust!( + out, + "let {}matches = self.regex_set.matches({}text);", + prefix, + prefix + ); + + // if nothing matched, return an error + rust!(out, "if !{}matches.matched_any() {{", prefix); + rust!( + out, + "Some(Err({}lalrpop_util::ParseError::InvalidToken {{", + prefix + ); + rust!(out, "location: {}start_offset,", prefix); + rust!(out, "}}))"); + rust!(out, "}} else {{"); + + // otherwise, have to find longest, highest-priority match. We have the literals + // sorted in order of increasing precedence, so we'll iterate over them one by one, + // checking if each one matches, and remembering the longest one. + rust!(out, "let mut {}longest_match = 0;", prefix); // length of longest match + rust!(out, "let mut {}index = 0;", prefix); // index of longest match + rust!( + out, + "for {}i in 0 .. {} {{", + prefix, + intern_token.match_entries.len() + ); + rust!(out, "if {}matches.matched({}i) {{", prefix, prefix); + + // re-run the regex to find out how long this particular match + // was, then compare that against the longest-match so far. Note + // that the order of the tuple is carefully constructed to ensure + // that (a) we get the longest-match but (b) if two matches are + // equal, we get the largest index. This is because the indices + // are sorted in order of increasing priority, and because we know + // that indices of equal priority cannot both match (because of + // the DFA check). + rust!( + out, + "let {}match = self.regex_vec[{}i].find({}text).unwrap();", + prefix, + prefix, + prefix + ); + rust!(out, "let {}len = {}match.end();", prefix, prefix); + rust!(out, "if {}len >= {}longest_match {{", prefix, prefix); + rust!(out, "{}longest_match = {}len;", prefix, prefix); + rust!(out, "{}index = {}i;", prefix, prefix); + rust!(out, "}}"); // if is longest match + rust!(out, "}}"); // if matches.matched(i) + rust!(out, "}}"); // for loop + + // transform the result into the expected return value + rust!( + out, + "let {}result = &{}text[..{}longest_match];", + prefix, + prefix, + prefix + ); + rust!( + out, + "let {}remaining = &{}text[{}longest_match..];", + prefix, + prefix, + prefix + ); + rust!( + out, + "let {}end_offset = {}start_offset + {}longest_match;", + prefix, + prefix, + prefix + ); + rust!(out, "self.text = {}remaining;", prefix); + rust!(out, "self.consumed = {}end_offset;", prefix); + rust!( + out, + "Some(Ok(({}start_offset, Token({}index, {}result), {}end_offset)))", + prefix, + prefix, + prefix, + prefix + ); + + rust!(out, "}}"); // else + rust!(out, "}}"); // else + rust!(out, "}}"); // fn + rust!(out, "}}"); // impl + rust!(out, "}}"); // mod + Ok(()) +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/mod.rs b/third_party/rust/lalrpop-snap/src/lexer/mod.rs new file mode 100644 index 000000000000..176d57131977 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/mod.rs @@ -0,0 +1,8 @@ +//! Code related to generating tokenizers. + +#![allow(dead_code)] // not yet fully activated + +pub mod dfa; +pub mod intern_token; +pub mod re; +pub mod nfa; diff --git a/third_party/rust/lalrpop-snap/src/lexer/nfa/interpret.rs b/third_party/rust/lalrpop-snap/src/lexer/nfa/interpret.rs new file mode 100644 index 000000000000..7d22a741e896 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/nfa/interpret.rs @@ -0,0 +1,72 @@ +//! A depth-first interpreter for NFAs. + +use lexer::nfa::{NFAStateIndex, Noop, Other, StateKind, Test, NFA, START}; +use std::cmp::max; + +/// Interpret `nfa` applied to `test`, returning the longest matching +/// string that we can find (if any). +pub fn interpret<'text>(nfa: &NFA, text: &'text str) -> Option<&'text str> { + let mut longest: Option = None; + let mut stack: Vec<(NFAStateIndex, usize)> = vec![(START, 0)]; + + while let Some((state, offset)) = stack.pop() { + match nfa.kind(state) { + StateKind::Accept => match longest { + None => longest = Some(offset), + Some(o) => longest = Some(max(o, offset)), + }, + StateKind::Reject => { + // the rejection state is a dead-end + continue; + } + StateKind::Neither => {} + } + + // transition the no-op edges, to start + for edge in nfa.edges::(state) { + push(&mut stack, (edge.to, offset)); + } + + // check whether there is another character + let ch = match text[offset..].chars().next() { + Some(ch) => ch, // yep + None => { + continue; + } // nope + }; + + let offset1 = offset + ch.len_utf8(); + + // transition test edges + let mut tests = 0; + for edge in nfa.edges::(state) { + if edge.label.contains_char(ch) { + push(&mut stack, (edge.to, offset1)); + tests += 1; + } + } + + // should *never* match more than one test, because tests + // ought to be disjoint + assert!(tests <= 1); + + // if no tests passed, use the "Other" edge + if tests == 0 { + for edge in nfa.edges::(state) { + push(&mut stack, (edge.to, offset1)); + tests += 1; + } + + // should *never* have more than one "otherwise" edge + assert!(tests <= 1); + } + } + + longest.map(|offset| &text[..offset]) +} + +fn push(v: &mut Vec, t: T) { + if !v.contains(&t) { + v.push(t); + } +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/nfa/mod.rs b/third_party/rust/lalrpop-snap/src/lexer/nfa/mod.rs new file mode 100644 index 000000000000..6b6c8bfeddf5 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/nfa/mod.rs @@ -0,0 +1,637 @@ +//! The NFA we construct for each regex. Since the states are not +//! really of interest, we represent this just as a vector of labeled +//! edges. + +use lexer::re::Regex; +use regex_syntax::{ClassRange, Expr, Repeater}; +use std::char; +use std::fmt::{Debug, Error as FmtError, Formatter}; +use std::usize; + +#[cfg(test)] +mod interpret; + +#[cfg(test)] +mod test; + +#[derive(Debug)] +pub struct NFA { + states: Vec, + edges: Edges, +} + +/// An edge label representing a range of characters, inclusive. Note +/// that this range may contain some endpoints that are not valid +/// unicode, hence we store u32. +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Test { + pub start: u32, + pub end: u32, +} + +/// An "epsilon" edge -- no input +#[derive(Debug, PartialEq, Eq)] +pub struct Noop; + +/// An "other" edge -- fallback if no other edges apply +#[derive(Debug, PartialEq, Eq)] +pub struct Other; + +/// For each state, we just store the indices of the first char and +/// test edges, or usize::MAX if no such edge. You can then find all +/// edges by enumerating subsequent edges in the vectors until you +/// find one with a different `from` value. +#[derive(Debug)] +pub struct State { + kind: StateKind, + first_noop_edge: usize, + first_test_edge: usize, + first_other_edge: usize, +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum StateKind { + Accept, + Reject, + Neither, +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct NFAStateIndex(usize); + +/// A set of edges for the state machine. Edges are kept sorted by the +/// type of label they have. Within a vector, all edges with the same +/// `from` are grouped together so they can be enumerated later (for +/// now we just ensure this during construction, but one could easily +/// sort). +#[derive(Debug)] +pub struct Edges { + noop_edges: Vec>, + + // edges where we are testing the character in some way; for any + // given state, there should not be multiple edges with the same + // test + test_edges: Vec>, + + // fallback rules if no test_edge applies + other_edges: Vec>, +} + +#[derive(PartialEq, Eq)] +pub struct Edge { + pub from: NFAStateIndex, + pub label: L, + pub to: NFAStateIndex, +} + +pub const ACCEPT: NFAStateIndex = NFAStateIndex(0); +pub const REJECT: NFAStateIndex = NFAStateIndex(1); +pub const START: NFAStateIndex = NFAStateIndex(2); + +#[derive(Debug, PartialEq, Eq)] +pub enum NFAConstructionError { + NamedCaptures, + NonGreedy, + WordBoundary, + LineBoundary, + TextBoundary, + ByteRegex, +} + +impl NFA { + pub fn from_re(regex: &Regex) -> Result { + let mut nfa = NFA::new(); + let s0 = try!(nfa.expr(regex, ACCEPT, REJECT)); + nfa.push_edge(START, Noop, s0); + Ok(nfa) + } + + /////////////////////////////////////////////////////////////////////////// + // Public methods for querying an NFA + + pub fn edges(&self, from: NFAStateIndex) -> EdgeIterator { + let vec = L::vec(&self.edges); + let first = *L::first(&self.states[from.0]); + EdgeIterator { + edges: vec, + from: from, + index: first, + } + } + + pub fn kind(&self, from: NFAStateIndex) -> StateKind { + self.states[from.0].kind + } + + pub fn is_accepting_state(&self, from: NFAStateIndex) -> bool { + self.states[from.0].kind == StateKind::Accept + } + + pub fn is_rejecting_state(&self, from: NFAStateIndex) -> bool { + self.states[from.0].kind == StateKind::Reject + } + + /////////////////////////////////////////////////////////////////////////// + // Private methods for building an NFA + + fn new() -> NFA { + let mut nfa = NFA { + states: vec![], + edges: Edges { + noop_edges: vec![], + test_edges: vec![], + other_edges: vec![], + }, + }; + + // reserve the ACCEPT, REJECT, and START states ahead of time + assert!(nfa.new_state(StateKind::Accept) == ACCEPT); + assert!(nfa.new_state(StateKind::Reject) == REJECT); + assert!(nfa.new_state(StateKind::Neither) == START); + + // the ACCEPT state, given another token, becomes a REJECT + nfa.push_edge(ACCEPT, Other, REJECT); + + // the REJECT state loops back to itself no matter what + nfa.push_edge(REJECT, Other, REJECT); + + nfa + } + + fn new_state(&mut self, kind: StateKind) -> NFAStateIndex { + let index = self.states.len(); + + // these edge indices will be patched later by patch_edges() + self.states.push(State { + kind: kind, + first_noop_edge: usize::MAX, + first_test_edge: usize::MAX, + first_other_edge: usize::MAX, + }); + + NFAStateIndex(index) + } + + // pushes an edge: note that all outgoing edges from a particular + // state should be pushed together, so that the edge vectors are + // suitably sorted + fn push_edge(&mut self, from: NFAStateIndex, label: L, to: NFAStateIndex) { + let edge_vec = L::vec_mut(&mut self.edges); + let edge_index = edge_vec.len(); + edge_vec.push(Edge { + from: from, + label: label, + to: to, + }); + + // if this is the first edge from the `from` state, set the + // index + let first_index = L::first_mut(&mut self.states[from.0]); + if *first_index == usize::MAX { + *first_index = edge_index; + } else { + // otherwise, check that all edges are continuous + assert_eq!(edge_vec[edge_index - 1].from, from); + } + } + + fn expr( + &mut self, + expr: &Expr, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + match *expr { + Expr::Empty => Ok(accept), + + Expr::Literal { ref chars, casei } => { + // for e.g. "abc": + // [s0] -a-> [ ] -b-> [ ] -c-> [accept] + // | | | + // +--------+--------+--otherwise-> [reject] + + Ok(if casei { + chars.iter().rev().fold(accept, |s, &ch| { + let s1 = self.new_state(StateKind::Neither); + for ch1 in ch.to_lowercase().chain(ch.to_uppercase()) { + self.push_edge(s1, Test::char(ch1), s); + } + self.push_edge(s1, Other, reject); + s1 + }) + } else { + chars.iter().rev().fold(accept, |s, &ch| { + let s1 = self.new_state(StateKind::Neither); + self.push_edge(s1, Test::char(ch), s); + self.push_edge(s1, Other, reject); + s1 + }) + }) + } + + Expr::AnyCharNoNL => { + // [s0] -otherwise-> [accept] + // | + // '\n' etc + // | + // v + // [reject] + + let s0 = self.new_state(StateKind::Neither); + for nl_char in "\n\r".chars() { + self.push_edge(s0, Test::char(nl_char), reject); + } + self.push_edge(s0, Other, accept); + Ok(s0) + } + + Expr::AnyChar => { + // [s0] -otherwise-> [accept] + + let s0 = self.new_state(StateKind::Neither); + self.push_edge(s0, Other, accept); + Ok(s0) + } + + Expr::Class(ref class) => { + // [s0] --c0--> [accept] + // | | ^ + // | | ... | + // | | | + // | +---cn-------+ + // +---------------> [reject] + + let s0 = self.new_state(StateKind::Neither); + for &range in class { + let test: Test = range.into(); + self.push_edge(s0, test, accept); + } + self.push_edge(s0, Other, reject); + Ok(s0) + } + + // currently we don't support any boundaries because + // I was too lazy to code them up or think about them + Expr::StartLine | Expr::EndLine => Err(NFAConstructionError::LineBoundary), + + Expr::StartText | Expr::EndText => Err(NFAConstructionError::TextBoundary), + + Expr::WordBoundaryAscii + | Expr::NotWordBoundaryAscii + | Expr::WordBoundary + | Expr::NotWordBoundary => Err(NFAConstructionError::WordBoundary), + + // currently we treat all groups the same, whether they + // capture or not; but we don't permit named groups, + // in case we want to give them significance in the future + Expr::Group { + ref e, + i: _, + name: None, + } => self.expr(e, accept, reject), + Expr::Group { name: Some(_), .. } => Err(NFAConstructionError::NamedCaptures), + + // currently we always report the longest match possible + Expr::Repeat { greedy: false, .. } => Err(NFAConstructionError::NonGreedy), + + Expr::Repeat { + ref e, + r: Repeater::ZeroOrOne, + greedy: true, + } => self.optional_expr(e, accept, reject), + + Expr::Repeat { + ref e, + r: Repeater::ZeroOrMore, + greedy: true, + } => self.star_expr(e, accept, reject), + + Expr::Repeat { + ref e, + r: Repeater::OneOrMore, + greedy: true, + } => self.plus_expr(e, accept, reject), + + Expr::Repeat { + ref e, + r: Repeater::Range { min, max: None }, + greedy: true, + } => { + // +---min times----+ + // | | + // + // [s0] --..e..-- [s1] --..e*..--> [accept] + // | | + // | v + // +-> [reject] + + let mut s = try!(self.star_expr(e, accept, reject)); + for _ in 0..min { + s = try!(self.expr(e, s, reject)); + } + Ok(s) + } + + Expr::Repeat { + ref e, + r: + Repeater::Range { + min, + max: Some(max), + }, + greedy: true, + } => { + let mut s = accept; + for _ in min..max { + s = try!(self.optional_expr(e, s, reject)); + } + for _ in 0..min { + s = try!(self.expr(e, s, reject)); + } + Ok(s) + } + + Expr::Concat(ref exprs) => { + let mut s = accept; + for expr in exprs.iter().rev() { + s = try!(self.expr(expr, s, reject)); + } + Ok(s) + } + + Expr::Alternate(ref exprs) => { + // [s0] --exprs[0]--> [accept/reject] + // | ^ + // | | + // +----exprs[..]------+ + // | | + // | | + // +----exprs[n-1]-----+ + + let s0 = self.new_state(StateKind::Neither); + let targets: Vec<_> = try!( + exprs + .iter() + .map(|expr| self.expr(expr, accept, reject)) + .collect() + ); + + // push edges from s0 all together so they are + // adjacant in the edge array + for target in targets { + self.push_edge(s0, Noop, target); + } + Ok(s0) + } + + // If we ever support byte regexs, these + // can be merged in with the cases above. + Expr::AnyByte | Expr::AnyByteNoNL | Expr::ClassBytes(_) | Expr::LiteralBytes { .. } => { + Err(NFAConstructionError::ByteRegex) + } + } + } + + fn optional_expr( + &mut self, + expr: &Expr, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [s0] ----> [accept] + // | ^ + // v | + // [s1] --...----+ + // | + // v + // [reject] + + let s1 = try!(self.expr(expr, accept, reject)); + + let s0 = self.new_state(StateKind::Neither); + self.push_edge(s0, Noop, accept); // they might supply nothing + self.push_edge(s0, Noop, s1); + + Ok(s0) + } + + fn star_expr( + &mut self, + expr: &Expr, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [s0] ----> [accept] + // | ^ + // | | + // | +----------+ + // v | + // [s1] --...----+ + // | + // v + // [reject] + + let s0 = self.new_state(StateKind::Neither); + + let s1 = try!(self.expr(expr, s0, reject)); + + self.push_edge(s0, Noop, accept); + self.push_edge(s0, Noop, s1); + + Ok(s0) + } + + fn plus_expr( + &mut self, + expr: &Expr, + accept: NFAStateIndex, + reject: NFAStateIndex, + ) -> Result { + // [accept] + // ^ + // | + // +----------+ + // v | + // [s0] --...--[s1] + // | + // v + // [reject] + + let s1 = self.new_state(StateKind::Neither); + + let s0 = try!(self.expr(expr, s1, reject)); + + self.push_edge(s1, Noop, accept); + self.push_edge(s1, Noop, s0); + + Ok(s0) + } +} + +pub trait EdgeLabel: Sized { + fn vec_mut(nfa: &mut Edges) -> &mut Vec>; + fn vec(nfa: &Edges) -> &Vec>; + fn first_mut(state: &mut State) -> &mut usize; + fn first(state: &State) -> &usize; +} + +impl EdgeLabel for Noop { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.noop_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_noop_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.noop_edges + } + fn first(state: &State) -> &usize { + &state.first_noop_edge + } +} + +impl EdgeLabel for Other { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.other_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_other_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.other_edges + } + fn first(state: &State) -> &usize { + &state.first_other_edge + } +} + +impl EdgeLabel for Test { + fn vec_mut(nfa: &mut Edges) -> &mut Vec> { + &mut nfa.test_edges + } + fn first_mut(state: &mut State) -> &mut usize { + &mut state.first_test_edge + } + fn vec(nfa: &Edges) -> &Vec> { + &nfa.test_edges + } + fn first(state: &State) -> &usize { + &state.first_test_edge + } +} + +pub struct EdgeIterator<'nfa, L: EdgeLabel + 'nfa> { + edges: &'nfa [Edge], + from: NFAStateIndex, + index: usize, +} + +impl<'nfa, L: EdgeLabel> Iterator for EdgeIterator<'nfa, L> { + type Item = &'nfa Edge; + + fn next(&mut self) -> Option<&'nfa Edge> { + let index = self.index; + if index == usize::MAX { + return None; + } + + let next_index = index + 1; + if next_index >= self.edges.len() || self.edges[next_index].from != self.from { + self.index = usize::MAX; + } else { + self.index = next_index; + } + + Some(&self.edges[index]) + } +} + +impl Test { + pub fn char(c: char) -> Test { + let c = c as u32; + Test { + start: c, + end: c + 1, + } + } + + pub fn inclusive_range(s: char, e: char) -> Test { + Test { + start: s as u32, + end: e as u32 + 1, + } + } + + pub fn exclusive_range(s: char, e: char) -> Test { + Test { + start: s as u32, + end: e as u32, + } + } + + pub fn is_char(self) -> bool { + self.len() == 1 + } + + pub fn len(self) -> u32 { + self.end - self.start + } + + pub fn contains_u32(self, c: u32) -> bool { + c >= self.start && c < self.end + } + + pub fn contains_char(self, c: char) -> bool { + self.contains_u32(c as u32) + } + + pub fn intersects(self, r: Test) -> bool { + !self.is_empty() && !r.is_empty() + && (self.contains_u32(r.start) || r.contains_u32(self.start)) + } + + pub fn is_disjoint(self, r: Test) -> bool { + !self.intersects(r) + } + + pub fn is_empty(self) -> bool { + self.start == self.end + } +} + +impl From for Test { + fn from(range: ClassRange) -> Test { + Test::inclusive_range(range.start, range.end) + } +} + +impl Debug for Test { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + match (char::from_u32(self.start), char::from_u32(self.end)) { + (Some(start), Some(end)) => { + if self.is_char() { + if ".[]()?+*!".contains(start) { + write!(fmt, "\\{}", start) + } else { + write!(fmt, "{}", start) + } + } else { + write!(fmt, "[{:?}..{:?}]", start, end) + } + } + _ => write!(fmt, "[{:?}..{:?}]", self.start, self.end), + } + } +} + +impl Debug for NFAStateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + write!(fmt, "NFA{}", self.0) + } +} + +impl Debug for Edge { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + write!(fmt, "{:?} -{:?}-> {:?}", self.from, self.label, self.to) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/nfa/test.rs b/third_party/rust/lalrpop-snap/src/lexer/nfa/test.rs new file mode 100644 index 000000000000..f13dc8674770 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/nfa/test.rs @@ -0,0 +1,159 @@ +use lexer::nfa::{NFAConstructionError, Noop, Other, StateKind, Test, NFA}; +use lexer::nfa::interpret::interpret; +use lexer::re; + +#[test] +fn edge_iter() { + let mut nfa = NFA::new(); + let s0 = nfa.new_state(StateKind::Neither); + let s1 = nfa.new_state(StateKind::Neither); + let s2 = nfa.new_state(StateKind::Neither); + let s3 = nfa.new_state(StateKind::Neither); + + nfa.push_edge(s2, Noop, s3); + nfa.push_edge(s0, Noop, s1); + nfa.push_edge(s0, Noop, s3); + nfa.push_edge(s1, Noop, s2); + + // check that if we mixed up the indies between Noop/Other, we'd get wrong thing here + nfa.push_edge(s0, Other, s2); + + let s0_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + let s1_edges: Vec<_> = nfa.edges::(s1).map(|e| e.to).collect(); + let s2_edges: Vec<_> = nfa.edges::(s2).map(|e| e.to).collect(); + let s3_edges: Vec<_> = nfa.edges::(s3).map(|e| e.to).collect(); + + let s0_other_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + let s0_test_edges: Vec<_> = nfa.edges::(s0).map(|e| e.to).collect(); + + assert_eq!(s0_edges, &[s1, s3]); + assert_eq!(s1_edges, &[s2]); + assert_eq!(s2_edges, &[s3]); + assert_eq!(s3_edges, &[]); + + assert_eq!(s0_other_edges, &[s2]); + assert_eq!(s0_test_edges, &[]); +} + +#[test] +fn identifier_regex() { + let ident = re::parse_regex(r#"[a-zA-Z_][a-zA-Z0-9_]*"#).unwrap(); + println!("{:#?}", ident); + let nfa = NFA::from_re(&ident).unwrap(); + println!("{:#?}", nfa); + assert_eq!(interpret(&nfa, "0123"), None); + assert_eq!(interpret(&nfa, "hello0123"), Some("hello0123")); + assert_eq!(interpret(&nfa, "hello0123 abc"), Some("hello0123")); + assert_eq!(interpret(&nfa, "_0123 abc"), Some("_0123")); +} + +#[test] +fn regex_star_group() { + let ident = re::parse_regex(r#"(abc)*"#).unwrap(); + let nfa = NFA::from_re(&ident).unwrap(); + assert_eq!(interpret(&nfa, "abcabcabcab"), Some("abcabcabc")); +} + +#[test] +fn regex_number() { + let num = re::parse_regex(r#"[0-9]+"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "123"), Some("123")); +} + +#[test] +fn dot_newline() { + let num = re::parse_regex(r#"."#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "\n"), None); +} + +#[test] +fn max_range() { + let num = re::parse_regex(r#"ab{2,4}"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "a"), None); + assert_eq!(interpret(&nfa, "ab"), None); + assert_eq!(interpret(&nfa, "abb"), Some("abb")); + assert_eq!(interpret(&nfa, "abbb"), Some("abbb")); + assert_eq!(interpret(&nfa, "abbbb"), Some("abbbb")); + assert_eq!(interpret(&nfa, "abbbbb"), Some("abbbb")); + assert_eq!(interpret(&nfa, "ac"), None); +} + +#[test] +fn literal() { + let num = re::parse_regex(r#"(?i:aBCdeF)"#).unwrap(); + let nfa = NFA::from_re(&num).unwrap(); + assert_eq!(interpret(&nfa, "abcdef"), Some("abcdef")); + assert_eq!(interpret(&nfa, "AbcDEf"), Some("AbcDEf")); +} + +// Test that uses of disallowed features trigger errors +// during NFA construction: + +#[test] +fn captures() { + let num = re::parse_regex(r#"(aBCdeF)"#).unwrap(); + NFA::from_re(&num).unwrap(); // captures are ok + + let num = re::parse_regex(r#"(?:aBCdeF)"#).unwrap(); + NFA::from_re(&num).unwrap(); // non-captures are ok + + let num = re::parse_regex(r#"(?PaBCdeF)"#).unwrap(); // named captures are not + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::NamedCaptures + ); +} + +#[test] +fn line_boundaries() { + let num = re::parse_regex(r#"^aBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::TextBoundary + ); + + let num = re::parse_regex(r#"aBCdeF$"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::TextBoundary + ); +} + +#[test] +fn text_boundaries() { + let num = re::parse_regex(r#"(?m)^aBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::LineBoundary + ); + + let num = re::parse_regex(r#"(?m)aBCdeF$"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::LineBoundary + ); +} + +#[test] +fn word_boundaries() { + let num = re::parse_regex(r#"\baBCdeF"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::WordBoundary + ); + + let num = re::parse_regex(r#"aBCdeF\B"#).unwrap(); + assert_eq!( + NFA::from_re(&num).unwrap_err(), + NFAConstructionError::WordBoundary + ); +} + +#[test] +fn issue_101() { + let num = re::parse_regex(r#"(1|0?)"#).unwrap(); + NFA::from_re(&num).unwrap(); +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/re/mod.rs b/third_party/rust/lalrpop-snap/src/lexer/re/mod.rs new file mode 100644 index 000000000000..edd33389299b --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/re/mod.rs @@ -0,0 +1,23 @@ +//! A parser and representation of regular expressions. + +use regex_syntax::{self, Error, Expr}; + +#[cfg(test)] +mod test; + +pub type Regex = Expr; +pub type RegexError = Error; + +/// Convert a string literal into a parsed regular expression. +pub fn parse_literal(s: &str) -> Regex { + match parse_regex(®ex_syntax::escape(s)) { + Ok(v) => v, + Err(_) => panic!("failed to parse literal regular expression"), + } +} + +/// Parse a regular expression like `a+` etc. +pub fn parse_regex(s: &str) -> Result { + let expr = try!(Expr::parse(s)); + Ok(expr) +} diff --git a/third_party/rust/lalrpop-snap/src/lexer/re/test.rs b/third_party/rust/lalrpop-snap/src/lexer/re/test.rs new file mode 100644 index 000000000000..5c416dc2570e --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lexer/re/test.rs @@ -0,0 +1,11 @@ +use super::*; + +#[test] +fn parse_unclosed_group() { + parse_regex(r"(123").unwrap_err(); +} + +#[test] +fn alt_oom() { + parse_regex(r"(%%|[^%])+").unwrap(); +} diff --git a/third_party/rust/lalrpop-snap/src/lib.rs b/third_party/rust/lalrpop-snap/src/lib.rs new file mode 100644 index 000000000000..682e8fe6d428 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lib.rs @@ -0,0 +1,56 @@ +// Need this for rusty_peg +#![recursion_limit = "256"] +// I hate this lint. +#![allow(unused_parens)] +// The builtin tests don't cover the CLI and so forth, and it's just +// too darn annoying to try and make them do so. +#![cfg_attr(test, allow(dead_code))] + +extern crate ascii_canvas; +extern crate atty; +extern crate bit_set; +extern crate diff; +extern crate ena; +extern crate itertools; +extern crate lalrpop_util; +extern crate petgraph; +extern crate regex; +extern crate regex_syntax; +extern crate string_cache; +extern crate term; +extern crate unicode_xid; + +#[cfg(test)] +extern crate rand; + +// hoist the modules that define macros up earlier +#[macro_use] +mod rust; +#[macro_use] +mod log; + +mod api; +mod build; +mod collections; +mod file_text; +mod grammar; +mod lexer; +mod lr1; +mod message; +mod normalize; +mod parser; +mod kernel_set; +mod session; +mod tls; +mod tok; +mod util; + +#[cfg(test)] +mod generate; +#[cfg(test)] +mod test_util; + +pub use api::Configuration; +pub use api::process_root; +pub use api::process_root_unconditionally; +use ascii_canvas::style; diff --git a/third_party/rust/lalrpop-snap/src/log.rs b/third_party/rust/lalrpop-snap/src/log.rs new file mode 100644 index 000000000000..9d60c8f756fe --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/log.rs @@ -0,0 +1,64 @@ +#[derive(Clone)] +pub struct Log { + level: Level, +} + +#[derive(Clone, PartialOrd, Ord, PartialEq, Eq)] +pub enum Level { + /// No updates unless an error arises. + Taciturn, + + /// Timing and minimal progress. + Informative, + + /// More details, but still stuff an end-user is likely to understand. + Verbose, + + /// Everything you could ever want and then some more. + Debug, +} + +impl Log { + pub fn new(level: Level) -> Log { + Log { level: level } + } + + pub fn set_level(&mut self, level: Level) { + self.level = level; + } + + pub fn log(&self, level: Level, message: M) + where + M: FnOnce() -> String, + { + if self.level >= level { + println!("{}", message()); + } + } +} + +macro_rules! log { + ($session:expr, $level:ident, $($args:expr),*) => { + $session.log(::log::Level::$level, || ::std::fmt::format(format_args!($($args),*))) + } +} + +macro_rules! debug { + ($($args:expr),*) => { + log!(::tls::Tls::session(), Debug, $($args),*) + } +} + +macro_rules! profile { + ($session:expr, $phase_name:expr, $action:expr) => { + { + log!($session, Verbose, "Phase `{}` begun", $phase_name); + let time_stamp = ::std::time::Instant::now(); + let result = $action; + let elapsed = time_stamp.elapsed(); + log!($session, Verbose, "Phase `{}` completed in {} seconds", + $phase_name, elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1000_000_000.0); + result + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/build/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/build/mod.rs new file mode 100644 index 000000000000..7d2cc0d8f552 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/build/mod.rs @@ -0,0 +1,357 @@ +//! LR(1) state construction algorithm. + +use collections::{map, Multimap}; +use kernel_set; +use grammar::repr::*; +use lr1::core::*; +use lr1::first; +use lr1::lane_table::*; +use lr1::lookahead::*; +use std::rc::Rc; +use std::env; +use tls::Tls; + +#[cfg(test)] +mod test; + +fn build_lr1_states_legacy<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + let eof = TokenSet::eof(); + let mut lr1: LR<'grammar, TokenSet> = LR::new(grammar, start, eof); + lr1.set_permit_early_stop(true); + lr1.build_states() +} + +type ConstructionFunction<'grammar> = + fn(&'grammar Grammar, NonterminalString) -> LR1Result<'grammar>; + +pub fn use_lane_table() -> bool { + match env::var("LALRPOP_LANE_TABLE") { + Ok(ref s) => s != "disabled", + _ => true, + } +} + +pub fn build_lr1_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + let (method_name, method_fn) = if use_lane_table() { + ("lane", build_lane_table_states as ConstructionFunction) + } else { + ("legacy", build_lr1_states_legacy as ConstructionFunction) + }; + + profile! { + &Tls::session(), + format!("LR(1) state construction ({})", method_name), + { + method_fn(grammar, start) + } + } +} + +pub fn build_lr0_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> Result>, LR0TableConstructionError<'grammar>> { + let lr1 = LR::new(grammar, start, Nil); + lr1.build_states() +} + +pub struct LR<'grammar, L: LookaheadBuild> { + grammar: &'grammar Grammar, + first_sets: first::FirstSets, + start_nt: NonterminalString, + start_lookahead: L, + permit_early_stop: bool, +} + +impl<'grammar, L: LookaheadBuild> LR<'grammar, L> { + fn new(grammar: &'grammar Grammar, start_nt: NonterminalString, start_lookahead: L) -> Self { + LR { + grammar: grammar, + first_sets: first::FirstSets::new(grammar), + start_nt: start_nt, + start_lookahead: start_lookahead, + permit_early_stop: false, + } + } + + fn set_permit_early_stop(&mut self, v: bool) { + self.permit_early_stop = v; + } + + fn build_states(&self) -> Result>, TableConstructionError<'grammar, L>> { + let session = Tls::session(); + let mut kernel_set = kernel_set::KernelSet::new(); + let mut states = vec![]; + let mut conflicts = vec![]; + + // create the starting state + kernel_set.add_state(Kernel::start(self.items( + &self.start_nt, + 0, + &self.start_lookahead, + ))); + + while let Some(Kernel { items: seed_items }) = kernel_set.next() { + let items = self.transitive_closure(seed_items); + let index = StateIndex(states.len()); + + if index.0 % 5000 == 0 && index.0 > 0 { + log!(session, Verbose, "{} states created so far.", index.0); + } + + let mut this_state = State { + index: index, + items: items.clone(), + shifts: map(), + reductions: vec![], + gotos: map(), + }; + + // group the items that we can transition into by shifting + // over a term or nonterm + let transitions: Multimap, L>> = items + .vec + .iter() + .filter_map(|item| item.shifted_item()) + .map( + |( + symbol, + Item { + production, + index, + lookahead, + }, + )| { (symbol, (Item::lr0(production, index), lookahead)) }, + ) + .collect(); + + for (symbol, shifted_items) in transitions.into_iter() { + let shifted_items: Vec> = shifted_items + .into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + + // Not entirely obvious: if the original set of items + // is sorted to begin with (and it is), then this new + // set of shifted items is *also* sorted. This is + // because it is produced from the old items by simply + // incrementing the index by 1. + let next_state = kernel_set.add_state(Kernel::shifted(shifted_items)); + + match symbol { + Symbol::Terminal(s) => { + let prev = this_state.shifts.insert(s, next_state); + assert!(prev.is_none()); // cannot have a shift/shift conflict + } + + Symbol::Nonterminal(s) => { + let prev = this_state.gotos.insert(s, next_state); + assert!(prev.is_none()); + } + } + } + + // finally, consider the reductions + for item in items.vec.iter().filter(|i| i.can_reduce()) { + this_state + .reductions + .push((item.lookahead.clone(), item.production)); + } + + // check for shift-reduce conflicts (reduce-reduce detected above) + conflicts.extend(L::conflicts(&this_state)); + + // extract a new state + states.push(this_state); + + if self.permit_early_stop && session.stop_after(conflicts.len()) { + log!( + session, + Verbose, + "{} conflicts encountered, stopping.", + conflicts.len() + ); + break; + } + } + + if !conflicts.is_empty() { + Err(TableConstructionError { + states: states, + conflicts: conflicts, + }) + } else { + Ok(states) + } + } + + fn items(&self, id: &NonterminalString, index: usize, lookahead: &L) -> Vec> { + self.grammar + .productions_for(id) + .iter() + .map(|production| { + debug_assert!(index <= production.symbols.len()); + Item { + production: production, + index: index, + lookahead: lookahead.clone(), + } + }) + .collect() + } + + // expands `state` with epsilon moves + fn transitive_closure(&self, items: Vec>) -> Items<'grammar, L> { + let mut stack: Vec> = items.iter().map(|item| item.to_lr0()).collect(); + let mut map: Multimap, L> = items + .into_iter() + .map(|item| (item.to_lr0(), item.lookahead)) + .collect(); + + while let Some(item) = stack.pop() { + let lookahead = map.get(&item).unwrap().clone(); + + let shift_symbol = item.shift_symbol(); + + // Check whether this is an item where the cursor + // is resting on a non-terminal: + // + // I = ... (*) X z... [lookahead] + // + // The `nt` will be X and the `remainder` will be `z...`. + let (nt, remainder) = match shift_symbol { + None => continue, // requires a reduce + Some((Symbol::Terminal(_), _)) => { + continue; // requires a shift + } + Some((Symbol::Nonterminal(nt), remainder)) => (nt, remainder), + }; + + // In that case, for each production of `X`, we are also + // in a state where the cursor rests at the start of that production: + // + // X = (*) a... [lookahead'] + // X = (*) b... [lookahead'] + // + // Here `lookahead'` is computed based on the `remainder` and our + // `lookahead`. In LR1 at least, it is the union of: + // + // (a) FIRST(remainder) + // (b) if remainder may match epsilon, also our lookahead. + for new_item in L::epsilon_moves(self, &nt, remainder, &lookahead) { + let new_item0 = new_item.to_lr0(); + if map.push(new_item0, new_item.lookahead) { + stack.push(new_item0); + } + } + } + + let final_items = map.into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + + Items { + vec: Rc::new(final_items), + } + } +} + +/// Except for the initial state, the kernel sets always contain +/// a set of "seed" items where something has been pushed (that is, +/// index > 0). In other words, items like this: +/// +/// A = ...p (*) ... +/// +/// where ...p is non-empty. We now have to expand to include any +/// epsilon moves: +/// +/// A = ... (*) B ... +/// B = (*) ... // added by transitive_closure algorithm +/// +/// But note that the state is completely identified by its +/// kernel set: the same kernel sets always expand to the +/// same transitive closures, and different kernel sets +/// always expand to different transitive closures. The +/// first point is obvious, but the latter point follows +/// because the transitive closure algorithm only adds +/// items where `index == 0`, and hence it can never add an +/// item found in a kernel set. +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +struct Kernel<'grammar, L: LookaheadBuild> { + items: Vec>, +} + +impl<'grammar, L: LookaheadBuild> Kernel<'grammar, L> { + pub fn start(items: Vec>) -> Kernel<'grammar, L> { + // In start state, kernel should have only items with `index == 0`. + debug_assert!(items.iter().all(|item| item.index == 0)); + Kernel { items: items } + } + + pub fn shifted(items: Vec>) -> Kernel<'grammar, L> { + // Assert that this kernel consists only of shifted items + // where `index > 0`. This assertion could cost real time to + // check so only do it in debug mode. + debug_assert!(items.iter().all(|item| item.index > 0)); + Kernel { items: items } + } +} + +impl<'grammar, L: LookaheadBuild> kernel_set::Kernel for Kernel<'grammar, L> { + type Index = StateIndex; + + fn index(c: usize) -> StateIndex { + StateIndex(c) + } +} + +pub trait LookaheadBuild: Lookahead { + // Given that there exists an item + // + // X = ... (*) Y ...s [L] + // + // where `nt` is `Y`, `remainder` is `...s`, and `lookahead` is + // `L`, computes the new items resulting from epsilon moves (if + // any). The technique of doing this will depend on the amount of + // lookahead. + // + // For example, if we have an LR0 item, then for each `Y = ...` + // production, we just add an `Y = (*) ...` item. But for LR1 + // items, we have to add multiple items where we consider the + // lookahead from `FIRST(...s, L)`. + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + remainder: &[Symbol], + lookahead: &Self, + ) -> Vec>; +} + +impl LookaheadBuild for Nil { + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + _remainder: &[Symbol], + lookahead: &Nil, + ) -> Vec> { + lr.items(nt, 0, &lookahead) + } +} + +impl LookaheadBuild for TokenSet { + fn epsilon_moves<'grammar>( + lr: &LR<'grammar, Self>, + nt: &NonterminalString, + remainder: &[Symbol], + lookahead: &Self, + ) -> Vec> { + let first_set = lr.first_sets.first1(remainder, lookahead); + lr.items(nt, 0, &first_set) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/build/test.rs b/third_party/rust/lalrpop-snap/src/lr1/build/test.rs new file mode 100644 index 000000000000..4e3a6cfd7904 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/build/test.rs @@ -0,0 +1,354 @@ +use string_cache::DefaultAtom as Atom; +use generate; +use grammar::repr::*; +use test_util::{compare, expect_debug, normalized_grammar}; +use lr1::core::*; +use lr1::interpret::interpret; +use lr1::lookahead::Token; +use lr1::lookahead::Token::EOF; +use lr1::lookahead::TokenSet; +use lr1::tls::Lr1Tls; +use tls::Tls; + +use super::{use_lane_table, build_lr0_states, build_lr1_states, LR}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +const ITERATIONS: usize = 22; + +fn random_test<'g>(grammar: &Grammar, states: &'g [LR1State<'g>], start_symbol: NonterminalString) { + for i in 0..ITERATIONS { + let input_tree = generate::random_parse_tree(grammar, start_symbol.clone()); + let output_tree = interpret(&states, input_tree.terminals()).unwrap(); + + println!("test {}", i); + println!("input_tree = {}", input_tree); + println!("output_tree = {}", output_tree); + + compare(output_tree, input_tree); + } +} + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +fn items<'g>(grammar: &'g Grammar, nonterminal: &str, index: usize, la: Token) -> LR1Items<'g> { + let set = TokenSet::from(la); + let lr1: LR = LR::new(&grammar, nt(nonterminal), set.clone()); + let items = lr1.transitive_closure(lr1.items(&nt(nonterminal), index, &set)); + items +} + +#[test] +fn start_state() { + let grammar = normalized_grammar( + r#" +grammar; + extern { enum Tok { "C" => .., "D" => .. } } + A = B "C"; + B: Option = { + "D" => Some(1), + () => None + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let items = items(&grammar, "A", 0, EOF); + expect_debug( + items.vec, + r#"[ + A = (*) B "C" [EOF], + B = (*) ["C"], + B = (*) "D" ["C"] +]"#, + ); +} + +#[test] +fn start_state_1() { + let grammar = normalized_grammar( + r#" +grammar; +extern { enum Tok { "B1" => .., "C1" => .. } } +A = B C; +B: Option = { + "B1" => Some(1), + () => None +}; +C: Option = { + "C1" => Some(1), + () => None +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + expect_debug( + items(&grammar, "A", 0, EOF).vec, + r#"[ + A = (*) B C [EOF], + B = (*) ["C1", EOF], + B = (*) "B1" ["C1", EOF] +]"#, + ); + + expect_debug( + items(&grammar, "A", 1, EOF).vec, + r#"[ + A = B (*) C [EOF], + C = (*) [EOF], + C = (*) "C1" [EOF] +]"#, + ); +} + +#[test] +fn expr_grammar1() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } + + S: () = + E => (); + + E: () = { + E "-" T => (), + T => () + }; + + T: () = { + "N" => (), + "(" E ")" => () + }; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + // for now, just test that process does not result in an error + // and yields expected number of states. + let states = build_lr1_states(&grammar, nt("S")).unwrap(); + println!("{:#?}", states); + assert_eq!(states.len(), if use_lane_table() { 9 } else { 16 }); + + // execute it on some sample inputs. + let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); + assert_eq!( + &format!("{}", tree)[..], + r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# + ); + + // incomplete: + assert!(interpret(&states, tokens!["N", "-", "(", "N", "-", "N"]).is_err()); + + // incomplete: + assert!(interpret(&states, tokens!["N", "-"]).is_err()); + + // unexpected character: + assert!(interpret(&states, tokens!["N", "-", ")", "N", "-", "N", "("]).is_err()); + + // parens first: + let tree = interpret(&states, tokens!["(", "N", "-", "N", ")", "-", "N"]).unwrap(); + println!("{}", tree); + assert_eq!( + &format!("{}", tree)[..], + r#"[S: [E: [E: [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]], "-", [T: "N"]]]"# + ); + + // run some random tests + random_test(&grammar, &states, nt("S")); +} + +#[test] +fn shift_reduce_conflict1() { + let _tls = Tls::test(); + + // This grammar gets a shift-reduce conflict because if the input + // is "&" (*) "L", then we see two possibilities, and we must decide + // between them: + // + // "&" (*) "L" E + // | | | + // +-------+--| + // | + // E + // + // or + // + // "&" (*) "L" + // | | + // | OPT_L E + // | | | + // +---+---+----+ + // | + // E + // + // to some extent this may be a false conflict, in that inlined + // rules would address it, but it's an interesting one for + // producing a useful error message. + + let grammar = normalized_grammar( + r#" + grammar; + extern { enum Tok { "L" => .., "&" => .., } } + E: () = { + "L", + "&" OPT_L E + }; + OPT_L: () = { + (), + "L" + }; + "#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + assert!(build_lr1_states(&grammar, nt("E")).is_err()); +} + +/// One of the few grammars that IS LR(0). +#[test] +fn lr0_expr_grammar_with_explicit_eof() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +S: () = E "$"; + +E: () = { + E "-" T, + T, +}; + +T: () = { + "N", + "(" E ")", +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + // for now, just test that process does not result in an error + // and yields expected number of states. + let states = build_lr0_states(&grammar, nt("S")).unwrap(); + assert_eq!(states.len(), 10); +} + +/// Without the artifical '$', grammar is not LR(0). +#[test] +fn lr0_expr_grammar_with_implicit_eof() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +S: () = E; + +E: () = { + E "-" T, + T, +}; + +T: () = { + "N", + "(" E ")", +}; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + build_lr0_states(&grammar, nt("S")).unwrap_err(); +} + +/// When we moved to storing items as (lr0 -> TokenSet) pairs, a bug +/// in the transitive closure routine could cause us to have `(Foo, +/// S0)` and `(Foo, S1)` as distinct items instead of `(Foo, S0|S1)`. +#[test] +fn issue_144() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r##" +grammar; + +pub ForeignItem: () = { + AttrsAndVis "item_foreign_fn", + AttrsAndVis "unsafe" "item_foreign_fn", +}; + +AttrsAndVis: () = { + MaybeOuterAttrs visibility, +}; + +MaybeOuterAttrs: () = { + OuterAttrs, + (), +}; + +visibility: () = { + "pub", + (), +}; + +OuterAttrs: () = { + OuterAttr, + OuterAttrs OuterAttr, +}; + +OuterAttr: () = { + "#" "[" "]", +}; + +Ident: () = { + "IDENT", +}; + +ty: () = { + "ty" +}; +"##, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + build_lr1_states(&grammar, nt("ForeignItem")).unwrap(); +} + +// Not sure if this is the right spot +#[test] +fn match_grammar() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" +grammar; + +match { + r"(?i)select" => SELECT +} else { + _ +} + +pub Query = SELECT r"[a-z]+"; +"#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + let states = build_lr0_states(&grammar, nt("Query")).expect("build states"); + println!("states: {:?}", states); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/build_lalr/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/build_lalr/mod.rs new file mode 100644 index 000000000000..a9060c6a5f01 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/build_lalr/mod.rs @@ -0,0 +1,163 @@ +//! Mega naive LALR(1) generation algorithm. + +use collections::{map, Map, Multimap}; +use itertools::Itertools; +use lr1::build; +use lr1::core::*; +use lr1::lookahead::*; +use grammar::repr::*; +use std::rc::Rc; +use std::mem; +use tls::Tls; + +#[cfg(test)] +mod test; + +// Intermediate LALR(1) state. Identical to an LR(1) state, but that +// the items can be pushed to. We initially create these with an empty +// set of actions, as well. +struct LALR1State<'grammar> { + pub index: StateIndex, + pub items: Vec>, + pub shifts: Map, + pub reductions: Multimap<&'grammar Production, TokenSet>, + pub gotos: Map, +} + +pub fn build_lalr_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + // First build the LR(1) states + let lr_states = try!(build::build_lr1_states(grammar, start)); + + // With lane table, there is no reason to do state collapse + // for LALR. In fact, LALR is pointless! + if build::use_lane_table() { + println!("Warning: Now that the new lane-table algorithm is the default,"); + println!(" #[lalr] mode has no effect and can be removed."); + return Ok(lr_states); + } + + profile! { + &Tls::session(), + "LALR(1) state collapse", + collapse_to_lalr_states(&lr_states) + } +} + +pub fn collapse_to_lalr_states<'grammar>(lr_states: &[LR1State<'grammar>]) -> LR1Result<'grammar> { + // Now compress them. This vector stores, for each state, the + // LALR(1) state to which we will remap it. + let mut remap: Vec<_> = (0..lr_states.len()).map(|_| StateIndex(0)).collect(); + let mut lalr1_map: Map, StateIndex> = map(); + let mut lalr1_states: Vec = vec![]; + + for (lr1_index, lr1_state) in lr_states.iter().enumerate() { + let lr0_kernel: Vec<_> = lr1_state + .items + .vec + .iter() + .map(|item| item.to_lr0()) + .dedup() + .collect(); + + let lalr1_index = *lalr1_map.entry(lr0_kernel).or_insert_with(|| { + let index = StateIndex(lalr1_states.len()); + lalr1_states.push(LALR1State { + index: index, + items: vec![], + shifts: map(), + reductions: Multimap::new(), + gotos: map(), + }); + index + }); + + lalr1_states[lalr1_index.0] + .items + .extend(lr1_state.items.vec.iter().cloned()); + + remap[lr1_index] = lalr1_index; + } + + // The reduction process can leave us with multiple + // overlapping LR(0) items, whose lookaheads must be + // unioned. e.g. we may now have: + // + // X = "(" (*) ")" ["Foo"] + // X = "(" (*) ")" ["Bar"] + // + // which we will convert to: + // + // X = "(" (*) ")" ["Foo", "Bar"] + for lalr1_state in &mut lalr1_states { + let items = mem::replace(&mut lalr1_state.items, vec![]); + + let items: Multimap, TokenSet> = items + .into_iter() + .map( + |Item { + production, + index, + lookahead, + }| { (Item::lr0(production, index), lookahead) }, + ) + .collect(); + + lalr1_state.items = items + .into_iter() + .map(|(lr0_item, lookahead)| lr0_item.with_lookahead(lookahead)) + .collect(); + } + + // Now that items are fully built, create the actions + for (lr1_index, lr1_state) in lr_states.iter().enumerate() { + let lalr1_index = remap[lr1_index]; + let lalr1_state = &mut lalr1_states[lalr1_index.0]; + + for (terminal, &lr1_state) in &lr1_state.shifts { + let target_state = remap[lr1_state.0]; + let prev = lalr1_state.shifts.insert(terminal.clone(), target_state); + assert!(prev.unwrap_or(target_state) == target_state); + } + + for (nt, lr1_state) in &lr1_state.gotos { + let target_state = remap[lr1_state.0]; + let prev = lalr1_state.gotos.insert(nt.clone(), target_state); + assert!(prev.unwrap_or(target_state) == target_state); // as above + } + + for &(ref token_set, production) in &lr1_state.reductions { + lalr1_state.reductions.push(production, token_set.clone()); + } + } + + // Finally, create the new states and detect conflicts + let lr1_states: Vec<_> = lalr1_states + .into_iter() + .map(|lr| State { + index: lr.index, + items: Items { + vec: Rc::new(lr.items), + }, + shifts: lr.shifts, + reductions: lr.reductions.into_iter().map(|(p, ts)| (ts, p)).collect(), + gotos: lr.gotos, + }) + .collect(); + + let conflicts: Vec<_> = lr1_states + .iter() + .flat_map(|s| TokenSet::conflicts(s)) + .collect(); + + if !conflicts.is_empty() { + Err(TableConstructionError { + states: lr1_states, + conflicts: conflicts, + }) + } else { + Ok(lr1_states) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/build_lalr/test.rs b/third_party/rust/lalrpop-snap/src/lr1/build_lalr/test.rs new file mode 100644 index 000000000000..4fecb5d38df0 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/build_lalr/test.rs @@ -0,0 +1,49 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use tls::Tls; +use super::build_lalr_states; +use super::super::interpret::interpret; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +#[test] +fn figure9_23() { + let _tls = Tls::test(); + + let grammar = normalized_grammar( + r#" + grammar; + extern { enum Tok { "-" => .., "N" => .., "(" => .., ")" => .. } } + S: () = E => (); + E: () = { + E "-" T => (), + T => () + }; + T: () = { + "N" => (), + "(" E ")" => () + }; + "#, + ); + + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + + let states = build_lalr_states(&grammar, nt("S")).unwrap(); + println!("{:#?}", states); + + let tree = interpret(&states, tokens!["N", "-", "(", "N", "-", "N", ")"]).unwrap(); + assert_eq!( + &format!("{:?}", tree)[..], + r#"[S: [E: [E: [T: "N"]], "-", [T: "(", [E: [E: [T: "N"]], "-", [T: "N"]], ")"]]]"# + ); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/codegen/ascent.rs b/third_party/rust/lalrpop-snap/src/lr1/codegen/ascent.rs new file mode 100644 index 000000000000..ff92d90c3f8b --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/codegen/ascent.rs @@ -0,0 +1,1019 @@ +//! A compiler from an LR(1) table to a [recursive ascent] parser. +//! +//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser + +use collections::{Multimap, Set}; +use grammar::parse_tree::WhereClause; +use grammar::repr::{Grammar, NonterminalString, Production, Symbol, TerminalString, TypeParameter, + TypeRepr, Visibility}; +use lr1::core::*; +use lr1::lookahead::Token; +use lr1::state_graph::StateGraph; +use rust::RustWrite; +use std::io::{self, Write}; +use tls::Tls; +use util::{Escape, Sep}; + +use super::base::CodeGenerator; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + action_module: &str, + out: &mut RustWrite, +) -> io::Result<()> { + let graph = StateGraph::new(&states); + let mut ascent = CodeGenerator::new_ascent( + grammar, + user_start_symbol, + start_symbol, + &graph, + states, + action_module, + out, + ); + ascent.write() +} + +struct RecursiveAscent<'ascent, 'grammar> { + graph: &'ascent StateGraph, + + /// for each state, the set of symbols that it will require for + /// input + state_inputs: Vec>, + + /// type parameters for the `Nonterminal` type + nonterminal_type_params: Vec, + + nonterminal_where_clauses: Vec>, +} + +/// Tracks the suffix of the stack (that is, top-most elements) that any +/// particular state is aware of. We break the suffix into two parts: +/// optional and fixed, which always look like this: +/// +/// ``` +/// ... A B C X Y Z +/// ~~~ ~~~~~ ~~~~~ +/// | | | +/// | | Fixed (top of the stack) +/// | | +/// | Optional (will be popped after the fixed portion) +/// | +/// Prefix (stuff we don't know about that is also on the stack +/// ``` +/// +/// The idea of an "optional" member is not that it may or may not be +/// on the stack. The entire suffix will always be on the stack. An +/// *optional* member is one that *we* may or may not *consume*. So +/// the above stack suffix could occur given a state with items like: +/// +/// ``` +/// NT1 = A B C X Y Z (*) "." +/// NT2 = X Y Z (*) "," +/// ``` +/// +/// Depending on what comes next, if we reduce NT1, we will consume +/// all six symbols, but if we reduce NT2, we will only reduce three. +#[derive(Copy, Clone, Debug)] +struct StackSuffix<'grammar> { + /// all symbols that are known to be on the stack (optional + fixed). + all: &'grammar [Symbol], + + /// optional symbols will be consumed by *some* reductions in this + /// state, but not all + len_optional: usize, +} + +impl<'grammar> StackSuffix<'grammar> { + fn len(&self) -> usize { + self.all.len() + } + + /// returns the (optional, fixed) -- number of optional + /// items in stack prefix and numer of fixed + fn optional_fixed_lens(&self) -> (usize, usize) { + (self.len_optional, self.len() - self.len_optional) + } + + fn is_not_empty(&self) -> bool { + self.len() > 0 + } + + fn optional(&self) -> &'grammar [Symbol] { + &self.all[..self.len_optional] + } + + fn fixed(&self) -> &'grammar [Symbol] { + &self.all[self.len_optional..] + } +} + +impl<'ascent, 'grammar, W: Write> + CodeGenerator<'ascent, 'grammar, W, RecursiveAscent<'ascent, 'grammar>> +{ + fn new_ascent( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + graph: &'ascent StateGraph, + states: &'ascent [LR1State<'grammar>], + action_module: &str, + out: &'ascent mut RustWrite, + ) -> Self { + // The nonterminal type needs to be parameterized by all the + // type parameters that actually appear in the types of + // nonterminals. We can't just use *all* type parameters + // because that would leave unused lifetime/type parameters in + // some cases. + let referenced_ty_params: Set = grammar + .types + .nonterminal_types() + .into_iter() + .flat_map(|t| t.referenced()) + .collect(); + + let nonterminal_type_params: Vec<_> = grammar + .type_parameters + .iter() + .filter(|t| referenced_ty_params.contains(t)) + .cloned() + .collect(); + + let mut referenced_where_clauses = Set::new(); + for wc in &grammar.where_clauses { + wc.map(|ty| { + if ty.referenced() + .iter() + .any(|p| nonterminal_type_params.contains(p)) + { + referenced_where_clauses.insert(wc.clone()); + } + }); + } + + let nonterminal_where_clauses: Vec<_> = grammar + .where_clauses + .iter() + .filter(|wc| referenced_where_clauses.contains(wc)) + .cloned() + .collect(); + + let state_inputs = states + .iter() + .map(|state| Self::state_input_for(state)) + .collect(); + + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + false, + action_module, + RecursiveAscent { + graph: graph, + state_inputs: state_inputs, + nonterminal_type_params: nonterminal_type_params, + nonterminal_where_clauses: nonterminal_where_clauses, + }, + ) + } + + /// Compute the stack suffix that the state expects on entry. + fn state_input_for(state: &'ascent LR1State<'grammar>) -> StackSuffix<'grammar> { + let max_prefix = state.max_prefix(); + let will_pop = state.will_pop(); + StackSuffix { + all: max_prefix, + len_optional: max_prefix.len() - will_pop.len(), + } + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_start_fn()); + rust!(this.out, ""); + try!(this.write_return_type_defn()); + for i in 0..this.states.len() { + try!(this.write_state_fn(StateIndex(i))); + } + Ok(()) + }) + } + + fn write_return_type_defn(&mut self) -> io::Result<()> { + // sometimes some of the variants are not used, particularly + // if we are generating multiple parsers from the same file: + rust!(self.out, "#[allow(dead_code)]"); + rust!( + self.out, + "pub enum {}Nonterminal<{}>", + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params) + ); + + if !self.custom.nonterminal_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.nonterminal_where_clauses) + ); + } + + rust!(self.out, " {{"); + + // make an enum with one variant per nonterminal; I considered + // making different enums per state, but this would mean we + // have to unwrap and rewrap as we pass up the stack, which + // seems silly + for ref nt in self.grammar.nonterminals.keys() { + let ty = self.types + .spanned_type(self.types.nonterminal_type(nt).clone()); + rust!(self.out, "{}({}),", Escape(nt), ty); + } + + rust!(self.out, "}}"); + Ok(()) + } + + // Generates a function `parse_Foo` that will parse an entire + // input as `Foo`. An error is reported if the entire input is not + // consumed. + fn write_start_fn(&mut self) -> io::Result<()> { + let phantom_data = self.phantom_data_expr(); + try!(self.start_parser_fn()); + try!(self.define_tokens()); + + try!(self.next_token("lookahead", "tokens")); + rust!( + self.out, + "match try!({}state0({}&mut {}tokens, {}lookahead, {})) {{", + self.prefix, + self.grammar.user_parameter_refs(), + self.prefix, + self.prefix, + phantom_data + ); + + // extra tokens? + rust!(self.out, "(Some({}lookahead), _) => {{", self.prefix); + rust!( + self.out, + "Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }})", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + + // otherwise, we expect to see only the goal terminal + rust!( + self.out, + "(None, {}Nonterminal::{}((_, {}nt, _))) => {{", + self.prefix, + Escape(&self.start_symbol), + self.prefix + ); + rust!(self.out, "Ok({}nt)", self.prefix); + rust!(self.out, "}}"); + + // nothing else should be possible + rust!(self.out, "_ => unreachable!(),"); + rust!(self.out, "}}"); + + self.end_parser_fn() + } + + /// Writes the function that corresponds to a given state. This + /// function takes arguments corresponding to the stack slots of + /// the LR(1) machine. It consumes tokens and handles reduces + /// etc. It will return once it has popped at least one symbol off + /// of the LR stack. + /// + /// Note that for states which have a custom kind, this function + /// emits nothing at all other than a possible comment explaining + /// the state. + fn write_state_fn(&mut self, this_index: StateIndex) -> io::Result<()> { + let this_state = &self.states[this_index.0]; + let inputs = self.custom.state_inputs[this_index.0]; + + rust!(self.out, ""); + + // Leave a comment explaining what this state is. + if Tls::session().emit_comments { + rust!(self.out, "// State {}", this_index.0); + rust!(self.out, "// AllInputs = {:?}", inputs.all); + rust!(self.out, "// OptionalInputs = {:?}", inputs.optional()); + rust!(self.out, "// FixedInputs = {:?}", inputs.fixed()); + rust!( + self.out, + "// WillPushLen = {:?}", + this_state.will_push().len() + ); + rust!(self.out, "// WillPush = {:?}", this_state.will_push()); + rust!( + self.out, + "// WillProduce = {:?}", + this_state.will_produce() + ); + rust!(self.out, "//"); + for item in this_state.items.vec.iter() { + rust!(self.out, "// {:?}", item); + } + rust!(self.out, "//"); + for (terminal, action) in &this_state.shifts { + rust!(self.out, "// {:?} -> {:?}", terminal, action); + } + for &(ref tokens, action) in &this_state.reductions { + rust!(self.out, "// {:?} -> {:?}", tokens, action); + } + rust!(self.out, "//"); + for (nt, state) in &this_state.gotos { + rust!(self.out, "// {:?} -> {:?}", nt, state); + } + } + + try!(self.emit_state_fn_header("state", this_index.0, inputs)); + + // possibly move some fixed inputs into optional stack slots + let stack_suffix = try!(self.adjust_inputs(this_index, inputs)); + + // set to true if goto actions are worth generating + let mut fallthrough = false; + + rust!(self.out, "match {}lookahead {{", self.prefix); + + // first emit shifts: + for (terminal, &next_index) in &this_state.shifts { + let sym_name = format!("{}sym{}", self.prefix, inputs.len()); + try!(self.consume_terminal(terminal, sym_name)); + + // transition to the new state + if try!(self.transition("result", stack_suffix, next_index, &["tokens"])) { + fallthrough = true; + } + + rust!(self.out, "}}"); + } + + // now emit reduces. It frequently happens that many tokens + // trigger the same reduction, so group these by the + // production that we are going to be reducing. + let reductions: Multimap<_, Vec<_>> = this_state + .reductions + .iter() + .flat_map(|&(ref tokens, production)| tokens.iter().map(move |t| (production, t))) + .collect(); + for (production, tokens) in reductions { + for (index, token) in tokens.iter().enumerate() { + let pattern = match *token { + Token::Terminal(ref s) => format!("Some({})", self.match_terminal_pattern(s)), + Token::Error => { + panic!("Error recovery is not implemented for recursive ascent parsers") + } + Token::EOF => format!("None"), + }; + if index < tokens.len() - 1 { + rust!(self.out, "{} |", pattern); + } else { + rust!(self.out, "{} => {{", pattern); + } + } + + try!(self.emit_reduce_action("result", stack_suffix, production)); + + if production.symbols.len() > 0 { + // if we popped anything off of the stack, then this frame is done + rust!(self.out, "return Ok({}result);", self.prefix); + } else { + fallthrough = true; + } + + rust!(self.out, "}}"); + } + + // if we hit this, the next token is not recognized, so generate an error + rust!(self.out, "_ => {{"); + // The terminals which would have resulted in a successful parse in this state + let successful_terminals = self.grammar.terminals.all.iter().filter(|&terminal| { + this_state.shifts.contains_key(terminal) + || this_state + .reductions + .iter() + .any(|&(ref t, _)| t.contains(&Token::Terminal(terminal.clone()))) + }); + rust!( + self.out, + "return Err({}lalrpop_util::ParseError::UnrecognizedToken {{", + self.prefix + ); + rust!(self.out, "token: {}lookahead,", self.prefix); + rust!(self.out, "expected: vec!["); + for terminal in successful_terminals { + rust!(self.out, "r###\"{}\"###.to_string(),", terminal); + } + rust!(self.out, "]"); + rust!(self.out, "}});"); + rust!(self.out, "}}"); + + rust!(self.out, "}}"); // match + + // finally, emit gotos (if relevant) + if fallthrough && !this_state.gotos.is_empty() { + rust!(self.out, "loop {{"); + + // In most states, we know precisely when the top stack + // slot will be consumed (basically, when we reduce or + // when we transition to another state). But in some states, + // we may not know. Consider: + // + // X = A (*) "0" ["."] + // X = A (*) B ["."] + // B = (*) "0" "1" ["."] + // + // Now if we see a `"0"` this *could* be the start of a `B + // = "0" "1"` or it could be the continuation of `X = A + // "0"`. We won't know until we see the *next* character + // (which will either be `"0"` or `"."`). If it turns out to be + // `X = A "0"`, then the state handling the `"0"` will reduce + // and consume the `A` and the `"0"`. But otherwise it will shift + // the `"1"` and leave the `A` unprocessed. + // + // In cases like this, the `adjust_inputs` routine will + // have taken the top of the stack ("A") and put it into + // an `Option`. After the state processing the `"0"` + // returns then, we can check this option to see whether + // it has popped the `"A"` (in which case we ought to + // return) or not (in which case we ought to shift the `B` + // value that it returned to us). + let top_slot_optional = + { stack_suffix.is_not_empty() && stack_suffix.fixed().is_empty() }; + if top_slot_optional { + rust!( + self.out, + "if {}sym{}.is_none() {{", + self.prefix, + stack_suffix.len() - 1 + ); + rust!(self.out, "return Ok({}result);", self.prefix); + rust!(self.out, "}}"); + } + + rust!( + self.out, + "let ({}lookahead, {}nt) = {}result;", + self.prefix, + self.prefix, + self.prefix + ); + + rust!(self.out, "match {}nt {{", self.prefix); + for (ref nt, &next_index) in &this_state.gotos { + // The nonterminal we are shifting becomes symN, where + // N is the number of inputs to this state (which are + // numbered sym0..sym(N-1)). It is never optional + // because we always transition to a state with at + // least *one* fixed input. + rust!( + self.out, + "{}Nonterminal::{}({}sym{}) => {{", + self.prefix, + Escape(nt), + self.prefix, + stack_suffix.len() + ); + try!(self.transition("result", stack_suffix, next_index, &["tokens", "lookahead"])); + rust!(self.out, "}}"); + } + + // Errors are not possible in the goto phase; a missing entry + // indicates parse successfully completed, so just bail out. + if this_state.gotos.len() != self.grammar.nonterminals.keys().len() { + rust!(self.out, "_ => {{"); + rust!( + self.out, + "return Ok(({}lookahead, {}nt));", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + } + + rust!(self.out, "}}"); // match + + rust!(self.out, "}}"); // while/loop + } else if fallthrough { + rust!(self.out, "return Ok({}result);", self.prefix); + } + + rust!(self.out, "}}"); // fn + + Ok(()) + } + + fn emit_state_fn_header( + &mut self, + fn_kind: &str, // e.g. "state", "custom" + fn_index: usize, // state index, custom kind index, etc + suffix: StackSuffix<'grammar>, + ) -> io::Result<()> { + let optional_prefix = suffix.optional(); + let fixed_prefix = suffix.fixed(); + + let triple_type = self.triple_type(); + let parse_error_type = self.types.parse_error_type(); + let error_type = self.types.error_type(); + + // If we are generated the tokenizer, it generates ParseError + // errors, otherwise they are user errors. + let iter_error_type = if self.grammar.intern_token.is_some() { + parse_error_type + } else { + &error_type + }; + + let (fn_args, starts_with_terminal) = self.fn_args(optional_prefix, fixed_prefix); + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{}{}{}", self.prefix, fn_kind, fn_index), + vec![ + format!( + "{}TOKENS: Iterator>", + self.prefix, triple_type, iter_error_type + ), + ], + None, + fn_args, + format!( + "Result<(Option<{}>, {}Nonterminal<{}>), {}>", + triple_type, + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params), + parse_error_type + ), + vec![] + )); + + rust!(self.out, "{{"); + + rust!( + self.out, + "let mut {}result: (Option<{}>, {}Nonterminal<{}>);", + self.prefix, + triple_type, + self.prefix, + Sep(", ", &self.custom.nonterminal_type_params) + ); + + // shift lookahead is necessary; see `starts_with_terminal` above + if starts_with_terminal { + try!(self.next_token("lookahead", "tokens")); + } + + Ok(()) + } + + // Compute the set of arguments that the function for a state or + // custom-kind expects. The argument `symbols` represents the top + // portion of the stack which this function expects to be given. + // Each of them will be given an argument like `sym3: &mut + // Option` where `Sym3` is the type of the symbol. + // + // Returns a list of argument names and a flag if this fn resulted + // from pushing a terminal (in which case the lookahead must be + // computed interally). + fn fn_args( + &mut self, + optional_prefix: &[Symbol], + fixed_prefix: &[Symbol], + ) -> (Vec, bool) { + assert!( + // start state: + (optional_prefix.is_empty() && fixed_prefix.is_empty()) || + /* any other state: */ !fixed_prefix.is_empty() + ); + let triple_type = self.triple_type(); + + // to reduce the size of the generated code, if the state + // results from shifting a terminal, then we do not pass the + // lookahead in as an argument, but rather we load it as the + // first thing in this function; this saves some space because + // there are more edges than there are states in the graph. + let starts_with_terminal = fixed_prefix + .last() + .map(|l| l.is_terminal()) + .unwrap_or(false); + + let mut base_args = vec![format!("{}tokens: &mut {}TOKENS", self.prefix, self.prefix)]; + if !starts_with_terminal { + base_args.push(format!("{}lookahead: Option<{}>", self.prefix, triple_type)); + } + + // "Optional symbols" may or may not be consumed, so take an + // `&mut Option` + let optional_args = (0..optional_prefix.len()).map(|i| { + format!( + "{}sym{}: &mut Option<{}>", + self.prefix, + i, + self.types + .spanned_type(optional_prefix[i].ty(&self.types).clone()) + ) + }); + + // "Fixed symbols" will be consumed before we return, so take the value itself + let fixed_args = (0..fixed_prefix.len()).map(|i| { + format!( + "{}sym{}: {}", + self.prefix, + optional_prefix.len() + i, + self.types + .spanned_type(fixed_prefix[i].ty(&self.types).clone()) + ) + }); + + let all_args = base_args + .into_iter() + .chain(optional_args) + .chain(fixed_args) + .chain(Some(format!("_: {}", self.phantom_data_type()))) + .collect(); + + (all_args, starts_with_terminal) + } + + /// Examine the states that we may transition to. Unless this is + /// the start state, we will always take at least 1 fixed input: + /// the most recently pushed symbol (let's call it `symX`), and we + /// may have others as well. But if this state can transition to + /// another state can takes some of those inputs as optional + /// parameters, we need to convert them them options. This + /// function thus emits code to move each sum `symX` into an + /// option, and returns an adjusted stack-suffix that reflects the + /// changes made. + fn adjust_inputs( + &mut self, + state_index: StateIndex, + inputs: StackSuffix<'grammar>, + ) -> io::Result> { + let mut result = inputs; + + let top_opt = self.custom + .graph + .successors(state_index) + .iter() + .any(|succ_state| { + let succ_inputs = &self.custom.state_inputs[succ_state.0]; + + // Check for a successor state with a suffix like: + // + // ... OPT_1 ... OPT_N FIXED_1 + // + // (Remember that *every* successor state will have + // at least one fixed input.) + // + // So basically we are looking for states + // that, when they return, may *optionally* have consumed + // the top of our stack. + assert!(succ_inputs.fixed().len() >= 1); + succ_inputs.fixed().len() == 1 && succ_inputs.optional().len() > 0 + }); + + // If we find a successor that may optionally consume the top + // of our stack, convert our fixed inputs into optional ones. + // + // (Here we convert *all* fixed inputs. Honestly, I can't + // remember if this is necessary, or just for simplicity. I + // suspect the latter. --nmatsakis) + if top_opt { + let start_num = inputs.optional().len(); + for sym_num in (start_num..start_num + inputs.fixed().len()) { + rust!( + self.out, + "let {}sym{} = &mut Some({}sym{});", + self.prefix, + sym_num, + self.prefix, + sym_num + ); + } + result.len_optional = result.len(); + } + + Ok(result) + } + + /// Given that we have, locally, `optional` number of optional stack slots + /// followed by `fixed` number of fixed stack slots, prepare the inputs + /// to be supplied to `inputs`. Returns a string of names for this inputs. + fn pop_syms( + &mut self, + optional: usize, + fixed: usize, + inputs: StackSuffix<'grammar>, + ) -> io::Result> { + let total_have = optional + fixed; + let total_need = inputs.len(); + (total_have - total_need .. total_have) // number relative to us + .zip(0 .. total_need) // number relative to them + .map(|(h, n)| { + let name = format!("{}sym{}", self.prefix, h); + let have_optional = h < optional; + let need_optional = n < inputs.len_optional; + + // if we have something stored in an `Option`, but the next state + // consumes it unconditionally, then "pop" it + if have_optional && !need_optional { + rust!(self.out, "let {} = {}.take().unwrap();", name, name); + } else { + // we should never have something stored + // unconditionally that the next state only + // "maybe" consumes -- we should have fixed this + // in the `adjust_inputs` phase + assert_eq!(have_optional, need_optional); + } + Ok(name) + }) + .collect() + } + + /// Emit code to shift/goto into the state `next_index`. Returns + /// `true` if the current state may be valid after the target + /// state returns, or `false` if `transition` will just return + /// afterwards. + /// + /// # Arguments + /// + /// - `into_result`: name of variable to store result from target state into + /// - `stack_suffix`: the suffix of the LR stack that current state is aware of, + /// and how it is distributed into optional/fixed slots + /// - `next_index`: target state + /// - `other_args`: other arguments we are threading along + fn transition( + &mut self, + into_result: &str, + stack_suffix: StackSuffix<'grammar>, + next_index: StateIndex, + other_args: &[&str], + ) -> io::Result { + // the depth of the suffix of the stack that we are aware of + // in the current state, including the newly shifted token + let (optional, mut fixed) = stack_suffix.optional_fixed_lens(); + fixed += 1; // we just shifted another symbol + let total = optional + fixed; + assert!(total == stack_suffix.len() + 1); + + // symbols that the next state expects; will always be include + // at least one fixed input + let next_inputs = self.custom.state_inputs[next_index.0]; + assert!(next_inputs.fixed().len() >= 1); + assert!(next_inputs.len() <= total); + + let transfer_syms = try!(self.pop_syms(optional, fixed, next_inputs)); + + let other_args = other_args + .iter() + .map(|s| format!("{}{}", self.prefix, s)) + .collect(); + + let fn_name = format!("{}state{}", self.prefix, next_index.0); + + // invoke next state, transferring the top `m` tokens + let phantom_data_expr = self.phantom_data_expr(); + rust!( + self.out, + "{}{} = try!({}({}{}, {}, {}));", + self.prefix, + into_result, + fn_name, + self.grammar.user_parameter_refs(), + Sep(", ", &other_args), + Sep(", ", &transfer_syms), + phantom_data_expr + ); + + // if the target state takes at least **two** fixed tokens, + // then it will have consumed the top of **our** stack frame, + // so we should just return + if next_inputs.fixed().len() >= 2 { + rust!(self.out, "return Ok({}{});", self.prefix, into_result); + Ok(false) + } else { + Ok(true) + } + } + + /// Executes a reduction of `production`, storing the result into + /// the variable `into_var`, which should have type + /// `(Option<(L,T,L)>, Nonterminal)`. + fn emit_reduce_action( + &mut self, + into_var: &str, + stack_suffix: StackSuffix<'grammar>, + production: &'grammar Production, + ) -> io::Result<()> { + let loc_type = self.types.terminal_loc_type(); + + let (optional, fixed) = stack_suffix.optional_fixed_lens(); + let production_inputs = StackSuffix { + all: &production.symbols, + len_optional: 0, + }; + let transfer_syms = try!(self.pop_syms(optional, fixed, production_inputs)); + + // identify the "start" location for this production; this + // is typically the start of the first symbol we are + // reducing; but in the case of an empty production, it + // will be the last symbol pushed, or at worst `default`. + if let Some(first_sym) = transfer_syms.first() { + rust!( + self.out, + "let {}start = {}.0.clone();", + self.prefix, + first_sym + ); + } else if stack_suffix.len() > 0 { + // we pop no symbols, so grab from the top of the stack + // (unless we are in the start state) + let top = stack_suffix.len() - 1; + if !stack_suffix.fixed().is_empty() { + rust!( + self.out, + "let {}start = {}sym{}.2.clone();", + self.prefix, + self.prefix, + top + ); + } else { + // top of stack is optional; should not have been popped yet tho + rust!( + self.out, + "let {}start = {}sym{}.as_ref().unwrap().2.clone();", + self.prefix, + self.prefix, + top + ); + } + } else { + // this only occurs in the start state + rust!( + self.out, + "let {}start: {} = ::std::default::Default::default();", + self.prefix, + loc_type + ); + } + + // identify the "end" location for this production; + // this is typically the end of the last symbol we are reducing, + // but in the case of an empty production it will come from the + // lookahead + if let Some(last_sym) = transfer_syms.last() { + rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); + } else { + rust!( + self.out, + "let {}end = {}lookahead.as_ref().map(|o| o.0.clone()).unwrap_or_else(|| \ + {}start.clone());", + self.prefix, + self.prefix, + self.prefix + ); + } + + let transfered_syms = transfer_syms.len(); + + let mut args = transfer_syms; + if transfered_syms == 0 { + args.push(format!("&{}start", self.prefix)); + args.push(format!("&{}end", self.prefix)); + } + + // invoke the action code + let is_fallible = self.grammar.action_is_fallible(production.action); + if is_fallible { + rust!( + self.out, + "let {}nt = try!({}::{}action{}::<{}>({}{}));", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ) + } else { + rust!( + self.out, + "let {}nt = {}::{}action{}::<{}>({}{});", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ) + } + + // wrap up the produced value into `Nonterminal` along with + rust!( + self.out, + "let {}nt = {}Nonterminal::{}((", + self.prefix, + self.prefix, + Escape(&production.nonterminal) + ); + rust!(self.out, "{}start,", self.prefix); + rust!(self.out, "{}nt,", self.prefix); + rust!(self.out, "{}end,", self.prefix); + rust!(self.out, "));"); + + // wrap up the result along with the (unused) lookahead + rust!( + self.out, + "{}{} = ({}lookahead, {}nt);", + self.prefix, + into_var, + self.prefix, + self.prefix + ); + + Ok(()) + } + + /// Emit a pattern that matches `id` but doesn't extract any data. + fn match_terminal_pattern(&mut self, id: &TerminalString) -> String { + let pattern = self.grammar.pattern(id).map(&mut |_| "_"); + let pattern = format!("{}", pattern); + format!("(_, {}, _)", pattern) + } + + /// Emit a pattern that matches `id` and extracts its value, storing + /// that value as `let_name`. + fn consume_terminal(&mut self, id: &TerminalString, let_name: String) -> io::Result<()> { + let mut pattern_names = vec![]; + let pattern = self.grammar.pattern(id).map(&mut |_| { + let index = pattern_names.len(); + pattern_names.push(format!("{}tok{}", self.prefix, index)); + pattern_names.last().cloned().unwrap() + }); + + let mut pattern = format!("{}", pattern); + if pattern_names.is_empty() { + pattern_names.push(format!("{}tok", self.prefix)); + pattern = format!("{}tok @ {}", self.prefix, pattern); + } + + pattern = format!("({}loc1, {}, {}loc2)", self.prefix, pattern, self.prefix); + + rust!(self.out, "Some({}) => {{", pattern); + + rust!( + self.out, + "let {} = ({}loc1, ({}), {}loc2);", + let_name, + self.prefix, + pattern_names.join(", "), + self.prefix + ); + + Ok(()) + } + + fn triple_type(&self) -> TypeRepr { + self.types.triple_type() + } + + fn next_token(&mut self, lookahead: &str, tokens: &str) -> io::Result<()> { + rust!( + self.out, + "let {}{} = match {}{}.next() {{", + self.prefix, + lookahead, + self.prefix, + tokens + ); + rust!(self.out, "Some(Ok(v)) => Some(v),"); + rust!(self.out, "None => None,"); + if self.grammar.intern_token.is_some() { + // when we generate the tokenizer, the generated errors are `ParseError` values + rust!(self.out, "Some(Err(e)) => return Err(e),"); + } else { + // otherwise, they are user errors + rust!( + self.out, + "Some(Err(e)) => return Err({}lalrpop_util::ParseError::User {{ error: e }}),", + self.prefix + ); + } + rust!(self.out, "}};"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/codegen/base.rs b/third_party/rust/lalrpop-snap/src/lr1/codegen/base.rs new file mode 100644 index 000000000000..73206109519f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/codegen/base.rs @@ -0,0 +1,279 @@ +//! Base helper routines for a code generator. + +use grammar::repr::*; +use lr1::core::*; +use rust::RustWrite; +use std::io::{self, Write}; +use util::Sep; + +/// Base struct for various kinds of code generator. The flavor of +/// code generator is customized by supplying distinct types for `C` +/// (e.g., `self::ascent::RecursiveAscent`). +pub struct CodeGenerator<'codegen, 'grammar: 'codegen, W: Write + 'codegen, C> { + /// the complete grammar + pub grammar: &'grammar Grammar, + + /// some suitable prefix to separate our identifiers from the user's + pub prefix: &'grammar str, + + /// types from the grammar + pub types: &'grammar Types, + + /// the start symbol S the user specified + pub user_start_symbol: NonterminalString, + + /// the synthetic start symbol S' that we specified + pub start_symbol: NonterminalString, + + /// the vector of states + pub states: &'codegen [LR1State<'grammar>], + + /// where we write output + pub out: &'codegen mut RustWrite, + + /// where to find the action routines (typically `super`) + pub action_module: String, + + /// custom fields for the specific kind of codegenerator + /// (recursive ascent, table-driven, etc) + pub custom: C, + + pub repeatable: bool, +} + +impl<'codegen, 'grammar, W: Write, C> CodeGenerator<'codegen, 'grammar, W, C> { + pub fn new( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'codegen [LR1State<'grammar>], + out: &'codegen mut RustWrite, + repeatable: bool, + action_module: &str, + custom: C, + ) -> Self { + CodeGenerator { + grammar: grammar, + prefix: &grammar.prefix, + types: &grammar.types, + states: states, + user_start_symbol: user_start_symbol, + start_symbol: start_symbol, + out: out, + custom: custom, + repeatable: repeatable, + action_module: action_module.to_string(), + } + } + + pub fn write_parse_mod(&mut self, body: F) -> io::Result<()> + where + F: FnOnce(&mut Self) -> io::Result<()>, + { + rust!(self.out, ""); + rust!(self.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(self.out, "mod {}parse{} {{", self.prefix, self.start_symbol); + + // these stylistic lints are annoying for the generated code, + // which doesn't follow conventions: + rust!( + self.out, + "#![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, \ + unused_imports, unused_parens)]" + ); + rust!(self.out, ""); + + try!(self.write_uses()); + + try!(body(self)); + + rust!(self.out, "}}"); + Ok(()) + } + + pub fn write_uses(&mut self) -> io::Result<()> { + try!( + self.out + .write_uses(&format!("{}::", self.action_module), &self.grammar) + ); + + if self.grammar.intern_token.is_some() { + rust!( + self.out, + "use {}::{}intern_token::Token;", + self.action_module, + self.prefix + ); + } else { + rust!( + self.out, + "use {}::{}ToTriple;", + self.action_module, + self.prefix + ); + } + + Ok(()) + } + + pub fn start_parser_fn(&mut self) -> io::Result<()> { + let error_type = self.types.error_type(); + let parse_error_type = self.types.parse_error_type(); + + let (type_parameters, parameters, mut where_clauses); + + let intern_token = self.grammar.intern_token.is_some(); + if intern_token { + // if we are generating the tokenizer, we just need the + // input, and that has already been added as one of the + // user parameters + type_parameters = vec![]; + parameters = vec![]; + where_clauses = vec![]; + } else { + // otherwise, we need an iterator of type `TOKENS` + let mut user_type_parameters = String::new(); + for type_parameter in &self.grammar.type_parameters { + user_type_parameters.push_str(&format!("{}, ", type_parameter)); + } + type_parameters = vec![ + format!( + "{}TOKEN: {}ToTriple<{}Error={}>", + self.prefix, self.prefix, user_type_parameters, error_type + ), + format!( + "{}TOKENS: IntoIterator", + self.prefix, self.prefix + ), + ]; + parameters = vec![format!("{}tokens0: {}TOKENS", self.prefix, self.prefix)]; + where_clauses = vec![]; + + if self.repeatable { + where_clauses.push(format!("{}TOKENS: Clone", self.prefix)); + } + } + + rust!( + self.out, + "{}struct {}Parser {{", + self.grammar.nonterminals[&self.start_symbol].visibility, + self.user_start_symbol + ); + if intern_token { + rust!( + self.out, + "builder: {1}::{0}intern_token::{0}MatcherBuilder,", + self.prefix, + self.action_module + ); + } + rust!(self.out, "_priv: (),"); + rust!(self.out, "}}"); + rust!(self.out, ""); + + rust!(self.out, "impl {}Parser {{", self.user_start_symbol); + rust!( + self.out, + "{}fn new() -> {}Parser {{", + self.grammar.nonterminals[&self.start_symbol].visibility, + self.user_start_symbol + ); + if intern_token { + rust!( + self.out, + "let {0}builder = {1}::{0}intern_token::{0}MatcherBuilder::new();", + self.prefix, + self.action_module + ); + } + rust!(self.out, "{}Parser {{", self.user_start_symbol); + if intern_token { + rust!(self.out, "builder: {}builder,", self.prefix); + } + rust!(self.out, "_priv: (),"); + rust!(self.out, "}}"); // Parser + rust!(self.out, "}}"); // new() + rust!(self.out, ""); + + rust!(self.out, "#[allow(dead_code)]"); + try!(self.out.write_fn_header( + self.grammar, + &self.grammar.nonterminals[&self.start_symbol].visibility, + "parse".to_owned(), + type_parameters, + Some("&self".to_owned()), + parameters, + format!( + "Result<{}, {}>", + self.types.nonterminal_type(&self.start_symbol), + parse_error_type + ), + where_clauses + )); + rust!(self.out, "{{"); + + Ok(()) + } + + pub fn define_tokens(&mut self) -> io::Result<()> { + if self.grammar.intern_token.is_some() { + // if we are generating the tokenizer, create a matcher as our input iterator + rust!( + self.out, + "let mut {}tokens = self.builder.matcher(input);", + self.prefix + ); + } else { + // otherwise, convert one from the `IntoIterator` + // supplied, using the `ToTriple` trait which inserts + // errors/locations etc if none are given + let clone_call = if self.repeatable { ".clone()" } else { "" }; + rust!( + self.out, + "let {}tokens = {}tokens0{}.into_iter();", + self.prefix, + self.prefix, + clone_call + ); + + rust!( + self.out, + "let mut {}tokens = {}tokens.map(|t| {}ToTriple::to_triple(t));", + self.prefix, + self.prefix, + self.prefix + ); + } + + Ok(()) + } + + pub fn end_parser_fn(&mut self) -> io::Result<()> { + rust!(self.out, "}}"); // fn + rust!(self.out, "}}"); // impl + Ok(()) + } + + /// Returns phantom data type that captures the user-declared type + /// parameters in a phantom-data. This helps with ensuring that + /// all type parameters are constrained, even if they are not + /// used. + pub fn phantom_data_type(&self) -> String { + format!( + "::std::marker::PhantomData<({})>", + Sep(", ", &self.grammar.non_lifetime_type_parameters()) + ) + } + + /// Returns expression that captures the user-declared type + /// parameters in a phantom-data. This helps with ensuring that + /// all type parameters are constrained, even if they are not + /// used. + pub fn phantom_data_expr(&self) -> String { + format!( + "::std::marker::PhantomData::<({})>", + Sep(", ", &self.grammar.non_lifetime_type_parameters()) + ) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/codegen/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/codegen/mod.rs new file mode 100644 index 000000000000..a6290825f6c5 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/codegen/mod.rs @@ -0,0 +1,4 @@ +pub mod ascent; +mod base; +pub mod parse_table; +pub mod test_all; diff --git a/third_party/rust/lalrpop-snap/src/lr1/codegen/parse_table.rs b/third_party/rust/lalrpop-snap/src/lr1/codegen/parse_table.rs new file mode 100644 index 000000000000..932a9794b820 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/codegen/parse_table.rs @@ -0,0 +1,2220 @@ +//! A compiler from an LR(1) table to a traditional table driven parser. + +use collections::{Entry, Map, Set}; +use grammar::parse_tree::WhereClause; +use grammar::repr::*; +use string_cache::DefaultAtom as Atom; +use lr1::core::*; +use lr1::lookahead::Token; +use rust::RustWrite; +use std::fmt; +use std::io::{self, Write}; +use tls::Tls; +use util::Sep; + +use super::base::CodeGenerator; + +const DEBUG_PRINT: bool = false; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + action_module: &str, + out: &mut RustWrite, +) -> io::Result<()> { + let mut table_driven = CodeGenerator::new_table_driven( + grammar, + user_start_symbol, + start_symbol, + states, + action_module, + out, + ); + table_driven.write() +} + +// We create three parse tables: +// +// - `ACTION[state * num_states + terminal]: i32`: given a state and next token, +// yields an integer indicating whether to shift/reduce (see below) +// - `EOF_ACTION[state]: i32`: as above, but for the EOF token +// - `GOTO[state * num_states + nonterminal]: i32`: index + 1 of state to jump to when given +// nonterminal is pushed (no error is possible) +// +// For the `ACTION` and `EOF_ACTION` tables, the value is an `i32` and +// its interpretation varies depending on whether it is positive or +// negative: +// +// - if zero, parse error. +// - if a positive integer (not zero), it is the next state to shift to. +// - if a negative integer (not zero), it is the index of a reduction +// action to execute (actually index + 1). +// +// We maintain two stacks: one is a stack of state indexes (each an +// u32). The other is a stack of values and spans: `(L, T, L)`. `L` is +// the location type and represents the start/end span. `T` is the +// value of the symbol. The type `T` is an `enum` that we synthesize +// which contains a variant for all the possibilities: +// +// ``` +// enum Value<> { +// // One variant for each terminal: +// Term1(Ty1), +// ... +// TermN(TyN), +// +// // One variant for each nonterminal: +// Nt1(Ty1), +// ... +// NtN(TyN), +// } +// ``` +// +// The action parser function looks like this (pseudo-code): +// +// ``` +// fn parse_fn(tokens: TOKENS) -> Result +// where TOKENS: Iterator> +// { +// let mut states = vec![0]; // initial state is zero +// let mut symbols = vec![]; +// 'shift: loop { +// // Code to shift the next symbol and determine which terminal +// // it is; emitted by `shift_symbol()`. +// let lookahead = match tokens.next() { +// Some(Ok(l)) => l, +// None => break 'shift, +// Some(Err(e)) => return Err(e), +// }; +// let integer = match lookahead { +// (_, PatternForTerminal0(...), _) => 0, +// ... +// }; +// +// // Code to process next symbol. +// 'inner: loop { +// let symbol = match lookahead { +// (l, PatternForTerminal0(...), r) => { +// (l, Value::VariantForTerminal0(...), r), +// } +// ... +// }; +// let state = *states.last().unwrap() as usize; +// let action = ACTION[state * NUM_STATES + integer]; +// if action > 0 { // shift +// states.push(action - 1); +// symbols.push(symbol); +// continue 'shift; +// } else if action < 0 { // reduce +// if let Some(r) = reduce(action, Some(&lookahead.0), &mut states, &mut symbols) { +// // Give errors from within grammar a higher priority +// if r.is_err() { +// return r; +// } +// return Err(lalrpop_util::ParseError::ExtraToken { token: lookahead }); +// } +// } else { +// // Error recovery code: emitted by `try_error_recovery` +// let mut err_lookahead = Some(lookahead); +// let mut err_integer = Some(integer); +// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, +// &mut err_lookahead, &mut err_integer) { +// Err(e) => return e, +// Ok(Some(v)) => return Ok(v), +// Ok(None) => { } +// } +// match (err_lookahead, err_integer) { +// (Some(l), Some(i)) => { +// lookahead = l; +// integer = i; +// continue 'inner; +// } +// _ => break 'shift; +// } +// } +// } +// } +// +// // Process EOF +// while let Some(state) = self.states.pop() { +// let action = EOF_ACTION[state * NUM_STATES]; +// if action < 0 { // reduce +// try!(reduce(action, None, &mut states, &mut symbols)); +// } else { +// let mut err_lookahead = None; +// let mut err_integer = None; +// match error_recovery(&mut tokens, &mut states, &mut symbols, last_location, +// &mut err_lookahead, &mut err_integer) { +// Err(e) => return e, +// Ok(Some(v)) => return Ok(v), +// Ok(None) => { } +// } +// } +// } +// } +// +// // generated by `emit_reduce_actions()` +// fn reduce(action: i32, lookahead_start: Option<&L>, +// states: &mut Vec, symbols: &mut Vec<(L, Symbol, L)) +// -> Option> { +// let nonterminal = match -action { +// 0 => { +// // Execute reduce action 0 to produce nonterminal N, popping from stacks etc +// // (generated by `emit_reduce_action()`). If this is a fallible action, +// // it may return `Some(Err)`, and if this is a reduce of the start NT, +// // it may return `Some(Ok)`. +// states.pop(); // however many times +// symbols.pop(); // however many times +// let data = action_fn0(...); +// symbols.push((l, Value::VariantForNonterminalN(data), r)); +// N +// } +// ... +// }; +// let state = *states.last().unwrap(); +// let next_state = GOTO[state * NUM_STATES + nonterminal] - 1; +// state_stack.push(next_state); +// None +// } +// +// generated by `write_error_recovery_fn` +// fn error_recovery(...) { +// let mut dropped_tokens = vec![]; +// +// // First, reduce as long as we can with the `!` token as lookahead +// loop { +// let state = *states.last().unwrap() as usize; +// let action = ACTION[(state + 1) * ACTIONS_PER_STATE - 1]; +// if action >= 0 { +// break; +// } +// if let Some(r) = reduce(action, None, &mut states, &mut symbols) { +// return r; +// } +// } +// +// let top0; +// 'find_state: loop { +// // See if there is a state that can shift `!` token. If so, +// // break. +// for top in (0..states.len()).rev() { +// let state = states[top]; +// let action = ACTION[state * ACTIONS_PER_STATE + 1]; +// if action <= 0 { continue; } +// let error_state = action - 1; +// if accepts(error_state, &states[..top+1], *opt-integer) { +// top0 = top; +// break 'find_state; +// } +// } +// +// // Else, drop a token from the input and try again. +// 'eof: loop { +// match opt_lookahead.take() { +// None => { +// // No more tokens to drop +// return Err(...); +// } +// Some(mut lookahead) => { +// dropped_tokens.push(lookahead); +// next_token() +// opt_lookahead = Some(match tokens.next() { +// Some(Ok(l)) => l, +// None => break 'eof, +// Some(Err(e)) => return Err(e), +// }); +// opt_integer = Some(match lookahead { +// (_, PatternForTerminal0(...), _) => 0, +// ... +// }); +// continue 'find_state; +// } +// } +// } +// opt_lookahead = None; +// opt_integer = None; +// } +// +// let top = top0; +// let start = /* figure out "start" of error */; +// let end = /* figure out "end" of error */; +// states.truncate(top + 1); +// symbols.truncate(top); +// let recover_state = states[top]; +// let error_state = ACTION[recover_state * ACTIONS_PER_STATE + 1] - 1; +// states.push(error_state); +// let recovery = ErrorRecovery { dropped_tokens, ... }; +// symbols.push((start, Symbol::Termerror(recovery), end)); +// Ok(None) +// } +// ``` + +enum Comment<'a, T> { + Goto(T, usize), + Error(T), + Reduce(T, &'a Production), +} + +impl<'a, T: fmt::Display> fmt::Display for Comment<'a, T> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + Comment::Goto(ref token, new_state) => { + write!(f, " // on {}, goto {}", token, new_state) + } + Comment::Error(ref token) => write!(f, " // on {}, error", token), + Comment::Reduce(ref token, production) => { + write!(f, " // on {}, reduce `{:?}`", token, production) + } + } + } +} + +struct TableDriven<'grammar> { + /// type parameters for the `Nonterminal` type + symbol_type_params: Vec, + + symbol_where_clauses: Vec>, + + /// a list of each nonterminal in some specific order + all_nonterminals: Vec, + + reduce_indices: Map<&'grammar Production, usize>, + + state_type: &'static str, + + variant_names: Map, + variants: Map, + reduce_functions: Set, +} + +impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TableDriven<'grammar>> { + fn new_table_driven( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'ascent [LR1State<'grammar>], + action_module: &str, + out: &'ascent mut RustWrite, + ) -> Self { + // The nonterminal type needs to be parameterized by all the + // type parameters that actually appear in the types of + // nonterminals. We can't just use *all* type parameters + // because that would leave unused lifetime/type parameters in + // some cases. + let referenced_ty_params: Set = grammar + .types + .nonterminal_types() + .into_iter() + .chain(grammar.types.terminal_types()) + .flat_map(|t| t.referenced()) + .collect(); + + let symbol_type_params: Vec<_> = grammar + .type_parameters + .iter() + .filter(|t| referenced_ty_params.contains(t)) + .cloned() + .collect(); + + let mut referenced_where_clauses = Set::new(); + for wc in &grammar.where_clauses { + wc.map(|ty| { + if ty.referenced() + .iter() + .any(|p| symbol_type_params.contains(p)) + { + referenced_where_clauses.insert(wc.clone()); + } + }); + } + + let symbol_where_clauses: Vec<_> = grammar + .where_clauses + .iter() + .filter(|wc| referenced_where_clauses.contains(wc)) + .cloned() + .collect(); + + // Assign each production a unique index to use as the values for reduce + // actions in the ACTION and EOF_ACTION tables. + let reduce_indices: Map<&'grammar Production, usize> = grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(0..) + .collect(); + + let state_type = { + // `reduce_indices` are allowed to be +1 since the negative maximum of any integer type + // is one larger than the positive maximum + let max_value = ::std::cmp::max(states.len(), reduce_indices.len() - 1); + if max_value <= ::std::i8::MAX as usize { + "i8" + } else if max_value <= ::std::i16::MAX as usize { + "i16" + } else { + "i32" + } + }; + + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + false, + action_module, + TableDriven { + symbol_type_params: symbol_type_params, + symbol_where_clauses: symbol_where_clauses, + all_nonterminals: grammar.nonterminals.keys().cloned().collect(), + reduce_indices: reduce_indices, + state_type: state_type, + variant_names: Map::new(), + variants: Map::new(), + reduce_functions: Set::new(), + }, + ) + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_value_type_defn()); + try!(this.write_parse_table()); + try!(this.write_parser_fn()); + try!(this.write_error_recovery_fn()); + try!(this.write_accepts_fn()); + try!(this.emit_reduce_actions()); + try!(this.emit_downcast_fns()); + try!(this.emit_reduce_action_functions()); + Ok(()) + }) + } + + fn write_value_type_defn(&mut self) -> io::Result<()> { + // sometimes some of the variants are not used, particularly + // if we are generating multiple parsers from the same file: + rust!(self.out, "#[allow(dead_code)]"); + rust!( + self.out, + "pub enum {}Symbol<{}>", + self.prefix, + Sep(", ", &self.custom.symbol_type_params) + ); + + if !self.custom.symbol_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.symbol_where_clauses) + ); + } + + rust!(self.out, " {{"); + + // make one variant per terminal + for term in &self.grammar.terminals.all { + let ty = self.types.terminal_type(term).clone(); + let len = self.custom.variants.len(); + let name = match self.custom.variants.entry(ty.clone()) { + Entry::Occupied(entry) => entry.into_mut(), + Entry::Vacant(entry) => { + let name = format!("Variant{}", len); + + rust!(self.out, "{}({}),", name, ty); + entry.insert(name) + } + }; + + self.custom + .variant_names + .insert(Symbol::Terminal(term.clone()), name.clone()); + } + + // make one variant per nonterminal + for nt in self.grammar.nonterminals.keys() { + let ty = self.types.nonterminal_type(nt).clone(); + let len = self.custom.variants.len(); + let name = match self.custom.variants.entry(ty.clone()) { + Entry::Occupied(entry) => entry.into_mut(), + Entry::Vacant(entry) => { + let name = format!("Variant{}", len); + + rust!(self.out, "{}({}),", name, ty); + entry.insert(name) + } + }; + + self.custom + .variant_names + .insert(Symbol::Nonterminal(nt.clone()), name.clone()); + } + rust!(self.out, "}}"); + Ok(()) + } + + fn write_parse_table(&mut self) -> io::Result<()> { + // The table is a two-dimensional matrix indexed first by state + // and then by the terminal index. The value is described above. + rust!( + self.out, + "const {}ACTION: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + + if Tls::session().emit_comments { + for item in state.items.vec.iter() { + rust!(self.out, "// {:?}", item); + } + } + + // Write an action for each terminal (either shift, reduce, or error). + let custom = &self.custom; + let iterator = self.grammar.terminals.all.iter().map(|terminal| { + if let Some(new_state) = state.shifts.get(&terminal) { + ( + new_state.0 as i32 + 1, + Comment::Goto(Token::Terminal(terminal.clone()), new_state.0), + ) + } else { + Self::write_reduction(custom, state, &Token::Terminal(terminal.clone())) + } + }); + try!(self.out.write_table_row(iterator)) + } + + rust!(self.out, "];"); + + // Actions on EOF. Indexed just by state. + rust!( + self.out, + "const {}EOF_ACTION: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + let reduction = Self::write_reduction(&self.custom, state, &Token::EOF); + try!(self.out.write_table_row(Some(reduction))); + } + rust!(self.out, "];"); + + // The goto table is indexed by state and *nonterminal*. + rust!( + self.out, + "const {}GOTO: &'static [{}] = &[", + self.prefix, + self.custom.state_type + ); + for (index, state) in self.states.iter().enumerate() { + rust!(self.out, "// State {}", index); + let iterator = self.grammar.nonterminals.keys().map(|nonterminal| { + if let Some(&new_state) = state.gotos.get(&nonterminal) { + ( + new_state.0 as i32 + 1, + Comment::Goto(nonterminal, new_state.0), + ) + } else { + (0, Comment::Error(nonterminal)) + } + }); + try!(self.out.write_table_row(iterator)); + } + rust!(self.out, "];"); + + try!(self.emit_expected_tokens_fn()); + + Ok(()) + } + + fn write_reduction<'s>( + custom: &TableDriven<'grammar>, + state: &'s LR1State, + token: &Token, + ) -> (i32, Comment<'s, Token>) { + let reduction = state + .reductions + .iter() + .filter(|&&(ref t, _)| t.contains(token)) + .map(|&(_, p)| p) + .next(); + if let Some(production) = reduction { + let action = custom.reduce_indices[production]; + ( + -(action as i32 + 1), + Comment::Reduce(token.clone(), production), + ) + } else { + // Otherwise, this is an error. Store 0. + (0, Comment::Error(token.clone())) + } + } + + fn write_parser_fn(&mut self) -> io::Result<()> { + let phantom_data_expr = self.phantom_data_expr(); + + try!(self.start_parser_fn()); + + try!(self.define_tokens()); + + // State and data stack. + rust!( + self.out, + "let mut {}states = vec![0_{}];", + self.prefix, + self.custom.state_type + ); + rust!(self.out, "let mut {}symbols = vec![];", self.prefix); + + rust!(self.out, "let mut {}integer;", self.prefix); + rust!(self.out, "let mut {}lookahead;", self.prefix); + // The location of the last token is necessary for for error recovery at EOF (or they would not have + // a location) + rust!( + self.out, + "let {}last_location = &mut Default::default();", + self.prefix + ); + + // Outer loop: each time we continue around this loop, we + // shift a new token from the input. We break from the loop + // when the end of the input is reached (we return early if an + // error occurs). + rust!(self.out, "'{}shift: loop {{", self.prefix); + + // Read next token from input. + try!(self.next_token("lookahead", "tokens", "last_location", "shift")); + try!(self.token_to_integer("integer", "lookahead")); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"pulled next token from input: {{:?}}\", \ + {p}lookahead);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - integer: {{}}\", \ + {p}integer);", + p = self.prefix + ); + } + + // Loop. + rust!(self.out, "'{}inner: loop {{", self.prefix); + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + + // Load the next action to take. + rust!( + self.out, + "let {}action = {}ACTION[{}state * {} + {}integer];", + self.prefix, + self.prefix, + self.prefix, + self.grammar.terminals.all.len(), + self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"state: {{}} lookahead: {{:?}}/{{}} action: {{}} stack-depth: {{}}\", \ + {p}state, {p}lookahead, {p}integer, {p}action, {p}symbols.len());", + p = self.prefix + ); + } + + // Shift. + rust!(self.out, "if {}action > 0 {{", self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"--> shift `{{:?}}`\", {p}lookahead);", + p = self.prefix + ); + } + try!(self.token_to_symbol()); + rust!( + self.out, + "{}states.push({}action - 1);", + self.prefix, + self.prefix + ); + rust!( + self.out, + "{}symbols.push(({}lookahead.0, {}symbol, {}lookahead.2));", + self.prefix, + self.prefix, + self.prefix, + self.prefix + ); + rust!(self.out, "continue '{}shift;", self.prefix); + + // Reduce. + rust!(self.out, "}} else if {}action < 0 {{", self.prefix); + if DEBUG_PRINT { + rust!(self.out, "println!(\"--> reduce\");"); + } + rust!( + self.out, + "if let Some(r) = {p}reduce({}{p}action, Some(&{p}lookahead.0), &mut {p}states, &mut \ + {p}symbols, {}) {{", + self.grammar.user_parameter_refs(), + phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "if r.is_err() {{"); + rust!(self.out, "return r;"); + rust!(self.out, "}}"); + rust!( + self.out, + "return Err({}lalrpop_util::ParseError::ExtraToken {{ token: {}lookahead }});", + self.prefix, + self.prefix + ); + rust!(self.out, "}}"); + + // Error. + rust!(self.out, "}} else {{"); + + self.try_error_recovery( + "tokens", + "states", + "symbols", + "last_location", + Some(("lookahead", "integer", "inner", "shift")), + )?; + + rust!(self.out, "}}"); // if-else-if-else + + rust!(self.out, "}}"); // reduce loop + + rust!(self.out, "}}"); // shift loop + + // EOF loop + rust!(self.out, "loop {{"); + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"EOF loop state: {{}}\", {}state);", + self.prefix + ); + } + rust!( + self.out, + "let {}action = {}EOF_ACTION[{}state];", + self.prefix, + self.prefix, + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"EOF in state {{}} takes action {{}}\", {}state, {}action);", + self.prefix, + self.prefix + ); + } + rust!(self.out, "if {}action < 0 {{", self.prefix); + rust!( + self.out, + "if let Some(r) = {}reduce({}{}action, None, &mut {}states, &mut {}symbols, {}) {{", + self.prefix, + self.grammar.user_parameter_refs(), + self.prefix, + self.prefix, + self.prefix, + phantom_data_expr + ); + rust!(self.out, "return r;"); + rust!(self.out, "}}"); + rust!(self.out, "}} else {{"); + + self.try_error_recovery("tokens", "states", "symbols", "last_location", None)?; + + rust!(self.out, "}}"); // else + + rust!(self.out, "}}"); // while let + + self.end_parser_fn() + } + + fn next_token( + &mut self, + lookahead: &str, + tokens: &str, + last_location: &str, + break_on_eof: &str, + ) -> io::Result<()> { + rust!( + self.out, + "{p}{lookahead} = match {p}{tokens}.next() {{", + lookahead = lookahead, + tokens = tokens, + p = self.prefix + ); + rust!(self.out, "Some(Ok(v)) => v,"); + rust!(self.out, "None => break '{}{},", self.prefix, break_on_eof); // EOF: break out + if self.grammar.intern_token.is_some() { + // when we generate the tokenizer, the generated errors are `ParseError` values + rust!(self.out, "Some(Err(e)) => return Err(e),"); + } else { + // otherwise, they are user errors + rust!( + self.out, + "Some(Err(e)) => return Err({p}lalrpop_util::ParseError::User {{ error: e }}),", + p = self.prefix + ); + } + rust!(self.out, "}};"); + rust!( + self.out, + "*{p}{last_location} = {p}{lookahead}.2.clone();", + last_location = last_location, + lookahead = lookahead, + p = self.prefix + ); + Ok(()) + } + + fn token_to_integer(&mut self, integer: &str, lookahead: &str) -> io::Result<()> { + rust!( + self.out, + "{p}{integer} = match {p}{lookahead}.1 {{", + integer = integer, + lookahead = lookahead, + p = self.prefix + ); + for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { + if *terminal == TerminalString::Error { + continue; + } + let pattern = self.grammar.pattern(terminal).map(&mut |_| "_"); + rust!( + self.out, + "{pattern} if true => {index},", + pattern = pattern, + index = index + ); + } + + rust!(self.out, "_ => {{"); + let prefix = self.prefix; + try!(self.let_unrecognized_token_error( + "error", + &format!("Some({p}{lookahead})", lookahead = lookahead, p = prefix) + )); + rust!(self.out, "return Err({p}error);", p = self.prefix); + rust!(self.out, "}}"); + + rust!(self.out, "}};"); + Ok(()) + } + + fn token_to_symbol(&mut self) -> io::Result<()> { + rust!( + self.out, + "let {}symbol = match {}integer {{", + self.prefix, + self.prefix + ); + for (terminal, index) in self.grammar.terminals.all.iter().zip(0..) { + if *terminal == TerminalString::Error { + continue; + } + rust!(self.out, "{} => match {}lookahead.1 {{", index, self.prefix); + + let mut pattern_names = vec![]; + let pattern = self.grammar.pattern(terminal).map(&mut |_| { + let index = pattern_names.len(); + pattern_names.push(format!("{}tok{}", self.prefix, index)); + pattern_names.last().cloned().unwrap() + }); + + let mut pattern = format!("{}", pattern); + if pattern_names.is_empty() { + pattern_names.push(format!("{}tok", self.prefix)); + pattern = format!("{}tok @ {}", self.prefix, pattern); + } + + let variant_name = self.variant_name_for_symbol(&Symbol::Terminal(terminal.clone())); + rust!( + self.out, + "{} => {}Symbol::{}(({})),", + pattern, + self.prefix, + variant_name, + pattern_names.join(", ") + ); + rust!(self.out, "_ => unreachable!(),"); + rust!(self.out, "}},"); + } + + rust!(self.out, "_ => unreachable!(),"); + + rust!(self.out, "}};"); + Ok(()) + } + + fn emit_reduce_actions(&mut self) -> io::Result<()> { + let success_type = self.types.nonterminal_type(&self.start_symbol); + let parse_error_type = self.types.parse_error_type(); + let loc_type = self.types.terminal_loc_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + + let parameters = vec![ + format!("{}action: {}", self.prefix, self.custom.state_type), + format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), + format!( + "{}states: &mut ::std::vec::Vec<{}>", + self.prefix, self.custom.state_type + ), + format!( + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, spanned_symbol_type + ), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), + format!("{}reduce", self.prefix), + vec![], + None, + parameters, + format!("Option>", success_type, parse_error_type), + vec![] + )); + rust!(self.out, "{{"); + + rust!( + self.out, + "let ({p}pop_states, {p}symbol, {p}nonterminal) = match -{}action {{", + p = self.prefix + ); + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + rust!(self.out, "{} => {{", index); + // In debug builds LLVM is not very good at reusing stack space which makes this + // reduce function take up O(number of states) space. By wrapping each reduce action in + // an immediately called function each reduction takes place in their own function + // context which ends up reducing the stack space used. + + // Fallible actions and the start symbol may do early returns so we avoid wrapping + // those + let is_fallible = self.grammar.action_is_fallible(production.action); + let reduce_stack_space = !is_fallible && production.nonterminal != self.start_symbol; + + if reduce_stack_space { + self.custom.reduce_functions.insert(index); + let phantom_data_expr = self.phantom_data_expr(); + rust!( + self.out, + "{p}reduce{}({}{p}action, {p}lookahead_start, {p}states, {p}symbols, {})", + index, + self.grammar.user_parameter_refs(), + phantom_data_expr, + p = self.prefix + ); + } else { + try!(self.emit_reduce_action(production)); + } + + rust!(self.out, "}}"); + } + rust!( + self.out, + "_ => panic!(\"invalid action code {{}}\", {}action)", + self.prefix + ); + rust!(self.out, "}};"); + + // pop the consumed states from the stack + rust!( + self.out, + "let {p}states_len = {p}states.len();", + p = self.prefix + ); + rust!( + self.out, + "{p}states.truncate({p}states_len - {p}pop_states);", + p = self.prefix + ); + + rust!(self.out, "{p}symbols.push({p}symbol);", p = self.prefix); + + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + rust!( + self.out, + "let {}next_state = {}GOTO[{}state * {} + {}nonterminal] - 1;", + self.prefix, + self.prefix, + self.prefix, + self.grammar.nonterminals.len(), + self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"goto state {{}} from {{}} due to nonterminal {{}}\", {}next_state, \ + {}state, {}nonterminal);", + self.prefix, + self.prefix, + self.prefix + ); + } + rust!( + self.out, + "{}states.push({}next_state);", + self.prefix, + self.prefix + ); + rust!(self.out, "None"); + rust!(self.out, "}}"); + Ok(()) + } + + fn emit_reduce_action_functions(&mut self) -> io::Result<()> { + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + if self.custom.reduce_functions.contains(&index) { + self.emit_reduce_alternative_fn_header(index)?; + self.emit_reduce_action(production)?; + rust!(self.out, "}}"); + } + } + Ok(()) + } + + fn emit_reduce_alternative_fn_header(&mut self, index: usize) -> io::Result<()> { + let loc_type = self.types.terminal_loc_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + + let parameters = vec![ + format!("{}action: {}", self.prefix, self.custom.state_type), + format!("{}lookahead_start: Option<&{}>", self.prefix, loc_type), + format!( + "{}states: &mut ::std::vec::Vec<{}>", + self.prefix, self.custom.state_type + ), + format!( + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, spanned_symbol_type + ), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Pub(Some(Path::from_id(Atom::from("crate")))), + format!("{}reduce{}", self.prefix, index), + vec![], + None, + parameters, + format!("(usize, {}, usize)", spanned_symbol_type,), + vec![] + )); + rust!(self.out, "{{"); + Ok(()) + } + + fn emit_reduce_action(&mut self, production: &Production) -> io::Result<()> { + rust!(self.out, "// {:?}", production); + + // Pop each of the symbols and their associated states. + for (index, symbol) in production.symbols.iter().enumerate().rev() { + let name = self.variant_name_for_symbol(symbol); + rust!( + self.out, + "let {}sym{} = {}pop_{}({}symbols);", + self.prefix, + index, + self.prefix, + name, + self.prefix + ); + } + let transfer_syms: Vec<_> = (0..production.symbols.len()) + .map(|i| format!("{}sym{}", self.prefix, i)) + .collect(); + + // Execute the action fn + // identify the "start" location for this production; this + // is typically the start of the first symbol we are + // reducing; but in the case of an empty production, it + // will be the last symbol pushed, or at worst `default`. + if let Some(first_sym) = transfer_syms.first() { + rust!( + self.out, + "let {}start = {}.0.clone();", + self.prefix, + first_sym + ); + } else { + // we pop no symbols, so grab from the top of the stack + // (unless we are in the start state, in which case the + // stack will be empty) + rust!( + self.out, + "let {}start = {}symbols.last().map(|s| s.2.clone()).unwrap_or_default();", + self.prefix, + self.prefix + ); + } + + // identify the "end" location for this production; + // this is typically the end of the last symbol we are reducing, + // but in the case of an empty production it will come from the + // lookahead + if let Some(last_sym) = transfer_syms.last() { + rust!(self.out, "let {}end = {}.2.clone();", self.prefix, last_sym); + } else { + rust!( + self.out, + "let {}end = {}lookahead_start.cloned().unwrap_or_else(|| \ + {}start.clone());", + self.prefix, + self.prefix, + self.prefix + ); + } + + let transfered_syms = transfer_syms.len(); + + let mut args = transfer_syms; + if transfered_syms == 0 { + args.push(format!("&{}start", self.prefix)); + args.push(format!("&{}end", self.prefix)); + } + + // invoke the action code + let is_fallible = self.grammar.action_is_fallible(production.action); + if is_fallible { + rust!( + self.out, + "let {}nt = match {}::{}action{}::<{}>({}{}) {{", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ); + rust!(self.out, "Ok(v) => v,"); + rust!(self.out, "Err(e) => return Some(Err(e)),"); + rust!(self.out, "}};"); + } else { + rust!( + self.out, + "let {}nt = {}::{}action{}::<{}>({}{});", + self.prefix, + self.action_module, + self.prefix, + production.action.index(), + Sep(", ", &self.grammar.non_lifetime_type_parameters()), + self.grammar.user_parameter_refs(), + Sep(", ", &args) + ); + } + + // if this is the final state, return it + if production.nonterminal == self.start_symbol { + rust!(self.out, "return Some(Ok({}nt));", self.prefix); + return Ok(()); + } + + // push the produced value on the stack + let name = + self.variant_name_for_symbol(&Symbol::Nonterminal(production.nonterminal.clone())); + rust!( + self.out, + "let {}symbol = ({}start, {}Symbol::{}({}nt), {}end);", + self.prefix, + self.prefix, + self.prefix, + name, + self.prefix, + self.prefix + ); + + // produce the index that we will use to extract the next state + // from GOTO array + let index = self.custom + .all_nonterminals + .iter() + .position(|x| *x == production.nonterminal) + .unwrap(); + rust!( + self.out, + "({len}, {p}symbol, {index})", + p = self.prefix, + index = index, + len = production.symbols.len() + ); + + Ok(()) + } + + fn variant_name_for_symbol(&mut self, s: &Symbol) -> String { + self.custom.variant_names[s].clone() + } + + fn emit_downcast_fns(&mut self) -> io::Result<()> { + for (ty, name) in self.custom.variants.clone() { + try!(self.emit_downcast_fn(&name, ty)); + } + + Ok(()) + } + + fn emit_downcast_fn(&mut self, variant_name: &str, variant_ty: TypeRepr) -> io::Result<()> { + let spanned_symbol_type = self.spanned_symbol_type(); + + rust!(self.out, "fn {}pop_{}<", self.prefix, variant_name); + for type_parameter in &self.custom.symbol_type_params { + rust!(self.out, " {},", type_parameter); + } + rust!(self.out, ">("); + rust!( + self.out, + "{}symbols: &mut ::std::vec::Vec<{}>", + self.prefix, + spanned_symbol_type + ); + rust!(self.out, ") -> {}", self.types.spanned_type(variant_ty)); + + if !self.custom.symbol_where_clauses.is_empty() { + rust!( + self.out, + " where {}", + Sep(", ", &self.custom.symbol_where_clauses) + ); + } + + rust!(self.out, " {{"); + + if DEBUG_PRINT { + rust!(self.out, "println!(\"pop_{}\");", variant_name); + } + rust!(self.out, "match {}symbols.pop().unwrap() {{", self.prefix); + rust!( + self.out, + "({}l, {}Symbol::{}({}v), {}r) => ({}l, {}v, {}r),", + self.prefix, + self.prefix, + variant_name, + self.prefix, + self.prefix, + self.prefix, + self.prefix, + self.prefix + ); + rust!(self.out, "_ => panic!(\"symbol type mismatch\")"); + rust!(self.out, "}}"); + + rust!(self.out, "}}"); + + Ok(()) + } + + /// Tries to invoke the error recovery function. Takes a bunch of + /// arguments from the surrounding state: + /// + /// - `tokens` -- name of a mut variable of type `I` where `I` is an iterator over tokens + /// - `symbols` -- name of symbols vector + /// - `last_location` -- name of `last_location` variable + /// - `opt_lookahead` -- see below + /// + /// The `opt_lookahead` tuple contains the lookahead -- if any -- + /// or None for EOF. It is a 4-tuple: (lookahead, integer, + /// tok_target, and eof_target). The idea is like this: on entry, + /// lookahead/integer have values. On exit, if the next token is + /// EOF, because we have dropped all remaining tokens, we will + /// `break` to `eof_target`. Otherwise, we will `continue` to + /// `tok_target` after storing next token into the variable + /// `lookahead` and its integer index into `integer`. + fn try_error_recovery( + &mut self, + tokens: &str, + states: &str, + symbols: &str, + last_location: &str, + opt_lookahead: Option<(&str, &str, &str, &str)>, + ) -> io::Result<()> { + if let Some((out_lookahead, out_integer, _, _)) = opt_lookahead { + rust!( + self.out, + "let mut {p}err_lookahead = Some({p}{});", + out_lookahead, + p = self.prefix, + ); + + rust!( + self.out, + "let mut {p}err_integer: Option = Some({p}{});", + out_integer, + p = self.prefix, + ); + } else { + rust!( + self.out, + "let mut {p}err_lookahead = None;", + p = self.prefix, + ); + + rust!( + self.out, + "let mut {p}err_integer: Option = None;", + p = self.prefix, + ); + } + + // Easy case: error recovery is disabled. Just error out. + if !self.grammar.uses_error_recovery { + let prefix = self.prefix; + self.let_unrecognized_token_error("error", &format!("{p}err_lookahead", p = prefix))?; + rust!(self.out, "return Err({p}error)", p = prefix); + return Ok(()); + } + + let phantom_data_expr = self.phantom_data_expr(); + + rust!( + self.out, + "match {p}error_recovery(\ + {upr} \ + &mut {p}{tokens}, \ + &mut {p}{states}, \ + &mut {p}{symbols}, \ + {p}{last_location}, \ + &mut {p}err_lookahead, \ + &mut {p}err_integer, \ + {phantom_data_expr}) {{", + upr = self.grammar.user_parameter_refs(), + tokens = tokens, + states = states, + symbols = symbols, + last_location = last_location, + phantom_data_expr = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "Err({p}e) => return Err({p}e),", p = self.prefix); + rust!( + self.out, + "Ok(Some({p}v)) => return Ok({p}v),", + p = self.prefix + ); + rust!(self.out, "Ok(None) => (),"); + rust!(self.out, "}}"); + + if let Some((out_lookahead, out_integer, tok_target, eof_target)) = opt_lookahead { + rust!( + self.out, + "match ({p}err_lookahead, {p}err_integer) {{", + p = self.prefix + ); + rust!(self.out, "(Some({p}l), Some({p}i)) => {{", p = self.prefix); + rust!(self.out, "{p}{} = {p}l;", out_lookahead, p = self.prefix); + rust!(self.out, "{p}{} = {p}i;", out_integer, p = self.prefix); + rust!(self.out, "continue '{p}{};", tok_target, p = self.prefix); + rust!(self.out, "}}"); // end arm + rust!(self.out, "_ => break '{p}{},", eof_target, p = self.prefix); + rust!(self.out, "}}"); // end match + } + + Ok(()) + } + + fn write_error_recovery_fn(&mut self) -> io::Result<()> { + // Easy case: error recovery is disabled. Just error out. + if !self.grammar.uses_error_recovery { + return Ok(()); + } + + let parse_error_type = self.types.parse_error_type(); + let error_type = self.types.error_type(); + let spanned_symbol_type = self.spanned_symbol_type(); + let triple_type = self.types.triple_type(); + let loc_type = self.types.terminal_loc_type(); + let prefix = self.prefix; + let actions_per_state = self.grammar.terminals.all.len(); + let start_type = self.types.nonterminal_type(&self.start_symbol); + + // The tokenizr, when we supply it, returns parse + // errors. Otherwise, it returns custom user errors. + let tok_error_type = if self.grammar.intern_token.is_some() { + parse_error_type + } else { + &error_type + }; + + let parameters = vec![ + format!("{p}tokens: &mut {p}I", p = self.prefix), + format!( + "{p}states: &mut ::std::vec::Vec<{typ}>", + p = self.prefix, + typ = self.custom.state_type + ), + format!( + "{p}symbols: &mut ::std::vec::Vec<{spanned_symbol_type}>", + spanned_symbol_type = spanned_symbol_type, + p = self.prefix + ), + format!( + "{p}last_location: &mut {loc_type}", + loc_type = loc_type, + p = self.prefix + ), + format!( + "{p}opt_lookahead: &mut Option<{triple_type}>", + triple_type = triple_type, + p = self.prefix + ), + format!("{p}opt_integer: &mut Option", p = self.prefix), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{p}error_recovery", p = self.prefix), + vec![format!("{p}I", p = self.prefix)], + None, + parameters, + format!( + "Result, {parse_error_type}>", + start_type = start_type, + parse_error_type = parse_error_type + ), + vec![ + format!( + "{p}I: Iterator\ + >", + triple_type = triple_type, + tok_error_type = tok_error_type, + p = self.prefix + ), + ] + )); + + rust!(self.out, "{{"); + + self.let_unrecognized_token_error( + "error", + &format!("{p}opt_lookahead.clone()", p = prefix), + )?; + + rust!(self.out, "let mut {}dropped_tokens = vec![];", prefix); + + let phantom_data_expr = self.phantom_data_expr(); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Initiating error recovery in state: {{}}\", \ + {p}states.last().unwrap());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - state stack size: {{}}\", \ + {p}states.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - symbol stack size: {{}}\", \ + {p}symbols.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - opt lookahead: {{:?}}\", \ + {p}opt_lookahead);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - opt integer: {{:?}}\", \ + {p}opt_integer);", + p = self.prefix + ); + } + + // We are going to insert ERROR into the lookahead. So, first, + // perform all reductions from current state triggered by having + // ERROR in the lookahead. + rust!(self.out, "loop {{"); + rust!( + self.out, + "let {p}state = *{p}states.last().unwrap() as usize;", + p = self.prefix + ); + + // Access the action with `error` as the lookahead; it is always final + // column in the row for this state + rust!( + self.out, + "let {p}action = {p}ACTION[{p}state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + rust!(self.out, "if {p}action >= 0 {{", p = self.prefix); + rust!(self.out, "break;"); + rust!(self.out, "}}"); + + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery reduces on action: {{}}", {}action);"#, + self.prefix + ); + } + + rust!( + self.out, + "let {p}lookahead_start = {p}opt_lookahead.as_ref().map(|l| &l.0);", + p = self.prefix + ); + rust!( + self.out, + "if let Some(r) = {p}reduce( \ + {upr} \ + {p}action, \ + {p}lookahead_start, \ + {p}states, \ + {p}symbols, \ + {phantoms} \ + ) {{", + upr = self.grammar.user_parameter_refs(), + phantoms = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "return Ok(Some(r?));"); + rust!(self.out, "}}"); + rust!(self.out, "}}"); // end reduce loop + + // Now try to find the recovery state. + + rust!( + self.out, + "let {p}states_len = {p}states.len();", + p = self.prefix + ); + + // I'd rather generate `let top = loop {{...}}` but I do not + // to retain compatibility with Rust 1.16.0. + rust!(self.out, "let {p}top0;", p = self.prefix); + + rust!(self.out, "'{p}find_state: loop {{", p = self.prefix); + + // Go backwards through the states... + rust!( + self.out, + "for {p}top in (0..{p}states_len).rev() {{", + p = self.prefix + ); + rust!( + self.out, + "let {p}state = {p}states[{p}top] as usize;", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Probing recovery from state {{}} (top = {{}}).\", {p}state, {p}top);", + p = self.prefix, + ); + } + // ...fetch action for error token... + rust!( + self.out, + "let {p}action = {p}ACTION[{p}state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + // ...if action is error or reduce, go to next state... + rust!( + self.out, + "if {p}action <= 0 {{ continue; }}", + p = self.prefix + ); + // ...otherwise, action *must* be shift. That would take us into `error_state`. + rust!( + self.out, + "let {p}error_state = {p}action - 1;", + p = self.prefix + ); + // If `error_state` can accept this lookahead, we are done. + rust!( + self.out, + "if {p}accepts(\ + {upr} \ + {p}error_state, \ + &{p}states[..{p}top + 1], \ + *{p}opt_integer, \ + {phantoms},\ + ) {{", + upr = self.grammar.user_parameter_refs(), + phantoms = phantom_data_expr, + p = self.prefix + ); + rust!(self.out, "{p}top0 = {p}top;", p = self.prefix); + rust!(self.out, "break '{p}find_state;", p = self.prefix); + rust!(self.out, "}}"); // end if + rust!(self.out, "}}"); // end for + + // Otherwise, if we did not find any enclosing state that can + // error and then accept this lookahead, we need to drop the current token. + + // Introduce an artificial loop here so we can break to + // it. This is a hack to re-use the `next_token` function. + rust!(self.out, "'{p}eof: loop {{", p = self.prefix); + rust!( + self.out, + "match {p}opt_lookahead.take() {{", + p = self.prefix + ); + + // If the lookahead is EOF, and there is no suitable state to + // recover to, we just have to abort EOF recovery. Find the + // first token that we dropped (if any) and use that as the + // point of error. + rust!(self.out, "None => {{"); + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery: cannot drop EOF; aborting");"# + ); + } + rust!(self.out, "return Err({}error)", prefix); + rust!(self.out, "}}"); // end None arm + + // Else, drop the current token and shift to the next. If there is a next + // token, we will `continue` to the start of the `'find_state` loop. + rust!(self.out, "Some(mut {p}lookahead) => {{", p = self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + r#"println!("Error recovery: dropping token `{{:?}}`", {p}lookahead);"#, + p = self.prefix, + ); + } + rust!( + self.out, + "{p}dropped_tokens.push({p}lookahead);", + p = self.prefix + ); + self.next_token("lookahead", "tokens", "last_location", "eof")?; + rust!(self.out, "let {p}integer;", p = self.prefix); + try!(self.token_to_integer("integer", "lookahead")); + rust!( + self.out, + "*{p}opt_lookahead = Some({p}lookahead);", + p = self.prefix + ); + rust!( + self.out, + "*{p}opt_integer = Some({p}integer);", + p = self.prefix + ); + rust!(self.out, "continue '{p}find_state;", p = self.prefix); + rust!(self.out, "}}"); // end Some(_) arm + rust!(self.out, "}}"); // end match + rust!(self.out, "}}"); // end 'eof loop + + // The `next_token` function will break here (out of the + // `'eof` loop) when we encounter EOF (i.e., there is no + // `next_token`). Just set `opt_lookahead` to `None` in that + // case. + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Encountered EOF during error recovery\");" + ); + } + rust!(self.out, "*{p}opt_lookahead = None;", p = self.prefix); + rust!(self.out, "*{p}opt_integer = None;", p = self.prefix); + rust!(self.out, "}};"); // end 'find_state loop + + // If we get here, we are ready to push the error recovery state. + + // We have to compute the span for the error recovery + // token. We do this first, before we pop any symbols off the + // stack. There are several possibilities, in order of + // preference. + // + // For the **start** of the message, we prefer to use the start of any + // popped states. This represents parts of the input we had consumed but + // had to roll back and ignore. + // + // Example: + // + // a + (b + /) + // ^ start point is here, since this `+` will be popped off + // + // If there are no popped states, but there *are* dropped tokens, we can use + // the start of those. + // + // Example: + // + // a + (b + c e) + // ^ start point would be here + // + // Finally, if there are no popped states *nor* dropped tokens, we can use + // the end of the top-most state. + + rust!(self.out, "let {p}top = {p}top0;", p = self.prefix); + rust!( + self.out, + "let {p}start = if let Some({p}popped_sym) = {p}symbols.get({p}top) {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from popped symbol {{:?}}\", \ + (&{p}popped_sym.0 .. &{p}popped_sym.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}popped_sym.0.clone()", p = self.prefix); + rust!( + self.out, + "}} else if let Some({p}dropped_token) = {p}dropped_tokens.first() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from dropped token {{:?}}\", \ + (&{p}dropped_token.0 .. &{p}dropped_token.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}dropped_token.0.clone()", p = self.prefix); + rust!(self.out, "}} else if {p}top > 0 {{", p = self.prefix); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span starts from end of last retained symbol\");" + ); + } + rust!( + self.out, + "{p}symbols[{p}top - 1].2.clone()", + p = self.prefix + ); + rust!(self.out, "}} else {{"); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span starts from default\");"); + } + rust!(self.out, "Default::default()"); + rust!(self.out, "}};"); // end if + + // For the end span, here are the possibilities: + // + // We prefer to use the end of the last dropped token. + // + // Examples: + // + // a + (b + /) + // --- + // a + (b c) + // - + // + // But, if there are no dropped tokens, we will use the end of the popped states, + // if any: + // + // a + / + // - + // + // If there are neither dropped tokens *or* popped states, + // then the user is simulating insertion of an operator. In + // this case, we prefer the start of the lookahead, but + // fallback to the start if we are at EOF. + // + // Examples: + // + // a + (b c) + // - + rust!( + self.out, + "let {p}end = if let Some({p}dropped_token) = {p}dropped_tokens.last() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span ends at end of last dropped token {{:?}}\", \ + (&{p}dropped_token.0 .. &{p}dropped_token.2));", + p = self.prefix, + ); + } + rust!(self.out, "{p}dropped_token.2.clone()", p = self.prefix); + rust!( + self.out, + "}} else if {p}states_len - 1 > {p}top {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Span ends at end of last popped symbol {{:?}}\", \ + {p}symbols.last().unwrap().2);", + p = self.prefix, + ); + } + rust!( + self.out, + "{p}symbols.last().unwrap().2.clone()", + p = self.prefix + ); + rust!( + self.out, + "}} else if let Some({p}lookahead) = {p}opt_lookahead.as_ref() {{", + p = self.prefix + ); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span ends at start of lookahead\");"); + } + rust!(self.out, "{p}lookahead.0.clone()", p = self.prefix); + rust!(self.out, "}} else {{"); + if DEBUG_PRINT { + rust!(self.out, "println!(\"Span ends at start\");"); + } + rust!(self.out, "{p}start.clone()", p = self.prefix); + rust!(self.out, "}};"); // end if + + // First we have to pop off the states we are skipping. Note + // that the bottom-most state doesn't have a symbol, so the + // symbols vector is always 1 shorter, hence we truncate its + // length to `{p}top` not `{p}top + 1`. + rust!(self.out, "{p}states.truncate({p}top + 1);", p = self.prefix); + rust!(self.out, "{p}symbols.truncate({p}top);", p = self.prefix); + + // Now load the new top state. + rust!( + self.out, + "let {p}recover_state = {p}states[{p}top] as usize;", + p = self.prefix + ); + + // Load the error action, which must be a shift. + rust!( + self.out, + "let {p}error_action = {p}ACTION[{p}recover_state * {} + {}];", + actions_per_state, + actions_per_state - 1, + p = self.prefix + ); + rust!( + self.out, + "let {p}error_state = {p}error_action - 1;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!(self.out, "println!(\"Recovering from error:\");"); + rust!( + self.out, + "println!(\" - recovery base state: {{}}\", {p}top);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new top state {{}}\", {p}recover_state);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - error state {{}}\", {p}error_state);", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new stack length: {{}}\", {p}states.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - new symbol length: {{}}\", {p}symbols.len());", + p = self.prefix + ); + rust!( + self.out, + "println!(\" - span {{:?}}..{{:?}}\", {p}start, {p}end);", + p = self.prefix + ); + } + + // Push the error state onto the stack. + rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); + rust!( + self.out, + "let {p}recovery = {}lalrpop_util::ErrorRecovery {{", + p = self.prefix + ); + rust!(self.out, "error: {p}error,", p = self.prefix); + rust!( + self.out, + "dropped_tokens: {p}dropped_tokens,", + p = self.prefix + ); + rust!(self.out, "}};"); + + let error_variant = self.variant_name_for_symbol(&Symbol::Terminal(TerminalString::Error)); + rust!( + self.out, + "{p}symbols.push(({p}start, {p}Symbol::{e}({p}recovery), {p}end));", + p = self.prefix, + e = error_variant + ); + + rust!(self.out, "Ok(None)"); + rust!(self.out, "}}"); // end fn + Ok(()) + } + + /// The `accepts` function + /// + /// ```ignore + /// fn __accepts() { + /// error_state: i32, + /// states: &Vec, + /// opt_integer: Option, + /// ) -> bool { + /// ... + /// } + /// ``` + /// + /// has the job of figuring out whether the given error state would + /// "accept" the given lookahead. We basically trace through the LR + /// automaton looking for one of two outcomes: + /// + /// - the lookahead is eventually shifted + /// - we reduce to the end state successfully (in the case of EOF). + /// + /// If we used the pure LR(1) algorithm, we wouldn't need this + /// function, because we would be guaranteed to error immediately + /// (and not after some number of reductions). But with an LALR + /// (or Lane Table) generated automaton, it is possible to reduce + /// some number of times before encountering an error. Failing to + /// take this into account can lead error recovery into an + /// infinite loop (see the `error_recovery_lalr_loop` test) or + /// produce crappy results (see `error_recovery_lock_in`). + fn write_accepts_fn(&mut self) -> io::Result<()> { + if !self.grammar.uses_error_recovery { + return Ok(()); + } + + let actions_per_state = self.grammar.terminals.all.len(); + let parameters = vec![ + format!( + "{p}error_state: {typ}", + p = self.prefix, + typ = self.custom.state_type + ), + format!( + "{p}states: & [{typ}]", + p = self.prefix, + typ = self.custom.state_type + ), + format!("{p}opt_integer: Option", p = self.prefix), + format!("_: {}", self.phantom_data_type()), + ]; + + try!(self.out.write_fn_header( + self.grammar, + &Visibility::Priv, + format!("{}accepts", self.prefix), + vec![], + None, + parameters, + format!("bool"), + vec![] + )); + rust!(self.out, "{{"); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"Testing whether state {{}} accepts token {{:?}}\", \ + {p}error_state, {p}opt_integer);", + p = self.prefix + ); + } + + // Create our own copy of the state stack to play with. + rust!( + self.out, + "let mut {p}states = {p}states.to_vec();", + p = self.prefix + ); + rust!(self.out, "{p}states.push({p}error_state);", p = self.prefix); + + rust!(self.out, "loop {{",); + + rust!( + self.out, + "let mut {}states_len = {}states.len();", + self.prefix, + self.prefix + ); + + rust!( + self.out, + "let {p}top = {p}states[{p}states_len - 1] as usize;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"accepts: top-state={{}} num-states={{}}\", {p}top, {p}states_len);", + p = self.prefix + ); + } + + rust!( + self.out, + "let {p}action = match {p}opt_integer {{", + p = self.prefix + ); + rust!( + self.out, + "None => {p}EOF_ACTION[{p}top as usize],", + p = self.prefix + ); + rust!( + self.out, + "Some({p}integer) => {p}ACTION[{p}top * {actions_per_state} + {p}integer],", + p = self.prefix, + actions_per_state = actions_per_state, + ); + rust!(self.out, "}};"); // end `match` + + // If we encounter an error action, we do **not** accept. + rust!( + self.out, + "if {p}action == 0 {{ return false; }}", + p = self.prefix + ); + + // If we encounter a shift action, we DO accept. + rust!( + self.out, + "if {p}action > 0 {{ return true; }}", + p = self.prefix + ); + + // If we encounter a reduce action, we need to simulate its + // effect on the state stack. + rust!( + self.out, + "let ({p}to_pop, {p}nt) = match -{p}action {{", + p = self.prefix + ); + for (production, index) in self.grammar + .nonterminals + .values() + .flat_map(|nt| &nt.productions) + .zip(1..) + { + if Tls::session().emit_comments { + rust!(self.out, "// simulate {:?}", production); + } + + // if we just reduced the start symbol, that is also an accept criteria + if production.nonterminal == self.start_symbol { + rust!(self.out, "{} => return true,", index); + } else { + let num_symbols = production.symbols.len(); + let nt = self.custom + .all_nonterminals + .iter() + .position(|x| *x == production.nonterminal) + .unwrap(); + rust!(self.out, "{} => {{", index); + if DEBUG_PRINT { + rust!( + self.out, + "println!(r##\"accepts: simulating {:?}\"##);", + production + ); + } + rust!( + self.out, + "({num_symbols}, {nt})", + num_symbols = num_symbols, + nt = nt + ); + rust!(self.out, "}}"); + } + } + rust!( + self.out, + "_ => panic!(\"invalid action code {{}}\", {}action)", + self.prefix + ); + rust!(self.out, "}};"); // end match + + rust!(self.out, "{p}states_len -= {p}to_pop;", p = self.prefix); + rust!( + self.out, + "{p}states.truncate({p}states_len);", + p = self.prefix + ); + rust!( + self.out, + "let {p}top = {p}states[{p}states_len - 1] as usize;", + p = self.prefix + ); + + if DEBUG_PRINT { + rust!( + self.out, + "println!(\"accepts: popped {{}} symbols, new top is {{}}, nt is {{}}\", \ + {p}to_pop, \ + {p}top, \ + {p}nt, \ + );", + p = self.prefix + ); + } + + rust!( + self.out, + "let {p}next_state = {p}GOTO[{p}top * {num_non_terminals} + {p}nt] - 1;", + p = self.prefix, + num_non_terminals = self.grammar.nonterminals.len(), + ); + + rust!(self.out, "{p}states.push({p}next_state);", p = self.prefix); + + rust!(self.out, "}}"); // end loop + rust!(self.out, "}}"); // end fn + + Ok(()) + } + + fn symbol_type(&self) -> String { + format!( + "{}Symbol<{}>", + self.prefix, + Sep(", ", &self.custom.symbol_type_params) + ) + } + + fn spanned_symbol_type(&self) -> String { + let loc_type = self.types.terminal_loc_type(); + format!("({},{},{})", loc_type, self.symbol_type(), loc_type) + } + + fn let_unrecognized_token_error(&mut self, error_var: &str, token: &str) -> io::Result<()> { + rust!( + self.out, + "let {}state = *{}states.last().unwrap() as usize;", + self.prefix, + self.prefix + ); + rust!( + self.out, + "let {}{} = {}lalrpop_util::ParseError::UnrecognizedToken {{", + self.prefix, + error_var, + self.prefix + ); + rust!(self.out, "token: {},", token); + rust!( + self.out, + "expected: {}expected_tokens({}state),", + self.prefix, + self.prefix + ); + rust!(self.out, "}};"); + Ok(()) + } + + fn emit_expected_tokens_fn(&mut self) -> io::Result<()> { + rust!( + self.out, + "fn {}expected_tokens({}state: usize) -> Vec<::std::string::String> {{", + self.prefix, + self.prefix + ); + + rust!( + self.out, + "const {}TERMINAL: &'static [&'static str] = &[", + self.prefix + ); + let all_terminals = if self.grammar.uses_error_recovery { + // Subtract one to exlude the error terminal + &self.grammar.terminals.all[..self.grammar.terminals.all.len() - 1] + } else { + &self.grammar.terminals.all + }; + for terminal in all_terminals { + // Three # should hopefully be enough to prevent any + // reasonable terminal from escaping the literal + rust!(self.out, "r###\"{}\"###,", terminal); + } + rust!(self.out, "];"); + + // Grab any terminals in the current state which would have resulted in a successful parse + rust!( + self.out, + "{}ACTION[({}state * {})..].iter().zip({}TERMINAL).filter_map(|(&state, terminal)| {{", + self.prefix, + self.prefix, + self.grammar.terminals.all.len(), + self.prefix + ); + rust!(self.out, "if state == 0 {{"); + rust!(self.out, "None"); + rust!(self.out, "}} else {{"); + rust!(self.out, "Some(terminal.to_string())"); + rust!(self.out, "}}"); + rust!(self.out, "}}).collect()"); + rust!(self.out, "}}"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/codegen/test_all.rs b/third_party/rust/lalrpop-snap/src/lr1/codegen/test_all.rs new file mode 100644 index 000000000000..e7327098f8b7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/codegen/test_all.rs @@ -0,0 +1,147 @@ +//! A compiler from an LR(1) table to a [recursive ascent] parser. +//! +//! [recursive ascent]: https://en.wikipedia.org/wiki/Recursive_ascent_parser + +use grammar::repr::{Grammar, NonterminalString, TypeParameter}; +use lr1::core::*; +use rust::RustWrite; +use std::io::{self, Write}; +use util::Sep; + +use super::base::CodeGenerator; + +pub fn compile<'grammar, W: Write>( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &[LR1State<'grammar>], + out: &mut RustWrite, +) -> io::Result<()> { + let mut ascent = + CodeGenerator::new_test_all(grammar, user_start_symbol, start_symbol, states, out); + ascent.write() +} + +struct TestAll; + +impl<'ascent, 'grammar, W: Write> CodeGenerator<'ascent, 'grammar, W, TestAll> { + fn new_test_all( + grammar: &'grammar Grammar, + user_start_symbol: NonterminalString, + start_symbol: NonterminalString, + states: &'ascent [LR1State<'grammar>], + out: &'ascent mut RustWrite, + ) -> Self { + CodeGenerator::new( + grammar, + user_start_symbol, + start_symbol, + states, + out, + true, + "super", + TestAll, + ) + } + + fn write(&mut self) -> io::Result<()> { + self.write_parse_mod(|this| { + try!(this.write_parser_fn()); + + rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(this.out, "mod {}ascent {{", this.prefix); + try!(super::ascent::compile( + this.grammar, + this.user_start_symbol.clone(), + this.start_symbol.clone(), + this.states, + "super::super::super", + this.out + )); + let pub_use = format!( + "{}use self::{}parse{}::{}Parser;", + this.grammar.nonterminals[&this.user_start_symbol].visibility, + this.prefix, + this.start_symbol, + this.user_start_symbol + ); + rust!(this.out, "{}", pub_use); + rust!(this.out, "}}"); + + rust!(this.out, "#[cfg_attr(rustfmt, rustfmt_skip)]"); + rust!(this.out, "mod {}parse_table {{", this.prefix); + try!(super::parse_table::compile( + this.grammar, + this.user_start_symbol.clone(), + this.start_symbol.clone(), + this.states, + "super::super::super", + this.out + )); + rust!(this.out, "{}", pub_use); + rust!(this.out, "}}"); + + Ok(()) + }) + } + + fn write_parser_fn(&mut self) -> io::Result<()> { + try!(self.start_parser_fn()); + + if self.grammar.intern_token.is_some() { + rust!(self.out, "let _ = self.builder;"); + } + // parse input using both methods: + try!(self.call_delegate("ascent")); + try!(self.call_delegate("parse_table")); + + // check that result is the same either way: + rust!( + self.out, + "assert_eq!({}ascent, {}parse_table);", + self.prefix, + self.prefix + ); + + rust!(self.out, "return {}ascent;", self.prefix); + + try!(self.end_parser_fn()); + + Ok(()) + } + + fn call_delegate(&mut self, delegate: &str) -> io::Result<()> { + let non_lifetimes: Vec<_> = self.grammar + .type_parameters + .iter() + .filter(|&tp| match *tp { + TypeParameter::Lifetime(_) => false, + TypeParameter::Id(_) => true, + }) + .cloned() + .collect(); + let parameters = if non_lifetimes.is_empty() { + String::new() + } else { + format!("::<{}>", Sep(", ", &non_lifetimes)) + }; + rust!( + self.out, + "let {}{} = {}{}::{}Parser::new().parse{}(", + self.prefix, + delegate, + self.prefix, + delegate, + self.user_start_symbol, + parameters + ); + for parameter in &self.grammar.parameters { + rust!(self.out, "{},", parameter.name); + } + if self.grammar.intern_token.is_none() { + rust!(self.out, "{}tokens0.clone(),", self.prefix); + } + rust!(self.out, ");"); + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/core/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/core/mod.rs new file mode 100644 index 000000000000..e746ae427169 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/core/mod.rs @@ -0,0 +1,333 @@ +//! Core LR(1) types. + +use collections::Map; +use grammar::repr::*; +use itertools::Itertools; +use std::fmt::{Debug, Display, Error, Formatter}; +use std::rc::Rc; +use util::Prefix; + +use super::lookahead::*; + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Item<'grammar, L: Lookahead> { + pub production: &'grammar Production, + /// the dot comes before `index`, so `index` would be 1 for X = A (*) B C + pub index: usize, + pub lookahead: L, +} + +pub type LR0Item<'grammar> = Item<'grammar, Nil>; + +pub type LR1Item<'grammar> = Item<'grammar, TokenSet>; + +impl<'grammar> Item<'grammar, Nil> { + pub fn lr0(production: &'grammar Production, index: usize) -> Self { + Item { + production: production, + index: index, + lookahead: Nil, + } + } +} + +impl<'grammar, L: Lookahead> Item<'grammar, L> { + pub fn with_lookahead(&self, l: L1) -> Item<'grammar, L1> { + Item { + production: self.production, + index: self.index, + lookahead: l, + } + } + + pub fn prefix(&self) -> &'grammar [Symbol] { + &self.production.symbols[..self.index] + } + + pub fn symbol_sets(&self) -> SymbolSets<'grammar> { + let symbols = &self.production.symbols; + if self.can_shift() { + SymbolSets { + prefix: &symbols[..self.index], + cursor: Some(&symbols[self.index]), + suffix: &symbols[self.index + 1..], + } + } else { + SymbolSets { + prefix: &symbols[..self.index], + cursor: None, + suffix: &[], + } + } + } + + pub fn to_lr0(&self) -> LR0Item<'grammar> { + Item { + production: self.production, + index: self.index, + lookahead: Nil, + } + } + + pub fn can_shift(&self) -> bool { + self.index < self.production.symbols.len() + } + + pub fn can_shift_nonterminal(&self, nt: &NonterminalString) -> bool { + match self.shift_symbol() { + Some((Symbol::Nonterminal(shifted), _)) => shifted == *nt, + _ => false, + } + } + + pub fn can_shift_terminal(&self, term: &TerminalString) -> bool { + match self.shift_symbol() { + Some((Symbol::Terminal(shifted), _)) => shifted == *term, + _ => false, + } + } + + pub fn can_reduce(&self) -> bool { + self.index == self.production.symbols.len() + } + + pub fn shifted_item(&self) -> Option<(Symbol, Item<'grammar, L>)> { + if self.can_shift() { + Some(( + self.production.symbols[self.index].clone(), + Item { + production: self.production, + index: self.index + 1, + lookahead: self.lookahead.clone(), + }, + )) + } else { + None + } + } + + pub fn shift_symbol(&self) -> Option<(Symbol, &[Symbol])> { + if self.can_shift() { + Some(( + self.production.symbols[self.index].clone(), + &self.production.symbols[self.index + 1..], + )) + } else { + None + } + } +} + +#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct StateIndex(pub usize); + +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Items<'grammar, L: Lookahead> { + pub vec: Rc>>, +} + +#[allow(dead_code)] +pub type LR0Items<'grammar> = Items<'grammar, Nil>; +#[allow(dead_code)] +pub type LR1Items<'grammar> = Items<'grammar, TokenSet>; + +#[derive(Clone, Debug)] +pub struct State<'grammar, L: Lookahead> { + pub index: StateIndex, + pub items: Items<'grammar, L>, + pub shifts: Map, + pub reductions: Vec<(L, &'grammar Production)>, + pub gotos: Map, +} + +pub type LR0State<'grammar> = State<'grammar, Nil>; +pub type LR1State<'grammar> = State<'grammar, TokenSet>; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum Action<'grammar> { + Shift(TerminalString, StateIndex), + Reduce(&'grammar Production), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Conflict<'grammar, L> { + // when in this state... + pub state: StateIndex, + + // with the following lookahead... + pub lookahead: L, + + // we can reduce... + pub production: &'grammar Production, + + // but we can also... + pub action: Action<'grammar>, +} + +#[allow(dead_code)] +pub type LR0Conflict<'grammar> = Conflict<'grammar, Nil>; +pub type LR1Conflict<'grammar> = Conflict<'grammar, TokenSet>; + +#[derive(Debug)] +pub struct TableConstructionError<'grammar, L: Lookahead> { + // LR(1) state set, possibly incomplete if construction is + // configured to terminate early. + pub states: Vec>, + + // Conflicts (non-empty) found in those states. + pub conflicts: Vec>, +} + +pub type LR0TableConstructionError<'grammar> = TableConstructionError<'grammar, Nil>; +pub type LR1TableConstructionError<'grammar> = TableConstructionError<'grammar, TokenSet>; +pub type LRResult<'grammar, L> = + Result>, TableConstructionError<'grammar, L>>; +pub type LR1Result<'grammar> = LRResult<'grammar, TokenSet>; + +impl<'grammar, L: Lookahead> Debug for Item<'grammar, L> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + try!(write!( + fmt, + "{} ={} (*){}", + self.production.nonterminal, + Prefix(" ", &self.production.symbols[..self.index]), + Prefix(" ", &self.production.symbols[self.index..]) + )); + + self.lookahead.fmt_as_item_suffix(fmt) + } +} + +impl Display for Token { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + Token::EOF => write!(fmt, "EOF"), + Token::Error => write!(fmt, "Error"), + Token::Terminal(ref s) => write!(fmt, "{}", s), + } + } +} + +impl Debug for Token { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self) + } +} + +impl Debug for StateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "S{}", self.0) + } +} + +impl Display for StateIndex { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +impl<'grammar, L: Lookahead> State<'grammar, L> { + /// Returns the set of symbols which must appear on the stack to + /// be in this state. This is the *maximum* prefix of any item, + /// basically. + pub fn max_prefix(&self) -> &'grammar [Symbol] { + // Each state fn takes as argument the longest prefix of any + // item. Note that all items must have compatible prefixes. + let prefix = self.items + .vec + .iter() + .map(|item| item.prefix()) + .max_by_key(|symbols| symbols.len()) + .unwrap(); + + debug_assert!( + self.items + .vec + .iter() + .all(|item| prefix.ends_with(&item.production.symbols[..item.index])) + ); + + prefix + } + + /// Returns the set of symbols from the stack that must be popped + /// for this state to return. If we have a state like: + /// + /// ``` + /// X = A B C (*) C + /// Y = B C (*) C + /// C = (*) ... + /// ``` + /// + /// This would return `[B, C]`. For every state other than the + /// start state, this will return a list of length at least 1. + /// For the start state, returns `[]`. + pub fn will_pop(&self) -> &'grammar [Symbol] { + let prefix = self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| item.prefix()) + .min_by_key(|symbols| symbols.len()) + .unwrap_or(&[]); + + debug_assert!( + self.items + .vec + .iter() + .filter(|item| item.index > 0) + .all(|item| item.prefix().ends_with(prefix)) + ); + + prefix + } + + pub fn will_push(&self) -> &[Symbol] { + self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| &item.production.symbols[item.index..]) + .min_by_key(|symbols| symbols.len()) + .unwrap_or(&[]) + } + + /// Returns the type of nonterminal that this state will produce; + /// if `None` is returned, then this state may produce more than + /// one kind of nonterminal. + /// + /// FIXME -- currently, the start state returns `None` instead of + /// the goal symbol. + pub fn will_produce(&self) -> Option { + let mut returnable_nonterminals: Vec<_> = self.items + .vec + .iter() + .filter(|item| item.index > 0) + .map(|item| item.production.nonterminal.clone()) + .dedup() + .collect(); + if returnable_nonterminals.len() == 1 { + returnable_nonterminals.pop() + } else { + None + } + } +} + +/// `A = B C (*) D E F` or `A = B C (*)` +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct SymbolSets<'grammar> { + pub prefix: &'grammar [Symbol], // both cases, [B, C] + pub cursor: Option<&'grammar Symbol>, // first [D], second [] + pub suffix: &'grammar [Symbol], // first [E, F], second [] +} + +impl<'grammar> SymbolSets<'grammar> { + pub fn new() -> Self { + SymbolSets { + prefix: &[], + cursor: None, + suffix: &[], + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/error/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/error/mod.rs new file mode 100644 index 000000000000..b397ed139f59 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/error/mod.rs @@ -0,0 +1,839 @@ +//! Error reporting. For now very stupid and simplistic. + +use collections::{set, Set}; +use lr1::trace::Tracer; +use lr1::core::*; +use lr1::example::{Example, ExampleStyles, ExampleSymbol}; +use lr1::first::FirstSets; +use lr1::lookahead::{Token, TokenSet}; +use itertools::Itertools; +use grammar::repr::*; +use message::Message; +use message::builder::{BodyCharacter, Builder, Character, MessageBuilder}; +use tls::Tls; + +#[cfg(test)] +mod test; + +pub fn report_error(grammar: &Grammar, error: &LR1TableConstructionError) -> Vec { + let mut cx = ErrorReportingCx::new(grammar, &error.states, &error.conflicts); + cx.report_errors() +} + +struct ErrorReportingCx<'cx, 'grammar: 'cx> { + grammar: &'grammar Grammar, + first_sets: FirstSets, + states: &'cx [LR1State<'grammar>], + conflicts: &'cx [LR1Conflict<'grammar>], +} + +#[derive(Debug)] +enum ConflictClassification { + /// The grammar is ambiguous. This means we have two examples of + /// precisely the same set of symbols which can be reduced in two + /// distinct ways. + Ambiguity { action: Example, reduce: Example }, + + /// The grammar is ambiguous, and moreover it looks like a + /// precedence error. This means that the reduction is to a + /// nonterminal `T` and the shift is some symbol sandwiched + /// between two instances of `T`. + Precedence { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + }, + + /// Suggest inlining `nonterminal`. Makes sense if there are two + /// levels in the reduction tree in both examples, and the suffix + /// after the inner reduction is the same in all cases. + SuggestInline { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + }, + + /// Like the previous, but suggest replacing `nonterminal` with + /// `symbol?`. Makes sense if the thing to be inlined consists of + /// two alternatives, `X = symbol | ()`. + SuggestQuestion { + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + symbol: Symbol, + }, + + /// Can't say much beyond that a conflict occurred. + InsufficientLookahead { action: Example, reduce: Example }, + + /// Really can't say *ANYTHING*. + Naive, +} + +type TokenConflict<'grammar> = Conflict<'grammar, Token>; + +impl<'cx, 'grammar> ErrorReportingCx<'cx, 'grammar> { + fn new( + grammar: &'grammar Grammar, + states: &'cx [LR1State<'grammar>], + conflicts: &'cx [LR1Conflict<'grammar>], + ) -> Self { + ErrorReportingCx { + grammar: grammar, + first_sets: FirstSets::new(grammar), + states: states, + conflicts: conflicts, + } + } + + fn report_errors(&mut self) -> Vec { + token_conflicts(self.conflicts) + .iter() + .map(|conflict| self.report_error(conflict)) + .collect() + } + + fn report_error(&mut self, conflict: &TokenConflict<'grammar>) -> Message { + match self.classify(conflict) { + ConflictClassification::Ambiguity { action, reduce } => { + self.report_error_ambiguity(conflict, action, reduce) + } + ConflictClassification::Precedence { + shift, + reduce, + nonterminal, + } => self.report_error_precedence(conflict, shift, reduce, nonterminal), + ConflictClassification::SuggestInline { + shift, + reduce, + nonterminal, + } => self.report_error_suggest_inline(conflict, shift, reduce, nonterminal), + ConflictClassification::SuggestQuestion { + shift, + reduce, + nonterminal, + symbol, + } => self.report_error_suggest_question(conflict, shift, reduce, nonterminal, symbol), + ConflictClassification::InsufficientLookahead { action, reduce } => { + self.report_error_insufficient_lookahead(conflict, action, reduce) + } + ConflictClassification::Naive => self.report_error_naive(conflict), + } + } + + fn report_error_ambiguity_core( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + ) -> Builder { + let styles = ExampleStyles::ambig(); + MessageBuilder::new(conflict.production.span) + .heading() + .text("Ambiguous grammar detected") + .end() + .body() + .begin_lines() + .wrap_text("The following symbols can be reduced in two ways:") + .push(reduce.to_symbol_list(reduce.symbols.len(), styles)) + .end() + .begin_lines() + .wrap_text("They could be reduced like so:") + .push(reduce.into_picture(styles)) + .end() + .begin_lines() + .wrap_text("Alternatively, they could be reduced like so:") + .push(shift.into_picture(styles)) + .end() + } + + fn report_error_ambiguity( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + ) -> Message { + self.report_error_ambiguity_core(conflict, shift, reduce) + .wrap_text( + "LALRPOP does not yet support ambiguous grammars. \ + See the LALRPOP manual for advice on \ + making your grammar unambiguous.", + ) + .end() + .end() + } + + fn report_error_precedence( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + ) -> Message { + self.report_error_ambiguity_core(conflict, shift, reduce) + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("This looks like a precedence error related to") + .push(nonterminal) + .verbatimed() + .punctuated(".") + .text("See the LALRPOP manual for advice on encoding precedence.") + .end() + .end() + .end() + } + + fn report_error_not_lr1_core( + &self, + conflict: &TokenConflict<'grammar>, + action: Example, + reduce: Example, + ) -> Builder { + let styles = ExampleStyles::new(); + let builder = MessageBuilder::new(conflict.production.span) + .heading() + .text("Local ambiguity detected") + .end() + .body(); + + let builder = builder + .begin_lines() + .begin_wrap() + .text("The problem arises after having observed the following symbols") + .text("in the input:") + .end() + .push(if action.cursor >= reduce.cursor { + action.to_symbol_list(action.cursor, styles) + } else { + reduce.to_symbol_list(reduce.cursor, styles) + }) + .begin_wrap(); + + let builder = match conflict.lookahead { + Token::Terminal(ref term) => builder + .text("At that point, if the next token is a") + .push(term.clone()) + .verbatimed() + .styled(Tls::session().cursor_symbol) + .punctuated(","), + Token::Error => builder.text("If an error has been found,"), + Token::EOF => builder.text("If the end of the input is reached,"), + }; + + let builder = builder + .text("then the parser can proceed in two different ways.") + .end() + .end(); + + let builder = self.describe_reduce(builder, styles, conflict.production, reduce, "First"); + + match conflict.action { + Action::Shift(ref lookahead, _) => { + self.describe_shift(builder, styles, lookahead.clone(), action, "Alternatively") + } + Action::Reduce(production) => { + self.describe_reduce(builder, styles, production, action, "Alternatively") + } + } + } + + fn describe_shift( + &self, + builder: Builder, + styles: ExampleStyles, + lookahead: TerminalString, + example: Example, + intro_word: &str, + ) -> Builder { + // A shift example looks like: + // + // ...p1 ...p2 (*) L ...s2 ...s1 + // | | | | + // | +-NT1-----------+ | + // | | + // | ... | + // | | + // +-NT2-----------------------+ + + let nt1 = example.reductions[0].nonterminal.clone(); + + builder + .begin_lines() + .begin_wrap() + .text(intro_word) + .punctuated(",") + .text("the parser could shift the") + .push(lookahead) + .verbatimed() + .text("token and later use it to construct a") + .push(nt1) + .verbatimed() + .punctuated(".") + .text("This might then yield a parse tree like") + .end() + .push(example.into_picture(styles)) + .end() + } + + fn describe_reduce( + &self, + builder: Builder, + styles: ExampleStyles, + production: &Production, + example: Example, + intro_word: &str, + ) -> Builder { + builder + .begin_lines() + .begin_wrap() + .text(intro_word) + .punctuated(",") + .text("the parser could execute the production at") + .push(production.span) + .punctuated(",") + .text("which would consume the top") + .text(production.symbols.len()) + .text("token(s) from the stack") + .text("and produce a") + .push(production.nonterminal.clone()) + .verbatimed() + .punctuated(".") + .text("This might then yield a parse tree like") + .end() + .push(example.into_picture(styles)) + .end() + } + + fn report_error_suggest_inline( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + ) -> Message { + let builder = self.report_error_not_lr1_core(conflict, shift, reduce); + + builder + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("It appears you could resolve this problem by adding") + .text("the annotation `#[inline]` to the definition of") + .push(nonterminal) + .verbatimed() + .punctuated(".") + .text("For more information, see the section on inlining") + .text("in the LALRPOP manual.") + .end() + .end() + .end() + } + + fn report_error_suggest_question( + &self, + conflict: &TokenConflict<'grammar>, + shift: Example, + reduce: Example, + nonterminal: NonterminalString, + symbol: Symbol, + ) -> Message { + let builder = self.report_error_not_lr1_core(conflict, shift, reduce); + + builder + .begin_wrap() + .text("Hint:") + .styled(Tls::session().hint_text) + .text("It appears you could resolve this problem by replacing") + .text("uses of") + .push(nonterminal.clone()) + .verbatimed() + .text("with") + .text(symbol) // intentionally disable coloring here, looks better + .adjacent_text("`", "?`") + .text("(or, alternatively, by adding the annotation `#[inline]` \ + to the definition of") + .push(nonterminal) + .punctuated(").") + .text("For more information, see the section on inlining") + .text("in the LALROP manual.") + .end() + .end() + .end() + } + + fn report_error_insufficient_lookahead( + &self, + conflict: &TokenConflict<'grammar>, + action: Example, + reduce: Example, + ) -> Message { + // The reduce example will look something like: + // + // + // ...p1 ...p2 (*) L ...s2 ...s1 + // | | | | + // | +-NT1-----------+ | + // | | | | + // | +-...-----------+ | + // | | | | + // | +-NTn-----------+ | + // | | + // +-NTn+1---------------------+ + // + // To solve the conflict, essentially, the user needs to + // modify the grammar so that `NTn` does not appear with `L` + // in its follow-set. How to guide them in this? + + let builder = self.report_error_not_lr1_core(conflict, action, reduce); + + builder + .wrap_text( + "See the LALRPOP manual for advice on \ + making your grammar LR(1).", + ) + .end() + .end() + } + + /// Naive error reporting. This is a fallback path which (I think) + /// never actually executes. + fn report_error_naive(&self, conflict: &TokenConflict<'grammar>) -> Message { + let mut builder = MessageBuilder::new(conflict.production.span) + .heading() + .text("Conflict detected") + .end() + .body() + .begin_lines() + .wrap_text("when in this state:") + .indented(); + for item in self.states[conflict.state.0].items.vec.iter() { + builder = builder.text(format!("{:?}", item)); + } + let mut builder = builder + .end() + .begin_wrap() + .text(format!("and looking at a token `{:?}`", conflict.lookahead)) + .text("we can reduce to a") + .push(conflict.production.nonterminal.clone()) + .verbatimed(); + builder = match conflict.action { + Action::Shift(..) => builder.text("but we can also shift"), + Action::Reduce(prod) => builder + .text("but we can also reduce to a") + .text(prod.nonterminal.clone()) + .verbatimed(), + }; + builder.end().end().end() + } + + fn classify(&mut self, conflict: &TokenConflict<'grammar>) -> ConflictClassification { + // Find examples from the conflicting action (either a shift + // or a reduce). + let mut action_examples = match conflict.action { + Action::Shift(..) => self.shift_examples(conflict), + Action::Reduce(production) => { + self.reduce_examples(conflict.state, production, conflict.lookahead.clone()) + } + }; + + // Find examples from the conflicting reduce. + let mut reduce_examples = self.reduce_examples( + conflict.state, + conflict.production, + conflict.lookahead.clone(), + ); + + // Prefer shorter examples to longer ones. + action_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); + reduce_examples.sort_by(|e, f| e.symbols.len().cmp(&f.symbols.len())); + + // This really shouldn't happen, but if we've failed to come + // up with examples, then report a "naive" error. + if action_examples.is_empty() || reduce_examples.is_empty() { + return ConflictClassification::Naive; + } + + if let Some(classification) = + self.try_classify_ambiguity(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + if let Some(classification) = + self.try_classify_question(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + if let Some(classification) = + self.try_classify_inline(conflict, &action_examples, &reduce_examples) + { + return classification; + } + + // Give up. Just grab an example from each and pair them up. + // If there aren't even two examples, something's pretty + // bogus, but we'll just call it naive. + action_examples + .into_iter() + .zip(reduce_examples) + .next() + .map( + |(action, reduce)| ConflictClassification::InsufficientLookahead { + action: action, + reduce: reduce, + }, + ) + .unwrap_or(ConflictClassification::Naive) + } + + fn try_classify_ambiguity( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + action_examples + .iter() + .cartesian_product(reduce_examples) + .filter(|&(action, reduce)| action.symbols == reduce.symbols) + .filter(|&(action, reduce)| action.cursor == reduce.cursor) + .map(|(action, reduce)| { + // Consider whether to call this a precedence + // error. We do this if we are stuck between reducing + // `T = T S T` and shifting `S`. + if let Action::Shift(ref term, _) = conflict.action { + let nt = &conflict.production.nonterminal; + if conflict.production.symbols.len() == 3 + && conflict.production.symbols[0] == Symbol::Nonterminal(nt.clone()) + && conflict.production.symbols[1] == Symbol::Terminal(term.clone()) + && conflict.production.symbols[2] == Symbol::Nonterminal(nt.clone()) + { + return ConflictClassification::Precedence { + shift: action.clone(), + reduce: reduce.clone(), + nonterminal: nt.clone(), + }; + } + } + ConflictClassification::Ambiguity { + action: action.clone(), + reduce: reduce.clone(), + } + }) + .next() + } + + fn try_classify_question( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + // If we get a shift/reduce conflict and the reduce + // is of a nonterminal like: + // + // T = { () | U } + // + // then suggest replacing T with U?. I'm being a bit lenient + // here since I do not KNOW that it will help, but it often + // does, and it's better style anyhow. + + if let Action::Reduce(_) = conflict.action { + return None; + } + + debug!( + "try_classify_question: action_examples={:?}", + action_examples + ); + debug!( + "try_classify_question: reduce_examples={:?}", + reduce_examples + ); + + let nt = &conflict.production.nonterminal; + let nt_productions = self.grammar.productions_for(nt); + if nt_productions.len() == 2 { + for &(i, j) in &[(0, 1), (1, 0)] { + if nt_productions[i].symbols.is_empty() && nt_productions[j].symbols.len() == 1 { + return Some(ConflictClassification::SuggestQuestion { + shift: action_examples[0].clone(), + reduce: reduce_examples[0].clone(), + nonterminal: nt.clone(), + symbol: nt_productions[j].symbols[0].clone(), + }); + } + } + } + + None + } + + fn try_classify_inline( + &self, + conflict: &TokenConflict<'grammar>, + action_examples: &[Example], + reduce_examples: &[Example], + ) -> Option { + // Inlining can help resolve a shift/reduce conflict because + // it defers the need to reduce. In particular, if we inlined + // all the reductions up until the last one, then we would be + // able to *shift* the lookahead instead of having to reduce. + // This can be helpful if we can see that shifting would let + // us delay reducing until the lookahead diverges. + + // Only applicable to shift/reduce: + if let Action::Reduce(_) = conflict.action { + return None; + } + + // FIXME: The logic here finds the first example where inline + // would help; but maybe we want to restrict it to cases + // where inlining would help *all* the examples...? + + action_examples + .iter() + .cartesian_product(reduce_examples) + .filter_map(|(shift, reduce)| { + if self.try_classify_inline_example(shift, reduce) { + let nt = &reduce.reductions[0].nonterminal; + Some(ConflictClassification::SuggestInline { + shift: shift.clone(), + reduce: reduce.clone(), + nonterminal: nt.clone(), + }) + } else { + None + } + }) + .next() + } + + fn try_classify_inline_example<'ex>(&self, shift: &Example, reduce: &Example) -> bool { + debug!("try_classify_inline_example({:?}, {:?})", shift, reduce); + + // In the case of shift, the example will look like + // + // ``` + // ... ... (*) L ...s1 ... + // | | | | + // | +-R0----------+ | + // | ... | + // +-Rn------------------+ + // ``` + // + // We want to extract the symbols ...s1: these are the + // things we are able to shift before being forced to + // make our next hard decision (to reduce R0 or not). + let shift_upcoming = &shift.symbols[shift.cursor + 1..shift.reductions[0].end]; + debug!( + "try_classify_inline_example: shift_upcoming={:?}", + shift_upcoming + ); + + // For the reduce, the example might look like + // + // ``` + // ... ... (*) ...s ... + // | | | | | + // | | +-R0-+ | + // | | ... | | + // | +--Ri--+ | + // | ... | + // +-R(i+1)----------+ + // ``` + // + // where Ri is the last reduction that requires + // shifting no additional symbols. In this case, if we + // inlined R0...Ri, then we know we can shift L. + let r0_end = reduce.reductions[0].end; + let i = reduce.reductions.iter().position(|r| r.end != r0_end); + let i = match i { + Some(v) => v, + None => return false, + }; + let ri = &reduce.reductions[i]; + let reduce_upcoming = &reduce.symbols[r0_end..ri.end]; + debug!( + "try_classify_inline_example: reduce_upcoming={:?} i={:?}", + reduce_upcoming, i + ); + + // For now, we only suggest inlining a single nonterminal, + // mostly because I am too lazy to weak the suggestion struct + // and error messages (but the rest of the code below doesn't + // make this assumption for the most part). + if i != 1 { + return false; + } + + // Make sure that all the things we are suggesting inlining + // are distinct so that we are not introducing a cycle. + let mut duplicates = set(); + if reduce.reductions[0..i + 1] + .iter() + .any(|r| !duplicates.insert(r.nonterminal.clone())) + { + return false; + } + + // Compare the two suffixes to see whether they + // diverge at some point. + shift_upcoming + .iter() + .zip(reduce_upcoming) + .filter_map(|(shift_sym, reduce_sym)| match (shift_sym, reduce_sym) { + (&ExampleSymbol::Symbol(ref shift_sym), &ExampleSymbol::Symbol(ref reduce_sym)) => { + if shift_sym == reduce_sym { + // same symbol on both; we'll be able to shift them + None + } else { + // different symbols: for this to work, must + // have disjoint first sets. Note that we + // consider a suffix matching epsilon to be + // potentially overlapping, though we could + // supply the actual lookahead for more precision. + let shift_first = self.first_sets.first0(&[shift_sym.clone()]); + let reduce_first = self.first_sets.first0(&[reduce_sym.clone()]); + if shift_first.is_disjoint(&reduce_first) { + Some(true) + } else { + Some(false) + } + } + } + _ => { + // we don't expect to encounter any + // epsilons, I don't think, because those + // only occur with an empty reduce at the + // top level + Some(false) + } + }) + .next() + .unwrap_or(false) + } + + fn shift_examples(&self, conflict: &TokenConflict<'grammar>) -> Vec { + log!(Tls::session(), Verbose, "Gathering shift examples"); + let state = &self.states[conflict.state.0]; + let conflicting_items = self.conflicting_shift_items(state, conflict); + conflicting_items + .into_iter() + .flat_map(|item| { + let tracer = Tracer::new(&self.first_sets, self.states); + let shift_trace = tracer.backtrace_shift(conflict.state, item); + let local_examples: Vec = shift_trace.lr0_examples(item).collect(); + local_examples + }) + .collect() + } + + fn reduce_examples( + &self, + state: StateIndex, + production: &'grammar Production, + lookahead: Token, + ) -> Vec { + log!(Tls::session(), Verbose, "Gathering reduce examples"); + let item = Item { + production: production, + index: production.symbols.len(), + lookahead: TokenSet::from(lookahead), + }; + let tracer = Tracer::new(&self.first_sets, self.states); + let reduce_trace = tracer.backtrace_reduce(state, item.to_lr0()); + reduce_trace.lr1_examples(&self.first_sets, &item).collect() + } + + fn conflicting_shift_items( + &self, + state: &LR1State<'grammar>, + conflict: &TokenConflict<'grammar>, + ) -> Set> { + // Lookahead must be a terminal, not EOF. + // Find an item J like `Bar = ... (*) L ...`. + let lookahead = Symbol::Terminal(conflict.lookahead.unwrap_terminal().clone()); + state + .items + .vec + .iter() + .filter(|i| i.can_shift()) + .filter(|i| i.production.symbols[i.index] == lookahead) + .map(|i| i.to_lr0()) + .collect() + } +} + +fn token_conflicts<'grammar>( + conflicts: &[Conflict<'grammar, TokenSet>], +) -> Vec> { + conflicts + .iter() + .flat_map(|conflict| { + conflict.lookahead.iter().map(move |token| Conflict { + state: conflict.state, + lookahead: token, + production: conflict.production, + action: conflict.action.clone(), + }) + }) + .collect() +} + +//fn choose_example<'grammar>(states: &[State<'grammar>], +// lookahead: Token, +// conflict: &TokenConflict<'grammar>) +//{ +// // Whenever we have a conflict in state S, there is always: +// // - a given lookahead L that permits some reduction, due to +// // an item I like `Foo = ... (*) [L]` +// // - another action that conflicts with R1. +// // +// // The backtrace code can give context to this item `I`, but the +// // problem is that it often results in many different contexts, +// // and we need to try and narrow those down to the one that will +// // help the user understand the problem. +// // +// // For that, we turn to the conflicting action, which can either be +// // a shift or reduce. Let's consider those two cases. +// // +// // ### Shift +// // +// // If the conflicting action is a shift, then there is at least +// // one item J in the state S like `Bar = ... (*) L ...`. We can +// // produce a backtrace from J and enumerate examples. We want to +// // find a pair of examples from I and J that share a common +// // prefix. +// // +// // ### Reduce +// // +// // If the conflicting action is a reduce, then there is at least +// // one item J in S like `Bar = ... (*) [L]`. We can produce a +// // backtrace for J and then search for an example that shares a +// // common prefix. +// +//} +// +//fn conflicting_item<'grammar>(state: &State<'grammar>, +// lookahead: Token, +// conflict: &TokenConflict<'grammar>) +// -> Item<'grammar> +//{ +// match conflict.action { +// Action::Shift(_) => { +// } +// Action::Reduce(production) => { +// // Must be at least some other item J in S like `Bar = ... (*) [L]`. +// state.items.vec.iter() +// .filter(|i| i.can_reduce()) +// .filter(|i| i.lookahead == lookahead) +// .filter(|i| i.production == production) +// .cloned() +// .next() +// .unwrap() +// } +// } +//} diff --git a/third_party/rust/lalrpop-snap/src/lr1/error/test.rs b/third_party/rust/lalrpop-snap/src/lr1/error/test.rs new file mode 100644 index 000000000000..0d64bfdeb3d7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/error/test.rs @@ -0,0 +1,187 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use tls::Tls; + +use super::{ConflictClassification, ErrorReportingCx}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +#[test] +fn priority_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::Precedence { + shift, + reduce, + nonterminal, + } => { + println!( + "shift={:#?}, reduce={:#?}, nonterminal={:?}", + shift, reduce, nonterminal + ); + assert_eq!(shift.symbols.len(), 5); // Ty -> Ty -> Ty + assert_eq!(shift.cursor, 3); // Ty -> Ty -> Ty + assert_eq!(shift.symbols, reduce.symbols); + assert_eq!(shift.cursor, reduce.cursor); + assert_eq!(nonterminal, nt("Ty")); + } + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn expr_braced_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Expr: () = { + "Id" => (), + "Id" "{" "}" => (), + "Expr" "+" "Id" => (), + "if" Expr "{" "}" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Expr")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::InsufficientLookahead { .. } => {} + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn suggest_question_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" + grammar; + + pub E: () = { + "L", + "&" OPT_L E + }; + + OPT_L: () = { + (), + "L" + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("E")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::SuggestQuestion { + shift: _, + reduce: _, + nonterminal, + symbol, + } => { + assert_eq!(nonterminal, nt("OPT_L")); + assert_eq!( + symbol, + Symbol::Terminal(TerminalString::quoted(Atom::from("L"))) + ); + } + r => panic!("wrong classification {:#?}", r), + } +} + +#[test] +fn suggest_inline_conflict() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r##" +grammar; + +pub ImportDecl: () = { + "import" ";" => (), + "import" "." "*" ";" => (), +}; + +Path: () = { + )*> => () +}; + +Ident = r#"[a-zA-Z][a-zA-Z0-9]*"#; +"##, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("ImportDecl")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + let conflict = &conflicts[0]; + + println!("conflict={:?}", conflict); + + match cx.classify(conflict) { + ConflictClassification::SuggestInline { + shift: _, + reduce: _, + nonterminal, + } => { + assert_eq!(nonterminal, nt("Path")); + } + r => panic!("wrong classification {:#?}", r), + } +} + +/// This example used to cause an out-of-bounds error. +#[test] +fn issue_249() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r##" +grammar; + +pub Func = StructDecl* VarDecl*; +StructDecl = "<" StructParameter* ">"; +StructParameter = "may_dangle"?; +VarDecl = "let"; +"##, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let err = build_states(&grammar, nt("Func")).unwrap_err(); + let mut cx = ErrorReportingCx::new(&grammar, &err.states, &err.conflicts); + let conflicts = super::token_conflicts(&err.conflicts); + for conflict in &conflicts { + println!("conflict={:?}", conflict); + cx.classify(conflict); + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/example/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/example/mod.rs new file mode 100644 index 000000000000..768c9170cfd9 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/example/mod.rs @@ -0,0 +1,409 @@ +//! Code to compute example inputs given a backtrace. + +use ascii_canvas::AsciiView; +use message::Content; +use message::builder::InlineBuilder; +use grammar::repr::*; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use tls::Tls; + +#[cfg(test)] +mod test; + +/// An "example" input and the way it was derived. This can be +/// serialized into useful text. For example, it might represent +/// something like this: +/// +/// ``` +/// Looking at +/// | +/// v +/// Ty "->" Ty "->" Ty +/// | | | +/// +-Ty-----+ | +/// | | +/// +-Ty-------------+ +/// ``` +/// +/// The top-line is the `symbols` vector. The groupings below are +/// stored in the `reductions` vector, in order from smallest to +/// largest (they are always properly nested). The `cursor` field +/// indicates the current lookahead token. +/// +/// The `symbols` vector is actually `Option` to account +/// for empty reductions: +/// +/// ``` +/// A B +/// | | | | +/// | +-Y-+ | +/// +-Z-----+ +/// ``` +/// +/// The "empty space" between A and B would be represented as `None`. +#[derive(Clone, Debug)] +pub struct Example { + pub symbols: Vec, + pub cursor: usize, + pub reductions: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ExampleSymbol { + Symbol(Symbol), + Epsilon, +} + +#[derive(Copy, Clone, Default)] +pub struct ExampleStyles { + pub before_cursor: Style, + pub on_cursor: Style, + pub after_cursor: Style, +} + +#[derive(Clone, Debug)] +pub struct Reduction { + pub start: usize, + pub end: usize, + pub nonterminal: NonterminalString, +} + +impl Example { + /// Length of each symbol. Each will need *at least* that amount + /// of space. :) Measure in characters, under the assumption of a + /// mono-spaced font. Also add a final `0` marker which will serve + /// as the end position. + fn lengths(&self) -> Vec { + self.symbols + .iter() + .map(|s| match *s { + ExampleSymbol::Symbol(ref s) => format!("{}", s).chars().count(), + ExampleSymbol::Epsilon => 1, // display as " " + }) + .chain(Some(0)) + .collect() + } + + /// Extract a prefix of the list of symbols from this `Example` + /// and make a styled list of them, like: + /// + /// Ty "->" Ty -> "Ty" + pub fn to_symbol_list(&self, length: usize, styles: ExampleStyles) -> Box { + let mut builder = InlineBuilder::new().begin_spaced(); + + for (index, symbol) in self.symbols[..length].iter().enumerate() { + let style = if index < self.cursor { + styles.before_cursor + } else if index > self.cursor { + styles.after_cursor + } else { + match *symbol { + ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, + ExampleSymbol::Symbol(Symbol::Nonterminal(_)) => styles.after_cursor, + ExampleSymbol::Epsilon => styles.after_cursor, + } + }; + + if let &ExampleSymbol::Symbol(ref s) = symbol { + builder = builder.push(s.clone()).styled(style); + } + } + + builder.end().indented().end() + } + + /// Render the example into a styled diagram suitable for + /// embedding in an error message. + pub fn into_picture(self, styles: ExampleStyles) -> Box { + let lengths = self.lengths(); + let positions = self.positions(&lengths); + InlineBuilder::new() + .push(Box::new(ExamplePicture { + example: self, + positions: positions, + styles: styles, + })) + .indented() + .end() + } + + fn starting_positions(&self, lengths: &[usize]) -> Vec { + lengths + .iter() + .scan(0, |counter, &len| { + let start = *counter; + + // Leave space for "NT " (if "NT" is the name + // of the nonterminal). + *counter = start + len + 1; + + Some(start) + }) + .collect() + } + + /// Start index where each symbol in the example should appear, + /// measured in characters. These are spaced to leave enough room + /// for the reductions below. + fn positions(&self, lengths: &[usize]) -> Vec { + // Initially, position each symbol with one space in between, + // like: + // + // X Y Z + let mut positions = self.starting_positions(lengths); + + // Adjust spacing to account for the nonterminal labels + // we will have to add. It will display + // like this: + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-Label---+ + // + // But if the label is long we may have to adjust the spacing + // of the covered items (here, we changed them to two spaces, + // except the first gap, which got 3 spaces): + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + for &Reduction { + start, + end, + ref nonterminal, + } in &self.reductions + { + let nt_len = format!("{}", nonterminal).chars().count(); + + // Number of symbols we are reducing. This should always + // be non-zero because even in the case of a \epsilon + // rule, we ought to be have a `None` entry in the symbol array. + let num_syms = end - start; + assert!(num_syms > 0); + + // Let's use the expansion from above as our running example. + // We start out with positions like this: + // + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + // + // But we want LongLabel to end at D4. No good. + + // Start of first symbol to be reduced. Here, 0. + // + // A1 B2 C3 D4 + // ^ here + let start_position = positions[start]; + + // End of last symbol to be reduced. Here, 11. + // + // A1 B2 C3 D4 E5 + // ^ positions[end] + // ^ here -- positions[end] - 1 + let end_position = positions[end] - 1; + + // We need space to draw `+-Label-+` between + // start_position and end_position. + let required_len = nt_len + 4; // here, 15 + let actual_len = end_position - start_position; // here, 10 + if required_len < actual_len { + continue; // Got enough space, all set. + } + + // Have to add `difference` characters altogether. + let difference = required_len - actual_len; // here, 4 + + // Increment over everything that is not part of this nonterminal. + // In the example above, that is E5 and F6. + shift(&mut positions[end..], difference); + + if num_syms > 1 { + // If there is just one symbol being reduced here, + // then we have shifted over the things that follow + // it, and we are done. This would be a case like: + // + // X Y Z + // | | + // +-Label-+ + // + // (which maybe ought to be rendered slightly + // differently). + // + // But if there are multiple symbols, we're not quite + // done, because there would be an unsightly gap: + // + // (gaps) + // | | | + // v v v + // A1 B2 C3 D4 E5 F6 + // | | + // +-LongLabel22-+ + // + // we'd like to make things line up, so we have to + // distribute that extra space internally by + // increasing the "gaps" (marked above) as evenly as + // possible (basically, full justification). + // + // We do this by dividing up the spaces evenly and + // then taking the remainder `N` and distributing 1 + // extra to the first N. + let num_gaps = num_syms - 1; // number of gaps we can adjust. Here, 3. + let amount = difference / num_gaps; // what to add to each gap. Here, 1. + let extra = difference % num_gaps; // the remainder. Here, 1. + + // For the first `extra` symbols, give them amount + 1 + // extra space. After that, just amount. (O(n^2). Sue me.) + for i in 0..extra { + shift(&mut positions[start + 1 + i..end], amount + 1); + } + for i in extra..num_gaps { + shift(&mut positions[start + 1 + i..end], amount); + } + } + } + + positions + } + + #[cfg(test)] + pub fn paint_unstyled(&self) -> Vec<::ascii_canvas::Row> { + use std::default::Default; + let this = self.clone(); + let content = this.into_picture(ExampleStyles::default()); + let min_width = content.min_width(); + let canvas = content.emit_to_canvas(min_width); + canvas.to_strings() + } + + fn paint_on(&self, styles: &ExampleStyles, positions: &[usize], view: &mut AsciiView) { + // Draw the brackets for each reduction: + for (index, reduction) in self.reductions.iter().enumerate() { + let start_column = positions[reduction.start]; + let end_column = positions[reduction.end] - 1; + let row = 1 + index; + view.draw_vertical_line(0..row + 1, start_column); + view.draw_vertical_line(0..row + 1, end_column - 1); + view.draw_horizontal_line(row, start_column..end_column); + } + + // Write the labels for each reduction. Do this after the + // brackets so that ascii canvas can convert `|` to `+` + // without interfering with the text (in case of weird overlap). + let session = Tls::session(); + for (index, reduction) in self.reductions.iter().enumerate() { + let column = positions[reduction.start] + 2; + let row = 1 + index; + view.write_chars( + row, + column, + reduction.nonterminal.to_string().chars(), + session.nonterminal_symbol, + ); + } + + // Write the labels on top: + // A1 B2 C3 D4 E5 F6 + self.paint_symbols_on(&self.symbols, &positions, styles, view); + } + + fn paint_symbols_on( + &self, + symbols: &[ExampleSymbol], + positions: &[usize], + styles: &ExampleStyles, + view: &mut AsciiView, + ) { + let session = Tls::session(); + for (index, ex_symbol) in symbols.iter().enumerate() { + let style = if index < self.cursor { + styles.before_cursor + } else if index == self.cursor { + // Only display actual terminals in the "on-cursor" + // font, because it might be misleading to show a + // nonterminal that way. Really it'd be nice to expand + // so that the cursor is always a terminal. + match *ex_symbol { + ExampleSymbol::Symbol(Symbol::Terminal(_)) => styles.on_cursor, + _ => styles.after_cursor, + } + } else { + styles.after_cursor + }; + + let column = positions[index]; + match *ex_symbol { + ExampleSymbol::Symbol(Symbol::Terminal(ref term)) => { + view.write_chars( + 0, + column, + term.to_string().chars(), + style.with(session.terminal_symbol), + ); + } + ExampleSymbol::Symbol(Symbol::Nonterminal(ref nt)) => { + view.write_chars( + 0, + column, + nt.to_string().chars(), + style.with(session.nonterminal_symbol), + ); + } + ExampleSymbol::Epsilon => {} + } + } + } +} + +struct ExamplePicture { + example: Example, + positions: Vec, + styles: ExampleStyles, +} + +impl Content for ExamplePicture { + fn min_width(&self) -> usize { + *self.positions.last().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + self.example.paint_on(&self.styles, &self.positions, view); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +impl Debug for ExamplePicture { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Debug::fmt(&self.example, fmt) + } +} + +fn shift(positions: &mut [usize], amount: usize) { + for position in positions { + *position += amount; + } +} + +impl ExampleStyles { + pub fn ambig() -> Self { + let session = Tls::session(); + ExampleStyles { + before_cursor: session.ambig_symbols, + on_cursor: session.ambig_symbols, + after_cursor: session.ambig_symbols, + } + } + + pub fn new() -> Self { + let session = Tls::session(); + ExampleStyles { + before_cursor: session.observed_symbols, + on_cursor: session.cursor_symbol, + after_cursor: session.unobserved_symbols, + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/example/test.rs b/third_party/rust/lalrpop-snap/src/lr1/example/test.rs new file mode 100644 index 000000000000..82893472a588 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/example/test.rs @@ -0,0 +1,195 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use test_util::expect_debug; +use tls::Tls; + +use super::{Example, ExampleSymbol, Reduction}; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +macro_rules! sym { + (ε) => { ExampleSymbol::Epsilon }; + ($t:ident) => { ExampleSymbol::Symbol(Symbol::Nonterminal(nt(stringify!($t)))) } +} + +macro_rules! syms { + ($($t:tt),*) => { + vec![$(sym!($t)),*] + } +} + +// 01234567890123456789012 +// A1 B2 C3 D4 E5 F6 +// | | | +// +-LongLabel22-+ | +// | | +// +-Label-------------+ +fn long_label_1_example() -> Example { + Example { + symbols: syms!(A1, B2, C3, D4, E5, F6), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 4, + nonterminal: nt("LongLabel22"), + }, + Reduction { + start: 0, + end: 6, + nonterminal: nt("Label"), + }, + ], + } +} + +#[test] +fn long_label_1_positions() { + let _tls = Tls::test(); + let example = long_label_1_example(); + let lengths = example.lengths(); + let positions = example.positions(&lengths); + assert_eq!(positions, vec![0, 5, 9, 13, 16, 19, 22]); +} + +#[test] +fn long_label_1_strings() { + let _tls = Tls::test(); + let strings = long_label_1_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " A1 B2 C3 D4 E5 F6", + " ├─LongLabel22─┘ │", + " └─Label─────────────┘" +] +"#.trim(), + ); +} + +// Example with some empty sequences and +// other edge cases. +// +// 012345678901234567890123456789012345 +// A1 B2 C3 D4 E5 F6 +// | | | | | | | +// +-X-+ | | | | | +// | | | | | | +// +-MegaLongLabel-+ | | | | +// | | | | +// +-Y-+ | | +// | | +// +-Z-+ +fn empty_labels_example() -> Example { + Example { + // 0 1 2 3 4 5 6 7 + symbols: syms!(ε, A1, B2, C3, D4, E5, ε, F6), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 1, + nonterminal: nt("X"), + }, + Reduction { + start: 0, + end: 4, + nonterminal: nt("MegaLongLabel"), + }, + Reduction { + start: 6, + end: 7, + nonterminal: nt("Y"), + }, + Reduction { + start: 7, + end: 8, + nonterminal: nt("Z"), + }, + ], + } +} + +#[test] +fn empty_labels_positions() { + let _tls = Tls::test(); + let example = empty_labels_example(); + let lengths = example.lengths(); + let positions = example.positions(&lengths); + // A1 B2 C3 D4 E5 F6 + assert_eq!(positions, vec![0, 7, 11, 15, 18, 21, 24, 30, 36]); +} + +#[test] +fn empty_labels_strings() { + let _tls = Tls::test(); + let strings = empty_labels_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " ╷ ╷ A1 B2 C3 D4 E5 ╷ ╷ F6 ╷", + " ├─X──┘ │ │ │ │ │", + " └─MegaLongLabel─┘ │ │ │ │", + " └─Y─┘ │ │", + " └─Z─┘" +] +"#.trim(), + ); +} + +// _return_ _A_ Expression _B_ +// | | | +// +-ExprAtom---+ | +// | | | +// +-ExprSuffix-+ | +// | | +// +-ExprSuffix--------------------+ +fn single_token_example() -> Example { + Example { + // 0 1 2 3 4 5 6 7 + symbols: syms!(_return_, _A_, Expression, _B_), + cursor: 5, + reductions: vec![ + Reduction { + start: 0, + end: 1, + nonterminal: nt("ExprAtom"), + }, + Reduction { + start: 0, + end: 1, + nonterminal: nt("ExprSuffix"), + }, + Reduction { + start: 0, + end: 4, + nonterminal: nt("ExprSuffix"), + }, + ], + } +} + +#[test] +fn single_token_strings() { + let _tls = Tls::test(); + let strings = single_token_example().paint_unstyled(); + expect_debug( + strings, + r#" +[ + " _return_ ╷ _A_ Expression _B_", + " ├─ExprAtom───┤ │", + " ├─ExprSuffix─┘ │", + " └─ExprSuffix────────────────────┘" +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/first/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/first/mod.rs new file mode 100644 index 000000000000..431570dedfe2 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/first/mod.rs @@ -0,0 +1,97 @@ +//! First set construction and computation. + +use collections::{map, Map}; +use grammar::repr::*; +use lr1::lookahead::{Token, TokenSet}; + +#[cfg(test)] +mod test; + +#[derive(Clone)] +pub struct FirstSets { + map: Map, +} + +impl FirstSets { + pub fn new(grammar: &Grammar) -> FirstSets { + let mut this = FirstSets { map: map() }; + let mut changed = true; + while changed { + changed = false; + for production in grammar.nonterminals.values().flat_map(|p| &p.productions) { + let nt = &production.nonterminal; + let lookahead = this.first0(&production.symbols); + let first_set = this.map + .entry(nt.clone()) + .or_insert_with(|| TokenSet::new()); + changed |= first_set.union_with(&lookahead); + } + } + this + } + + /// Returns `FIRST(...symbols)`. If `...symbols` may derive + /// epsilon, then this returned set will include EOF. (This is + /// kind of repurposing EOF to serve as a binary flag of sorts.) + pub fn first0<'s, I>(&self, symbols: I) -> TokenSet + where + I: IntoIterator, + { + let mut result = TokenSet::new(); + + for symbol in symbols { + match *symbol { + Symbol::Terminal(ref t) => { + result.insert(Token::Terminal(t.clone())); + return result; + } + + Symbol::Nonterminal(ref nt) => { + let mut empty_prod = false; + match self.map.get(nt) { + None => { + // This should only happen during set + // construction; it corresponds to an + // entry that has not yet been + // built. Otherwise, it would mean a + // terminal with no productions. Either + // way, the resulting first set should be + // empty. + } + Some(set) => for lookahead in set.iter() { + match lookahead { + Token::EOF => { + empty_prod = true; + } + Token::Error | Token::Terminal(_) => { + result.insert(lookahead); + } + } + }, + } + if !empty_prod { + return result; + } + } + } + } + + // control only reaches here if either symbols is empty, or it + // consists of nonterminals all of which may derive epsilon + result.insert(Token::EOF); + result + } + + pub fn first1(&self, symbols: &[Symbol], lookahead: &TokenSet) -> TokenSet { + let mut set = self.first0(symbols); + + // we use EOF as the signal that `symbols` derives epsilon: + let epsilon = set.take_eof(); + + if epsilon { + set.union_with(&lookahead); + } + + set + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/first/test.rs b/third_party/rust/lalrpop-snap/src/lr1/first/test.rs new file mode 100644 index 000000000000..e020f13d6893 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/first/test.rs @@ -0,0 +1,93 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::lookahead::{Token, TokenSet}; +use lr1::lookahead::Token::EOF; +use lr1::tls::Lr1Tls; +use test_util::normalized_grammar; +use super::FirstSets; + +pub fn nt(t: &str) -> Symbol { + Symbol::Nonterminal(NonterminalString(Atom::from(t))) +} + +pub fn term(t: &str) -> Symbol { + Symbol::Terminal(TerminalString::quoted(Atom::from(t))) +} + +fn la(t: &str) -> Token { + Token::Terminal(TerminalString::quoted(Atom::from(t))) +} + +fn first0(first: &FirstSets, symbols: &[Symbol]) -> Vec { + let v = first.first0(symbols); + v.iter().collect() +} + +fn first1(first: &FirstSets, symbols: &[Symbol], lookahead: Token) -> Vec { + let v = first.first1(symbols, &TokenSet::from(lookahead)); + v.iter().collect() +} + +#[test] +fn basic_first1() { + let grammar = normalized_grammar( + r#" + grammar; + A = B "C"; + B: Option = { + "D" => Some(1), + => None + }; + X = "E"; // intentionally unreachable +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + + assert_eq!(first1(&first_sets, &[nt("A")], EOF), vec![la("C"), la("D")]); + + assert_eq!(first1(&first_sets, &[nt("B")], EOF), vec![la("D"), EOF]); + + assert_eq!( + first1(&first_sets, &[nt("B"), term("E")], EOF), + vec![la("D"), la("E")] + ); + + assert_eq!( + first1(&first_sets, &[nt("B"), nt("X")], EOF), + vec![la("D"), la("E")] + ); +} + +#[test] +fn basic_first0() { + let grammar = normalized_grammar( + r#" + grammar; + A = B "C"; + B: Option = { + "D" => Some(1), + => None + }; + X = "E"; // intentionally unreachable +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + + assert_eq!(first0(&first_sets, &[nt("A")]), vec![la("C"), la("D")]); + + assert_eq!(first0(&first_sets, &[nt("B")]), vec![la("D"), EOF]); + + assert_eq!( + first0(&first_sets, &[nt("B"), term("E")]), + vec![la("D"), la("E")] + ); + + assert_eq!( + first0(&first_sets, &[nt("B"), nt("X")]), + vec![la("D"), la("E")] + ); + + assert_eq!(first0(&first_sets, &[nt("X")]), vec![la("E")]); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/interpret.rs b/third_party/rust/lalrpop-snap/src/lr1/interpret.rs new file mode 100644 index 000000000000..89dddb137794 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/interpret.rs @@ -0,0 +1,206 @@ +//! LR(1) interpeter. Just builds up parse trees. Intended for testing. + +use lr1::core::*; +use lr1::lookahead::*; +use generate::ParseTree; +use grammar::repr::*; +use std::iter::IntoIterator; +use std::fmt::{Debug, Display, Error, Formatter}; +use util::Sep; + +pub type InterpretError<'grammar, L> = (&'grammar State<'grammar, L>, Token); + +/// Feed in the given tokens and then EOF, returning the final parse tree that is reduced. +pub fn interpret<'grammar, L>( + states: &'grammar [State<'grammar, L>], + tokens: Vec, +) -> Result> +where + L: LookaheadInterpret, +{ + println!("interpret(tokens={:?})", tokens); + let mut m = Machine::new(states); + m.execute(tokens.into_iter()) +} + +/// Feed in the given tokens and returns the states on the stack. +pub fn interpret_partial<'grammar, TOKENS, L>( + states: &'grammar [State<'grammar, L>], + tokens: TOKENS, +) -> Result, InterpretError<'grammar, L>> +where + TOKENS: IntoIterator, + L: LookaheadInterpret, +{ + let mut m = Machine::new(states); + try!(m.execute_partial(tokens.into_iter())); + Ok(m.state_stack) +} + +struct Machine<'grammar, L: LookaheadInterpret + 'grammar> { + states: &'grammar [State<'grammar, L>], + state_stack: Vec, + data_stack: Vec, +} + +impl<'grammar, L> Machine<'grammar, L> +where + L: LookaheadInterpret, +{ + fn new(states: &'grammar [State<'grammar, L>]) -> Machine<'grammar, L> { + Machine { + states: states, + state_stack: vec![], + data_stack: vec![], + } + } + + fn top_state(&self) -> &'grammar State<'grammar, L> { + let index = self.state_stack.last().unwrap(); + &self.states[index.0] + } + + fn execute_partial( + &mut self, + mut tokens: TOKENS, + ) -> Result<(), InterpretError<'grammar, L>> + where + TOKENS: Iterator, + { + assert!(self.state_stack.is_empty()); + assert!(self.data_stack.is_empty()); + + self.state_stack.push(StateIndex(0)); + + let mut token = tokens.next(); + while let Some(terminal) = token.clone() { + let state = self.top_state(); + + println!("state={:?}", state); + println!("terminal={:?}", terminal); + + // check whether we can shift this token + if let Some(&next_index) = state.shifts.get(&terminal) { + self.data_stack.push(ParseTree::Terminal(terminal.clone())); + self.state_stack.push(next_index); + token = tokens.next(); + } else if let Some(production) = L::reduction(state, &Token::Terminal(terminal.clone())) + { + let more = self.reduce(production); + assert!(more); + } else { + return Err((state, Token::Terminal(terminal.clone()))); + } + } + + Ok(()) + } + + fn execute(&mut self, tokens: TOKENS) -> Result> + where + TOKENS: Iterator, + { + try!(self.execute_partial(tokens)); + + // drain now for EOF + loop { + let state = self.top_state(); + match L::reduction(state, &Token::EOF) { + None => { + return Err((state, Token::EOF)); + } + Some(production) => { + if !self.reduce(production) { + assert_eq!(self.data_stack.len(), 1); + return Ok(self.data_stack.pop().unwrap()); + } + } + } + } + } + + fn reduce(&mut self, production: &Production) -> bool { + println!("reduce={:?}", production); + + let args = production.symbols.len(); + + // remove the top N items from the data stack + let mut popped = vec![]; + for _ in 0..args { + popped.push(self.data_stack.pop().unwrap()); + } + popped.reverse(); + + // remove the top N states + for _ in 0..args { + self.state_stack.pop().unwrap(); + } + + // construct the new, reduced tree and push it on the stack + let tree = ParseTree::Nonterminal(production.nonterminal.clone(), popped); + self.data_stack.push(tree); + + // recover the state and extract the "Goto" action + let receiving_state = self.top_state(); + match receiving_state.gotos.get(&production.nonterminal) { + Some(&goto_state) => { + self.state_stack.push(goto_state); + true // keep going + } + None => { + false // all done + } + } + } +} + +impl Debug for ParseTree { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + Display::fmt(self, fmt) + } +} + +impl Display for ParseTree { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + match *self { + ParseTree::Nonterminal(ref id, ref trees) => { + write!(fmt, "[{}: {}]", id, Sep(", ", trees)) + } + ParseTree::Terminal(ref id) => write!(fmt, "{}", id), + } + } +} + +pub trait LookaheadInterpret: Lookahead { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + token: &Token, + ) -> Option<&'grammar Production>; +} + +impl LookaheadInterpret for Nil { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + _token: &Token, + ) -> Option<&'grammar Production> { + state + .reductions + .iter() + .map(|&(_, production)| production) + .next() + } +} + +impl LookaheadInterpret for TokenSet { + fn reduction<'grammar>( + state: &State<'grammar, Self>, + token: &Token, + ) -> Option<&'grammar Production> { + state + .reductions + .iter() + .filter(|&&(ref tokens, _)| tokens.contains(token)) + .map(|&(_, production)| production) + .next() + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/item.rs b/third_party/rust/lalrpop-snap/src/lr1/item.rs new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/item.rs @@ -0,0 +1 @@ + diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/README.md b/third_party/rust/lalrpop-snap/src/lr1/lane_table/README.md new file mode 100644 index 000000000000..ab4593ba11b2 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/README.md @@ -0,0 +1,417 @@ +This module contains code for LR(1) construction based on a paper by +Pager and Chen, "The Lane Table Method Of Constructing LR(1) Parsers", +published in APPLC '12. Unfortunately, that paper is quite compact -- +only 8 pages! -- which doesn't leave much room for examples and +explanation. This README is my attempt to explain the idea, or at +least how I chose to implement it in LALRPOP, which may or may not be +faithful to the original algorithm. Naturally it also serves as a +guide to the code. + +### First example grammar: G0 + +We will be working through two example grammars. The first I call G0 +-- it is a reduced version of what the paper calls G1. It is +interesting because it does not require splitting any states, and so +we wind up with the same number of states as in LR0. Put another way, +it is an LALR(1) grammar. + +#### Grammar G0 + +``` +G0 = X "c" + | Y "d" +X = "e" X + | "e" +Y = "e" Y + | "e" +``` + +#### Step 1: Construct an LR(0) state machine + +We begin by constructing an LR(0) state machine. The LR(0) states for +G0 are as follows: + +``` +S0 = G0 = (*) X "c" + | G0 = (*) Y "d" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S1 = X = "e" (*) X + | X = "e" (*) + | X = (*) "e" + | X = (*) "e" "X" + | Y = "e" (*) Y + | Y = "e" (*) + | Y = (*) "e" + | Y = (*) "e" Y + +S2 = X = "e" X (*) + +S3 = G0 = X (*) "c" + +S4 = Y = "e" Y (*) + +S5 = G0 = Y (*) "d" + +S6 = G0 = X "c" (*) + +S7 = G0 = Y "d" (*) +``` + +We can also consider *edges* between the states as follows, +with the label being the symbol that is pushed onto the stack: + +``` +S0 -"e"-> S1 +S1 -"e"-> S1 +S1 --X--> S2 +S0 --X--> S3 +S1 --Y--> S4 +S0 --Y--> S5 +S3 -"c"-> S6 +S5 -"d"-> S7 +``` + +Note that state S1 is "inconsistent", in that it has conflicting +actions. + +#### Step 2: Convert LR(0) states into LR(0-1) states. + +The term LR(0-1), but basically the idea is that the lookahead in a +LR(0-1) state can be either a set of terminals (as in LR(1)) or *none* +(as in LR(0)). You can also think of it alternatively as adding a +special "wildcard" symbol `_` to the grammar; in our actual code, we +represent this with `TokenSet::all()`. We will thus denote the +inconsistent state after transformation as follows, where each line +has the "wildcard" lookahead: + +``` +S1 = X = "e" (*) X [_] + | X = "e" (*) [_] + | X = (*) "e" [_] + | X = (*) "e" "X" [_] + | Y = "e" (*) Y [_] + | Y = "e" (*) [_] + | Y = (*) "e" [_] + | Y = (*) "e" Y [_] +``` + +Naturally, the state is still inconsistent. + +#### Step 3: Resolve inconsistencies. + +In the next step, we iterate over all of our LR(0-1) states. In this +example, we will not need to create new states, but in future examples +we will. The iteration thus consists of a queue and some code like +this: + +```rust +let mut queue = Queue::new(); +queue.extend(/* all states */); +while let Some(s) = queue.pop_front() { + if /* s is an inconsistent state */ { + resolve_inconsistencies(s, &mut queue); + } +} +``` + +##### Step 3a: Build the lane table. + +To resolve an inconsistent state, we first construct a **lane +table**. This is done by the code in the `lane` module (the `table` +module maintains the data structure). It works by structing at each +conflict and tracing **backwards**. Let's start with the final table +we will get for the state S1 and then we will work our way back to how +it is constructed. First, let's identify the conflicting actions from +S1 and give them indices: + +``` +S1 = X = (*) "e" [_] // C0 -- shift "e" + | X = "e" (*) [_] // C1 -- reduce `X = "e" (*)` + | X = (*) "e" "X" [_] // C0 -- shift "e" + | X = "e" (*) X [_] + | Y = (*) "e" [_] // C0 -- shift "e" + | Y = "e" (*) [_] // C2 -- reduce `Y = "e" (*)` + | Y = (*) "e" Y [_] // C0 -- shift "e" + | Y = "e" (*) Y [_] +``` + +Several of the items can cause "Confliction Action 0" (C0), which is +to shift an `"e"`. These are all mutually compatible. However, there +are also two incompatible actions: C1 and C2, both reductions. In +fact, we'll find that we look back at state S0, these 'conflicting' +actions all occur with distinct lookahead. The purpose of the lane +table is to summarize that information. The lane table we will up +constructing for these conflicting actions is as follows: + +``` +| State | C0 | C1 | C2 | Successors | +| S0 | | ["c"] | ["d"] | {S1} | +| S1 | ["e"] | [] | [] | {S1} | +``` + +Here the idea is that the lane table summarizes the lookahead +information contributed by each state. Note that for the *shift* the +state S1 already has enough lookahead information: we only shift when +we see the terminal we need next ("e"). But state C1 and C2, the lookahead +actually came from S0, which is a predecessor state. + +As I said earlier, the algorithm for constructing the table works by +looking at the conflicting item and walking backwards. So let's +illustrate with conflict C1. We have the conflicting item `X = "e" +(*)`, and we are basically looking to find its lookahead. We know +that somewhere in the distant past of our state machine there must be +an item like + + Foo = ...a (*) X ...b + +that led us here. We want to find that item, so we can derive the +lookahead from `...b` (whatever symbols come after `X`). + +To do this, we will walk the graph. Our state at any point in time +will be the pair of a state and an item in that state. To start out, +then, we have `(S1, X = "e" (*))`, which is the conflict C1. Because +the `(*)` is not at the "front" of this item, we have to figure out +where this `"e"` came from on our stack, so we look for predecessors +of the state S1 which have an item like `X = (*) e`. This leads us to +S0 and also S1. So we can push two states in our search: `(S0, X = (*) +"e")` and `(S1, X = (*) "e")`. Let's consider each in turn. + +The next state is then `(S0, X = (*) "e")`. Here the `(*)` lies at the +front of the item, so we search **the same state** S0 for items that +would have led to this state via an *epsilon move*. This basically +means an item like `Foo = ... (*) X ...` -- i.e., where the `(*)` +appears directly before the nonterminal `X`. In our case, we will find +`G0 = (*) X "c"`. This is great, because it tells us some lookahead +("c", in particular), and hence we can stop our search. We add to the +table the entry that the state S0 contributes lookahead "c" to the +conflict C1. In some cases, we might find something like `Foo = +... (*) X` instead, where the `X` we are looking for appears at the +end. In that case, we have to restart our search, but looking for the +lookahead for `Foo`. + +The next state in our case is `(S1, X = (*) e)`. Again the `(*)` lies +at the beginning and hence we search for things in the state S1 where +`X` is the next symbol. We find `X = "e" (*) X`. This is not as good +as last time, because there are no symbols appearing after X in this +item, so it does not contribute any lookahead. We therefore can't stop +our search yet, but we push the state `(S1, X = "e" (*) X)` -- this +corresponds to the `Foo` state I mentioned at the end of the last +paragraph, except that in this case `Foo` is the same nonterminal `X` +we started with. + +Looking at `(S1, X = "e" (*) X)`, we again have the `(*)` in the +middle of the item, so we move it left, searching for predecessors +with the item `X = (*) e X`. We will (again) find S0 and S1 have such +items. In the case of S0, we will (again) find the context "c", which +we dutifully add to the table (this has no effect, since it is already +present). In the case of S1, we will (again) wind up at the state +`(S1, X = "e" (*) X)`. Since we've already visited this state, we +stop our search, it will not lead to new context. + +At this point, our table column for C1 is complete. We can repeat the +process for C2, which plays out in an analogous way. + +##### Step 3b: Update the lookahead + +Looking at the lane table we built, we can union the context sets in +any particular column. We see that the context sets for each +conflicting action are pairwise disjoint. Therefore, we can simply +update each reduce action in our state with those lookaheads in mind, +and hence render it consistent: + +``` +S1 = X = (*) "e" [_] + | X = "e" (*) ["c"] // lookahead from C1 + | X = (*) "e" "X" [_] + | X = "e" (*) X [_] + | Y = (*) "e" [_] + | Y = "e" (*) ["d"] // lookahead from C2 + | Y = (*) "e" Y [_] + | Y = "e" (*) Y [_] +``` + +This is of course also what the LALR(1) state would look like (though +it would include context for the other items, though that doesn't play +into the final machine execution). + +At this point we've covered enough to handle the grammar G0. Let's +turn to a more complex grammar, grammar G1, and then we'll come back +to cover the remaining steps. + +### Second example: the grammar G1 + +G1 is a (typo corrected) version of the grammar from the paper. This +grammar is not LALR(1) and hence it is more interesting, because it +requires splitting states. + +#### Grammar G1 + +``` +G1 = "a" X "d" + | "a" Y "c" + | "b" X "c" + | "b" Y "d" +X = "e" X + | "e" +Y = "e" Y + | "e" +``` + +The key point of this grammar is that when we see `... "e" "c"` and we +wish to know whether to reduce to `X` or `Y`, we don't have enough +information. We need to know what is in the `...`, because `"a" "e" +"c"` means we reduce `"e"` to `Y` and `"b" "e" "c"` means we reduce to +`X`. In terms of our *state machine*, this corresponds to *splitting* +the states responsible for X and Y based on earlier context. + +Let's look at a subset of the LR(0) states for G1: + +``` +S0 = G0 = (*) "a" X "d" + | G0 = (*) "a" Y "c" + | G0 = (*) "b" X "c" + | G0 = (*) "b" X "d" + +S1 = G0 = "a" (*) X "d" + | G0 = "a" (*) Y "c" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S2 = G0 = "b" (*) X "c" + | G0 = "b" (*) Y "d" + | X = (*) "e" X + | X = (*) "e" + | Y = (*) "e" Y + | Y = (*) "e" + +S3 = X = "e" (*) X + | X = "e" (*) // C1 -- can reduce + | X = (*) "e" // C0 -- can shift "e" + | X = (*) "e" "X" // C0 -- can shift "e" + | Y = "e" (*) Y + | Y = "e" (*) // C2 -- can reduce + | Y = (*) "e" // C0 -- can shift "e" + | Y = (*) "e" Y // C0 -- can shift "e" +``` + +Here we can see the problem. The state S3 is inconsistent. But it is +reachable from both S1 and S2. If we come from S1, then we can have (e.g.) +`X "d"`, but if we come from S2, we expect `X "c"`. + +Let's walk through our algorithm again. I'll start with step 3a. + +### Step 3a: Build the lane table. + +The lane table for state S3 will look like this: + +``` +| State | C0 | C1 | C2 | Successors | +| S1 | | ["d"] | ["c"] | {S3} | +| S2 | | ["c"] | ["d"] | {S3} | +| S3 | ["e"] | [] | [] | {S3} | +``` + +Now if we union each column, we see that both C1 and C2 wind up with +lookahead `{"c", "d"}`. This is our problem. We have to isolate things +better. Therefore, step 3b ("update lookahead") does not apply. Instead +we attempt step 3c. + +### Step 3c: Isolate lanes + +This part of the algorithm is only loosely described in the paper, but +I think it works as follows. We will employ a union-find data +structure. With each set, we will record a "context set", which +records for each conflict the set of lookahead tokens (e.g., +`{C1:{"d"}}`). + +A context set tells us how to map the lookahead to an action; +therefire, to be self-consistent, the lookaheads for each conflict +must be mutually disjoint. In other words, `{C1:{"d"}, C2:{"c"}}` is +valid, and says to do C1 if we see a "d" and C2 if we see a "c". But +`{C1:{"d"}, C2:{"d"}}` is not, because there are two actions. + +Initially, each state in the lane table is mapped to itself, and the +conflict set is derived from its column in the lane table: + +``` +S1 = {C1:d, C2:c} +S2 = {C1:c, C2:d} +S3 = {C0:e} +``` + +We designate "beachhead" states as those states in the table that are +not reachable from another state in the table (i.e., using the +successors). In this case, those are the states S1 and S2. We will be +doing a DFS through the table and we want to use those as the starting +points. + +(Question: is there always at least one beachhead state? Seems like +there must be.) + +So we begin by iterating over the beachhead states. + +```rust +for beachhead in beachheads { ... } +``` + +When we visit a state X, we will examine each of its successors Y. We +consider whether the context set for Y can be merged with the context +set for X. So, in our case, X will be S1 to start and Y will be S3. +In this case, the context set can be merged, and hence we union S1, S3 +and wind up with the following union-find state: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2 = {C1:c, C2:d} +``` + +(Note that this union is just for the purpose of tracking context; it +doesn't imply that S1 and S3 are the 'same states' or anything like +that.) + +Next we examine the edge S3 -> S3. Here the contexts are already +merged and everything is happy, so we stop. (We already visited S3, +after all.) + +This finishes our first beachhead, so we proceed to the next edge, S2 +-> S3. Here we find that we **cannot** union the context: it would +produce an inconsistent state. So what we do is we **clone** S3 to +make a new state, S3', with the initial setup corresponding to the row +for S3 from the lane table: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2 = {C1:c, C2:d} +S3' = {C0:e} +``` + +This also involves updating our LR(0-1) state set to have a new state +S3'. All edges from S2 that led to S3 now lead to S3'; the outgoing +edges from S3' remain unchanged. (At least to start.) + +Therefore, the edge `S2 -> S3` is now `S2 -> S3'`. We can now merge +the conflicts: + +``` +S1,S3 = {C0:e, C1:d, C2:c} +S2,S3' = {C0:e, C1:c, C2:d} +``` + +Now we examine the outgoing edge S3' -> S3. We cannot merge these +conflicts, so we search (greedily, I guess) for a clone of S3 where we +can merge the conflicts. We find one in S3', and hence we redirect the +S3 edge to S3' and we are done. (I think the actual search we want is +to make first look for a clone of S3 that is using literally the same +context as us (i.e., same root node), as in this case. If that is not +found, *then* we search for one with a mergable context. If *that* +fails, then we clone a new state.) + +The final state thus has two copies of S3, one for the path from S1, +and one for the path from S2, which gives us enough context to +proceed. diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/merge.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/merge.rs new file mode 100644 index 000000000000..56752885fb4f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/merge.rs @@ -0,0 +1,218 @@ +use collections::{Map, Multimap, Set}; +use ena::unify::InPlaceUnificationTable; +use lr1::core::{Action, LR1State, StateIndex}; +use lr1::lane_table::construct::state_set::StateSet; +use lr1::lane_table::table::LaneTable; +use lr1::lane_table::table::context_set::ContextSet; + +/// The "merge" phase of the algorithm is described in "Step 3c" of +/// [the README][r]. It consists of walking through the various +/// states in the lane table and merging them into sets of states that +/// have compatible context sets; if we encounter a state S that has a +/// successor T but where the context set of S is not compatible with +/// T, then we will clone T into a new T2 (and hopefully the context +/// set of S will be compatible with the reduced context of T2). +/// +/// [r]: ../README.md +pub struct Merge<'m, 'grammar: 'm> { + table: &'m LaneTable<'grammar>, + states: &'m mut Vec>, + visited: Set, + original_indices: Map, + clones: Multimap>, + target_states: Vec, + context_sets: ContextSets<'m>, +} + +impl<'m, 'grammar> Merge<'m, 'grammar> { + pub fn new( + table: &'m LaneTable<'grammar>, + unify: &'m mut InPlaceUnificationTable, + states: &'m mut Vec>, + state_sets: &'m mut Map, + inconsistent_state: StateIndex, + ) -> Self { + Merge { + table: table, + states: states, + visited: Set::new(), + original_indices: Map::new(), + clones: Multimap::new(), + target_states: vec![inconsistent_state], + context_sets: ContextSets { + unify: unify, + state_sets: state_sets, + }, + } + } + + pub fn start(&mut self, beachhead_state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { + debug!("Merge::start(beachhead_state={:?})", beachhead_state); + + // Since we always start walks from beachhead states, and they + // are not reachable from anyone else, this state should not + // have been unioned with anything else yet. + self.walk(beachhead_state) + } + + pub fn patch_target_starts(mut self, actions: &Set>) { + debug!("Merge::patch_target_starts(actions={:?})", actions); + + for &target_state in &self.target_states { + debug!( + "Merge::patch_target_starts: target_state={:?}", + target_state + ); + let context_set = self.context_sets.context_set(target_state); + debug!("Merge::patch_target_starts: context_set={:?}", context_set); + context_set.apply(&mut self.states[target_state.0], actions); + } + } + + /// If `state` is a cloned state, find its original index. Useful + /// for indexing into the lane table and so forth. + fn original_index(&self, state: StateIndex) -> StateIndex { + *self.original_indices.get(&state).unwrap_or(&state) + } + + fn successors(&self, state: StateIndex) -> Option<&'m Set> { + self.table.successors(self.original_index(state)) + } + + fn walk(&mut self, state: StateIndex) -> Result<(), (StateIndex, StateIndex)> { + debug!("Merge::walk(state={:?})", state); + + if !self.visited.insert(state) { + debug!("Merge::walk: visited already"); + return Ok(()); + } + + for &successor in self.successors(state).iter().flat_map(|&s| s) { + debug!("Merge::walk: state={:?} successor={:?}", state, successor); + + if self.context_sets.union(state, successor) { + debug!( + "Merge::walk: successful union, context-set = {:?}", + self.context_sets.context_set(state) + ); + self.walk(successor)?; + } else { + // search for an existing clone with which we can merge + debug!("Merge::walk: union failed, seek existing clone"); + let existing_clone = { + let context_sets = &mut self.context_sets; + self.clones.get(&successor) + .into_iter() + .flat_map(|clones| clones) // get() returns an Option + .cloned() + .filter(|&successor1| context_sets.union(state, successor1)) + .next() + }; + + if let Some(successor1) = existing_clone { + debug!("Merge::walk: found existing clone {:?}", successor1); + self.patch_links(state, successor, successor1); + self.walk(successor1)?; + } else { + // if we don't find one, we have to make a new clone + debug!("Merge::walk: creating new clone of {:?}", successor); + let successor1 = self.clone(successor); + if self.context_sets.union(state, successor1) { + self.patch_links(state, successor, successor1); + self.walk(successor1)?; + } else { + debug!( + "Merge::walk: failed to union {:?} with {:?}", + state, successor1 + ); + debug!( + "Merge::walk: state context = {:?}", + self.context_sets.context_set(state) + ); + debug!( + "Merge::walk: successor context = {:?}", + self.context_sets.context_set(successor1) + ); + + return Err((self.original_index(state), self.original_index(successor1))); + } + } + } + } + + Ok(()) + } + + fn clone(&mut self, state: StateIndex) -> StateIndex { + // create a new state with same contents as the old one + let new_index = StateIndex(self.states.len()); + let new_state = self.states[state.0].clone(); + self.states.push(new_state); + + // track the original index and clones + let original_index = self.original_index(state); + self.original_indices.insert(new_index, original_index); + self.clones.push(original_index, new_index); + + // create a new unify key for this new state + let context_set = self.table.context_set(original_index).unwrap(); + self.context_sets.new_state(new_index, context_set); + + // keep track of the clones of the target state + if original_index == self.target_states[0] { + self.target_states.push(new_index); + } + + debug!("Merge::clone: cloned {:?} to {:?}", state, new_index); + new_index + } + + fn patch_links( + &mut self, + predecessor: StateIndex, + original_successor: StateIndex, + cloned_successor: StateIndex, + ) { + let replace = |target_state: &mut StateIndex| { + if *target_state == original_successor { + *target_state = cloned_successor; + } + }; + + let state = &mut self.states[predecessor.0]; + for (_, target_state) in &mut state.shifts { + replace(target_state); + } + for (_, target_state) in &mut state.gotos { + replace(target_state); + } + } +} + +struct ContextSets<'m> { + state_sets: &'m mut Map, + unify: &'m mut InPlaceUnificationTable, +} + +impl<'m> ContextSets<'m> { + fn context_set(&mut self, state: StateIndex) -> ContextSet { + let state_set = self.state_sets[&state]; + self.unify.probe_value(state_set) + } + + fn union(&mut self, source: StateIndex, target: StateIndex) -> bool { + let set1 = self.state_sets[&source]; + let set2 = self.state_sets[&target]; + let result = self.unify.unify_var_var(set1, set2).is_ok(); + debug!( + "ContextSets::union: source={:?} target={:?} result={:?}", + source, target, result + ); + result + } + + fn new_state(&mut self, new_index: StateIndex, context_set: ContextSet) { + let state_set = self.unify.new_key(context_set); + self.state_sets.insert(new_index, state_set); + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/mod.rs new file mode 100644 index 000000000000..34ff3d88b373 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/mod.rs @@ -0,0 +1,264 @@ +//! + +use collections::{Map, Set}; +use ena::unify::InPlaceUnificationTable; +use grammar::repr::*; +use lr1::build; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::lookahead::{Lookahead, TokenSet}; +use lr1::lane_table::lane::LaneTracer; +use lr1::lane_table::table::{ConflictIndex, LaneTable}; +use lr1::lane_table::table::context_set::OverlappingLookahead; +use lr1::state_graph::StateGraph; +use std::rc::Rc; + +mod merge; +use self::merge::Merge; + +mod state_set; +use self::state_set::StateSet; + +pub struct LaneTableConstruct<'grammar> { + grammar: &'grammar Grammar, + first_sets: FirstSets, + start_nt: NonterminalString, +} + +impl<'grammar> LaneTableConstruct<'grammar> { + pub fn new(grammar: &'grammar Grammar, start_nt: NonterminalString) -> Self { + let first_sets = FirstSets::new(grammar); + LaneTableConstruct { + grammar: grammar, + start_nt: start_nt, + first_sets: first_sets, + } + } + + pub fn construct(self) -> Result>, LR1TableConstructionError<'grammar>> { + let states = { + match build::build_lr0_states(self.grammar, self.start_nt.clone()) { + Ok(states) => { + // In this case, the grammar is actually + // LR(0). This is very rare -- it means that the + // grammar does not need lookahead to execute. In + // principle, we could stop here, except that if + // we do so, then the lookahead values that we get + // are very broad. + // + // Broad lookahead values will cause "eager" + // reduce at runtime -- i.e., if there is some + // scenario where the lookahead tells you we are + // in error, but we would have to reduce a few + // states before we see it. This, in turn, can + // cause infinite loops around error recovery + // (#240). + // + // Since we want to behave as a LR(1) parser + // would, we'll just go ahead and run the + // algorithm. + states + } + Err(TableConstructionError { + states, + conflicts: _, + }) => states, + } + }; + + // Convert the LR(0) states into LR(0-1) states. + let mut states = self.promote_lr0_states(states); + + // For each inconsistent state, apply the lane-table algorithm to + // resolve it. + for i in 0.. { + if i >= states.len() { + break; + } + + match self.resolve_inconsistencies(&mut states, StateIndex(i)) { + Ok(()) => {} + Err(_) => { + // We failed because of irreconcilable conflicts + // somewhere. Just compute the conflicts from the final set of + // states. + debug!( + "construct: failed to resolve inconsistencies in state {:#?}", + states[i] + ); + let conflicts: Vec> = states + .iter() + .flat_map(|s| Lookahead::conflicts(&s)) + .collect(); + return Err(TableConstructionError { + states: states, + conflicts: conflicts, + }); + } + } + } + + Ok(states) + } + + /// Given a set of LR0 states, returns LR1 states where the lookahead + /// is always `TokenSet::all()`. We refer to these states as LR(0-1) + /// states in the README. + fn promote_lr0_states(&self, lr0: Vec>) -> Vec> { + let all = TokenSet::all(); + debug!("promote_lr0_states: all={:?}", all); + lr0.into_iter() + .map(|s| { + let items = s.items + .vec + .iter() + .map(|item| Item { + production: item.production, + index: item.index, + lookahead: all.clone(), + }) + .collect(); + let reductions = s.reductions + .into_iter() + .map(|(_, p)| (all.clone(), p)) + .collect(); + State { + index: s.index, + items: Items { + vec: Rc::new(items), + }, + shifts: s.shifts, + reductions: reductions, + gotos: s.gotos, + } + }) + .collect() + } + + fn resolve_inconsistencies( + &self, + states: &mut Vec>, + inconsistent_state: StateIndex, + ) -> Result<(), StateIndex> { + debug!( + "resolve_inconsistencies(inconsistent_state={:?}/{:#?}", + inconsistent_state, states[inconsistent_state.0] + ); + + let mut actions = super::conflicting_actions(&states[inconsistent_state.0]); + if actions.is_empty() { + // This can mean one of two things: only shifts, or a + // single reduction. We have to be careful about states + // with a single reduction: even though such a state is + // not inconsistent (there is only one possible course of + // action), we still want to run the lane table algorithm, + // because otherwise we get states with "complete" + // lookahead, which messes with error recovery. + // + // In particular, if there is too much lookahead, we will + // reduce even when it is inappropriate to do so. + actions = states[inconsistent_state.0] + .reductions + .iter() + .map(|&(_, prod)| Action::Reduce(prod)) + .collect(); + if actions.is_empty() { + return Ok(()); + } + } + + debug!("resolve_inconsistencies: conflicting_actions={:?}", actions); + + let table = self.build_lane_table(states, inconsistent_state, &actions); + + // Consider first the "LALR" case, where the lookaheads for each + // action are completely disjoint. + if self.attempt_lalr(&mut states[inconsistent_state.0], &table, &actions) { + return Ok(()); + } + + // Construct the initial states; each state will map to a + // context-set derived from its row in the lane-table. This is + // fallible, because a state may be internally inconstent. + // + // (To handle unification, we also map each state to a + // `StateSet` that is its entry in the `ena` table.) + let rows = table.rows()?; + let mut unify = InPlaceUnificationTable::::new(); + let mut state_sets = Map::new(); + for (&state_index, context_set) in &rows { + let state_set = unify.new_key(context_set.clone()); + state_sets.insert(state_index, state_set); + debug!( + "resolve_inconsistencies: state_index={:?}, state_set={:?}", + state_index, state_set + ); + } + + // Now merge state-sets, cloning states where needed. + let mut merge = Merge::new( + &table, + &mut unify, + states, + &mut state_sets, + inconsistent_state, + ); + let beachhead_states = table.beachhead_states(); + for beachhead_state in beachhead_states { + match merge.start(beachhead_state) { + Ok(()) => {} + Err((source, _)) => { + debug!( + "resolve_inconsistencies: failed to merge, source={:?}", + source + ); + return Err(source); + } + } + } + merge.patch_target_starts(&actions); + + Ok(()) + } + + fn attempt_lalr( + &self, + state: &mut LR1State<'grammar>, + table: &LaneTable<'grammar>, + actions: &Set>, + ) -> bool { + match table.columns() { + Ok(columns) => { + debug!("attempt_lalr, columns={:#?}", columns); + columns.apply(state, actions); + debug!("attempt_lalr, state={:#?}", state); + true + } + Err(OverlappingLookahead) => { + debug!("attempt_lalr, OverlappingLookahead"); + false + } + } + } + + fn build_lane_table( + &self, + states: &[LR1State<'grammar>], + inconsistent_state: StateIndex, + actions: &Set>, + ) -> LaneTable<'grammar> { + let state_graph = StateGraph::new(states); + let mut tracer = LaneTracer::new( + self.grammar, + self.start_nt.clone(), + states, + &self.first_sets, + &state_graph, + actions.len(), + ); + for (i, action) in actions.iter().enumerate() { + tracer.start_trace(inconsistent_state, ConflictIndex::new(i), action.clone()); + } + tracer.into_table() + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/state_set.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/state_set.rs new file mode 100644 index 000000000000..67ee957e3649 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/construct/state_set.rs @@ -0,0 +1,46 @@ +use ena::unify::{UnifyKey, UnifyValue}; +use lr1::lane_table::table::context_set::{ContextSet, OverlappingLookahead}; + +/// The unification key for a set of states in the lane table +/// algorithm. Each set of states is associated with a +/// `ContextSet`. When two sets of states are merged, their conflict +/// sets are merged as well; this will fail if that would produce an +/// overlapping conflict set. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct StateSet { + index: u32, +} + +impl UnifyKey for StateSet { + type Value = ContextSet; + + fn index(&self) -> u32 { + self.index + } + + fn from_index(u: u32) -> Self { + StateSet { index: u } + } + + fn tag() -> &'static str { + "StateSet" + } +} + +// FIXME: The `ena` interface is really designed around `UnifyValue` +// being cheaply cloneable; we should either refactor `ena` a bit or +// find some other way to associate a `ContextSet` with a state set +// (for example, we could have each state set be associated with an +// index that maps to a `ContextSet`), and do the merging ourselves. +// But this is easier for now, and cloning a `ContextSet` isn't THAT +// expensive, right? :) +impl UnifyValue for ContextSet { + type Error = (Self, Self); + + fn unify_values(value1: &Self, value2: &Self) -> Result { + match ContextSet::union(value1, value2) { + Ok(v) => Ok(v), + Err(OverlappingLookahead) => Err((value1.clone(), value2.clone())), + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/lane/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/lane/mod.rs new file mode 100644 index 000000000000..b61675a12945 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/lane/mod.rs @@ -0,0 +1,149 @@ +//! Code to trace out a single lane, collecting information into the +//! lane table as we go. + +use collections::Set; +use grammar::repr::*; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::lookahead::*; +use lr1::state_graph::StateGraph; + +use super::table::{ConflictIndex, LaneTable}; + +pub struct LaneTracer<'trace, 'grammar: 'trace, L: Lookahead + 'trace> { + states: &'trace [State<'grammar, L>], + first_sets: &'trace FirstSets, + state_graph: &'trace StateGraph, + table: LaneTable<'grammar>, + start_nt: NonterminalString, +} + +impl<'trace, 'grammar, L: Lookahead> LaneTracer<'trace, 'grammar, L> { + pub fn new( + grammar: &'grammar Grammar, + start_nt: NonterminalString, + states: &'trace [State<'grammar, L>], + first_sets: &'trace FirstSets, + state_graph: &'trace StateGraph, + conflicts: usize, + ) -> Self { + LaneTracer { + states: states, + first_sets: first_sets, + state_graph: state_graph, + start_nt: start_nt, + table: LaneTable::new(grammar, conflicts), + } + } + + pub fn into_table(self) -> LaneTable<'grammar> { + self.table + } + + pub fn start_trace( + &mut self, + state: StateIndex, + conflict: ConflictIndex, + action: Action<'grammar>, + ) { + let mut visited_set = Set::default(); + + // if the conflict item is a "shift" item, then the context + // is always the terminal to shift (and conflicts only arise + // around shifting terminal, so it must be a terminal) + match action { + Action::Shift(term, _) => { + let mut token_set = TokenSet::new(); + token_set.insert(Token::Terminal(term)); + self.table.add_lookahead(state, conflict, &token_set); + } + + Action::Reduce(prod) => { + let item = Item::lr0(prod, prod.symbols.len()); + self.continue_trace(state, conflict, item, &mut visited_set); + } + } + } + + fn continue_trace( + &mut self, + state: StateIndex, + conflict: ConflictIndex, + item: LR0Item<'grammar>, + visited: &mut Set<(StateIndex, LR0Item<'grammar>)>, + ) { + if !visited.insert((state, item)) { + return; + } + + if item.index > 0 { + // This item was reached by shifting some symbol. We need + // to unshift that symbol, which means we walk backwards + // to predecessors of `state` in the state graph. + // + // Example: + // + // X = ...p T (*) ...s + // + // Here we would be "unshifting" T, which means we will + // walk to predecessors of the current state that were + // reached by shifting T. Those predecessors will contain + // an item like `X = ...p (*) T ...s`, which we will then + // process in turn. + let shifted_symbol = item.production.symbols[item.index - 1].clone(); + let unshifted_item = Item { + index: item.index - 1, + ..item + }; + let predecessors = self.state_graph.predecessors(state, shifted_symbol); + for predecessor in predecessors { + self.table.add_successor(predecessor, state); + self.continue_trace(predecessor, conflict, unshifted_item, visited); + } + return; + } + + // Either: we are in the start state, or this item was + // reached by an epsilon transition. We have to + // "unepsilon", which means that we search elsewhere in + // the state for where the epsilon transition could have + // come from. + // + // Example: + // + // X = (*) ... + // + // We will search for other items in the same state like: + // + // Y = ...p (*) X ...s + // + // We can then insert `FIRST(...s)` as lookahead for + // `conflict`. If `...s` may derive epsilon, though, we + // have to recurse and search with the previous item. + + let state_items = &self.states[state.0].items.vec; + let nonterminal = &item.production.nonterminal; + if *nonterminal == self.start_nt { + // as a special case, if the `X` above is the special, synthetic + // start-terminal, then the only thing that comes afterwards is EOF. + self.table.add_lookahead(state, conflict, &TokenSet::eof()); + } + + // NB: Under the normal LR terms, the start nonterminal will + // only have one production like `X' = X`, in which case this + // loop is useless, but sometimes in tests we don't observe + // that restriction, so do it anyway. + for pred_item in state_items + .iter() + .filter(|i| i.can_shift_nonterminal(nonterminal)) + { + let symbol_sets = pred_item.symbol_sets(); + let mut first = self.first_sets.first0(symbol_sets.suffix); + let derives_epsilon = first.take_eof(); + self.table.add_lookahead(state, conflict, &first); + if derives_epsilon { + self.continue_trace(state, conflict, pred_item.to_lr0(), visited); + } + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/mod.rs new file mode 100644 index 000000000000..f49220b991fd --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/mod.rs @@ -0,0 +1,27 @@ +use collections::Set; +use lr1::core::*; +use lr1::lookahead::Lookahead; +use grammar::repr::*; + +mod construct; +mod lane; +mod table; + +#[cfg(test)] +mod test; + +pub fn build_lane_table_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + construct::LaneTableConstruct::new(grammar, start).construct() +} + +fn conflicting_actions<'grammar, L: Lookahead>( + state: &State<'grammar, L>, +) -> Set> { + let conflicts = L::conflicts(state); + let reductions = conflicts.iter().map(|c| Action::Reduce(c.production)); + let actions = conflicts.iter().map(|c| c.action.clone()); + reductions.chain(actions).collect() +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/mod.rs new file mode 100644 index 000000000000..b8cf27e26730 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/mod.rs @@ -0,0 +1,98 @@ +//! A key part of the lane-table algorithm is the idea of a CONTEXT +//! SET (my name, the paper has no name for this). Basically it +//! represents the LR1 context under which a given conflicting action +//! would take place. +//! +//! So, for example, imagine this grammar: +//! +//! ```notrust +//! A = B x +//! | C y +//! B = z +//! C = z +//! ``` +//! +//! This gives rise to states like: +//! +//! - `S0 = { * B x, * C y, B = * z, C = * z }` +//! - `S1 = { B = z *, C = z * }` +//! +//! This second state has two conflicting items. Let's call them +//! conflicts 0 and 1 respectively. The conflict set would then have +//! two entries (one for each conflict) and it would map each of them +//! to a TokenSet supplying context. So when we trace everything +//! out we might get a ContextSet of: +//! +//! - `[ 0: x, 1: y ]` +//! +//! In general, you want to ensure that the token sets of all +//! conflicting items are pairwise-disjoint, or else if you get to a +//! state that has both of those items (which, by definition, does +//! arise) you won't know which to take. In this case, we're all set, +//! because item 0 occurs only with lookahead `x` and item 1 with +//! lookahead `y`. + +use collections::{Map, Set}; +use lr1::core::*; +use lr1::lookahead::*; +mod test; + +use super::ConflictIndex; + +#[derive(Clone, Debug)] +pub struct ContextSet { + values: Vec, +} + +#[derive(Debug)] +pub struct OverlappingLookahead; + +impl ContextSet { + pub fn new(num_conflicts: usize) -> Self { + ContextSet { + values: (0..num_conflicts).map(|_| TokenSet::new()).collect(), + } + } + + pub fn union(set1: &ContextSet, set2: &ContextSet) -> Result { + let mut result = set1.clone(); + for (i, t) in set2.values.iter().enumerate() { + result.insert(ConflictIndex::new(i), t)?; + } + Ok(result) + } + + /// Attempts to merge the values `conflict: set` into this + /// conflict set. If this would result in an invalid conflict set + /// (where two conflicts have overlapping lookahead), then returns + /// `Err(OverlappingLookahead)` and has no effect. + /// + /// Assuming no errors, returns `Ok(true)` if this resulted in any + /// modifications, and `Ok(false)` otherwise. + pub fn insert( + &mut self, + conflict: ConflictIndex, + set: &TokenSet, + ) -> Result { + for (value, index) in self.values.iter().zip((0..).map(ConflictIndex::new)) { + if index != conflict { + if value.is_intersecting(&set) { + return Err(OverlappingLookahead); + } + } + } + + Ok(self.values[conflict.index].union_with(&set)) + } + + pub fn apply<'grammar>(&self, state: &mut LR1State<'grammar>, actions: &Set>) { + // create a map from each action to its lookahead + let lookaheads: Map, &TokenSet> = + actions.iter().cloned().zip(&self.values).collect(); + + for &mut (ref mut lookahead, production) in &mut state.reductions { + let action = Action::Reduce(production); + *lookahead = lookaheads[&action].clone(); + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/test.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/test.rs new file mode 100644 index 000000000000..67005ab4bc55 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/context_set/test.rs @@ -0,0 +1 @@ +#![cfg(test)] diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/mod.rs new file mode 100644 index 000000000000..10a716345b02 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/table/mod.rs @@ -0,0 +1,203 @@ +//! The "Lane Table". In the paper, this is depicted like so: +//! +//! ``` +//! +-------+----+-----+----+------------+ +//! + State | C1 | ... | Cn | Successors | +//! +-------+----+-----+----+------------+ +//! ``` +//! +//! where each row summarizes some state that potentially contributes +//! lookahead to the conflict. The columns `Ci` represent each of the +//! conflicts we are trying to disentangle; their values are each +//! `TokenSet` indicating the lookahead contributing by this state. +//! The Successors is a vector of further successors. For simplicity +//! though we store this using maps, at least for now. + +use collections::{Map, Multimap, Set}; +use grammar::repr::*; +use lr1::core::*; +use lr1::lookahead::*; +use std::default::Default; +use std::fmt::{Debug, Error, Formatter}; +use std::iter; + +pub mod context_set; +use self::context_set::{ContextSet, OverlappingLookahead}; + +#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub struct ConflictIndex { + index: usize, +} + +impl ConflictIndex { + pub fn new(index: usize) -> ConflictIndex { + ConflictIndex { index: index } + } +} + +pub struct LaneTable<'grammar> { + _grammar: &'grammar Grammar, + conflicts: usize, + lookaheads: Map<(StateIndex, ConflictIndex), TokenSet>, + successors: Multimap>, +} + +impl<'grammar> LaneTable<'grammar> { + pub fn new(grammar: &'grammar Grammar, conflicts: usize) -> LaneTable { + LaneTable { + _grammar: grammar, + conflicts: conflicts, + lookaheads: Map::default(), + successors: Multimap::default(), + } + } + + pub fn add_lookahead(&mut self, state: StateIndex, conflict: ConflictIndex, tokens: &TokenSet) { + self.lookaheads + .entry((state, conflict)) + .or_insert_with(|| TokenSet::new()) + .union_with(&tokens); + } + + pub fn add_successor(&mut self, state: StateIndex, succ: StateIndex) { + self.successors.push(state, succ); + } + + /// Unions together the lookaheads for each column and returns a + /// context set containing all of them. For an LALR(1) grammar, + /// these token sets will be mutually disjoint, as discussed in + /// the [README]; otherwise `Err` will be returned. + /// + /// [README]: ../README.md + pub fn columns(&self) -> Result { + let mut columns = ContextSet::new(self.conflicts); + for (&(_, conflict_index), set) in &self.lookaheads { + columns.insert(conflict_index, set)?; + } + Ok(columns) + } + + pub fn successors(&self, state: StateIndex) -> Option<&Set> { + self.successors.get(&state) + } + + /// Returns the state of states in the table that are **not** + /// reachable from another state in the table. These are called + /// "beachhead states". + pub fn beachhead_states(&self) -> Set { + // set of all states that are reachable from another state + let reachable: Set = self.successors + .iter() + .flat_map(|(_pred, succ)| succ) + .cloned() + .collect(); + + self.lookaheads + .keys() + .map(|&(state_index, _)| state_index) + .filter(|s| !reachable.contains(s)) + .collect() + } + + pub fn context_set(&self, state: StateIndex) -> Result { + let mut set = ContextSet::new(self.conflicts); + for (&(state_index, conflict_index), token_set) in &self.lookaheads { + if state_index == state { + set.insert(conflict_index, token_set)?; + } + } + Ok(set) + } + + /// Returns a map containing all states that appear in the table, + /// along with the context set for each state (i.e., each row in + /// the table, basically). Returns Err if any state has a conflict + /// between the context sets even within its own row. + pub fn rows(&self) -> Result, StateIndex> { + let mut map = Map::new(); + for (&(state_index, conflict_index), token_set) in &self.lookaheads { + debug!( + "rows: inserting state_index={:?} conflict_index={:?} token_set={:?}", + state_index, conflict_index, token_set + ); + match { + map.entry(state_index) + .or_insert_with(|| ContextSet::new(self.conflicts)) + .insert(conflict_index, token_set) + } { + Ok(_changed) => {} + Err(OverlappingLookahead) => { + debug!("rows: intra-row conflict inserting state_index={:?} conflict_index={:?} token_set={:?}", + state_index, conflict_index, token_set); + return Err(state_index); + } + } + } + + // In some cases, there are states that have no context at + // all, only successors. In that case, make sure to add an + // empty row for them. + for (&state_index, _) in &self.successors { + map.entry(state_index) + .or_insert_with(|| ContextSet::new(self.conflicts)); + } + + Ok(map) + } +} + +impl<'grammar> Debug for LaneTable<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let indices: Set = self.lookaheads + .keys() + .map(|&(state, _)| state) + .chain(self.successors.iter().map(|(key, _)| key.clone())) + .collect(); + + let header = iter::once(format!("State")) + .chain((0..self.conflicts).map(|i| format!("C{}", i))) + .chain(Some(format!("Successors"))) + .collect(); + + let rows = indices.iter().map(|&index| { + iter::once(format!("{:?}", index)) + .chain((0..self.conflicts).map(|i| { + self.lookaheads + .get(&(index, ConflictIndex::new(i))) + .map(|token_set| format!("{:?}", token_set)) + .unwrap_or(String::new()) + })) + .chain(Some( + self.successors + .get(&index) + .map(|c| format!("{:?}", c)) + .unwrap_or(String::new()), + )) + .collect() + }); + + let table: Vec> = iter::once(header).chain(rows).collect(); + + let columns = 2 + self.conflicts; + + let widths: Vec<_> = (0..columns) + .map(|c| { + // find the max width of any row at this column + table.iter().map(|r| r[c].len()).max().unwrap() + }) + .collect(); + + for row in &table { + try!(write!(fmt, "| ")); + for (i, column) in row.iter().enumerate() { + if i > 0 { + try!(write!(fmt, " | ")); + } + try!(write!(fmt, "{0:1$}", column, widths[i])); + } + try!(write!(fmt, " |\n")); + } + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lane_table/test.rs b/third_party/rust/lalrpop-snap/src/lr1/lane_table/test.rs new file mode 100644 index 000000000000..323fa5757253 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lane_table/test.rs @@ -0,0 +1,376 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use test_util::{expect_debug, normalized_grammar}; +use lr1::build; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::interpret; +use lr1::state_graph::StateGraph; +use lr1::tls::Lr1Tls; +use tls::Tls; + +use super::construct::*; +use super::lane::*; +use super::table::*; + +macro_rules! tokens { + ($($x:expr),*) => { + vec![$(TerminalString::quoted(Atom::from($x))),*] + } +} + +fn sym(t: &str) -> Symbol { + if t.chars().next().unwrap().is_uppercase() { + Symbol::Nonterminal(nt(t)) + } else { + Symbol::Terminal(term(t)) + } +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn traverse(states: &[LR0State], tokens: &[&str]) -> StateIndex { + interpret::interpret_partial(states, tokens.iter().map(|&s| term(s))) + .unwrap() + .pop() + .unwrap() +} + +/// A simplified version of the paper's initial grammar; this version +/// only has one inconsistent state (the same state they talk about in +/// the paper). +pub fn paper_example_g0() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + X "c", + Y "d", +}; + +X: () = { + "e" X, + "e",} +; + +Y: () = { + "e" Y, + "e" +}; +"#, + ) +} + +/// A (corrected) version of the sample grammar G1 from the paper. The +/// grammar as written in the text omits some items, but the diagrams +/// seem to contain the full set. I believe this is one of the +/// smallest examples that still requires splitting states from the +/// LR0 states. +pub fn paper_example_g1() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + // if "a" is input, then lookahead "d" means "reduce X" + // and lookahead "c" means "reduce "Y" + "a" X "d", + "a" Y "c", + + // if "b" is input, then lookahead "d" means "reduce Y" + // and lookahead "c" means "reduce X. + "b" X "c", + "b" Y "d", +}; + +X: () = { + "e" X, + "e", +}; + +Y: () = { + "e" Y, + "e" +}; +"#, + ) +} + +fn build_table<'grammar>( + grammar: &'grammar Grammar, + goal: &str, + tokens: &[&str], +) -> LaneTable<'grammar> { + let lr0_err = build::build_lr0_states(&grammar, nt(goal)).unwrap_err(); + + // Push the `tokens` to find the index of the inconsistent state + let inconsistent_state_index = traverse(&lr0_err.states, tokens); + assert!( + lr0_err + .conflicts + .iter() + .any(|c| c.state == inconsistent_state_index) + ); + let inconsistent_state = &lr0_err.states[inconsistent_state_index.0]; + println!("inconsistent_state={:#?}", inconsistent_state.items); + + // Extract conflicting items and trace the lanes, constructing a table + let conflicting_items = super::conflicting_actions(inconsistent_state); + println!("conflicting_items={:#?}", conflicting_items); + let first_sets = FirstSets::new(&grammar); + let state_graph = StateGraph::new(&lr0_err.states); + let mut tracer = LaneTracer::new( + &grammar, + nt("G"), + &lr0_err.states, + &first_sets, + &state_graph, + conflicting_items.len(), + ); + for (i, conflicting_item) in conflicting_items.iter().enumerate() { + tracer.start_trace( + inconsistent_state.index, + ConflictIndex::new(i), + conflicting_item.clone(), + ); + } + + tracer.into_table() +} + +#[test] +fn g0_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_g0(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["e"]); + println!("{:#?}", table); + // conflicting_actions={ + // Shift("e") // C0 + // Reduce(X = "e" => ActionFn(4)) // C1 + // Reduce(Y = "e" => ActionFn(6)) // C2 + // } + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | Successors | +| S0 | | ["c"] | ["d"] | {S3} | +| S3 | ["e"] | [] | [] | {S3} | +"#.trim_left(), + ); +} + +#[test] +fn paper_example_g1_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_g1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["a", "e"]); + println!("{:#?}", table); + // conflicting_actions={ + // Shift("e") // C0 + // Reduce(X = "e" => ActionFn(6)) // C1 + // Reduce(Y = "e" => ActionFn(8)) // C2 + // } + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | Successors | +| S1 | | ["d"] | ["c"] | {S5} | +| S2 | | ["c"] | ["d"] | {S5} | +| S5 | ["e"] | [] | [] | {S5} | +"#.trim_left(), + ); +} + +#[test] +fn paper_example_g0_build() { + let _tls = Tls::test(); + let grammar = paper_example_g0(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + // we do not require more *states* than LR(0), just different lookahead + assert_eq!(states.len(), lr0_err.states.len()); + + let tree = interpret::interpret(&states, tokens!["e", "c"]).unwrap(); + expect_debug(&tree, r#"[G: [X: "e"], "c"]"#); + + let tree = interpret::interpret(&states, tokens!["e", "e", "c"]).unwrap(); + expect_debug(&tree, r#"[G: [X: "e", [X: "e"]], "c"]"#); + + let tree = interpret::interpret(&states, tokens!["e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: [Y: "e", [Y: "e"]], "d"]"#); + + interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); +} + +#[test] +fn paper_example_g1_build() { + let _tls = Tls::test(); + let grammar = paper_example_g1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let lr0_err = build::build_lr0_states(&grammar, nt("G")).unwrap_err(); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + // we require more *states* than LR(0), not just different lookahead + assert_eq!(states.len() - lr0_err.states.len(), 1); + + let tree = interpret::interpret(&states, tokens!["a", "e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: "a", [X: "e", [X: "e"]], "d"]"#); + + let tree = interpret::interpret(&states, tokens!["b", "e", "e", "d"]).unwrap(); + expect_debug(&tree, r#"[G: "b", [Y: "e", [Y: "e"]], "d"]"#); + + interpret::interpret(&states, tokens!["e", "e", "e"]).unwrap_err(); +} + +pub fn paper_example_large() -> Grammar { + normalized_grammar( + r#" +grammar; + +pub G: () = { + "x" W "a", + "x" V "t", + "y" W "b", + "y" V "t", + "z" W "r", + "z" V "b", + "u" U X "a", + "u" U Y "r", +}; + +W: () = { + U X C +}; + +V: () = { + U Y "d" +}; + +X: () = { + "k" "t" U X P, + "k" "t" +}; + +Y: () = { + "k" "t" U Y "u", + "k" "t" +}; + +U: () = { + U "k" "t", + "s" +}; + +E: () = { + "a", + "b", + "c", + "v", +}; + +C: () = { + "c", + "w" +}; + +P: () = { + "z" +}; +"#, + ) +} + +#[test] +fn large_conflict_1() { + let _tls = Tls::test(); + let grammar = paper_example_large(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let table = build_table(&grammar, "G", &["x", "s", "k", "t"]); + println!("{:#?}", table); + + // conflicting_actions={ + // Shift("s") // C0 + // Reduce(U = U "k" "t") // C1 + // Reduce(X = "k" "t") // C2 + // Reduce(Y = "k" "t") // C3 + // } + + expect_debug( + &table, + r#" +| State | C0 | C1 | C2 | C3 | Successors | +| S1 | | ["k"] | | | {S5} | +| S2 | | ["k"] | | | {S7} | +| S3 | | ["k"] | | | {S7} | +| S4 | | ["k"] | | | {S7} | +| S5 | | | ["a"] | ["r"] | {S16} | +| S7 | | | ["c", "w"] | ["d"] | {S16} | +| S16 | | | | | {S27} | +| S27 | ["s"] | ["k"] | | | {S32} | +| S32 | | | ["z"] | ["u"] | {S16} | +"#.trim_left(), + ); + + // ^^ This differs in some particulars from what appears in the + // paper, but I believe it to be correct, and the paper to be wrong. + // + // Here is the table using the state names from the paper. I've + // marked the differences with `(*)`. Note that the paper does not + // include the C0 column (the shift). + // + // | State | pi1 | pi2 | pi3 | Successors | + // | B | ["k"] | | *1 | {G} | + // | C | ["k"] | | *1 | {G} | + // | D | ["k"] | | *1 | {G} | + // | E | ["k"] | | | {F} | + // | F | | ["r"] | ["a"] | {H} | + // | G | | ["d"] | ["c", "w"] | {H} | + // | H | | | | {I} | + // | I | ["k"] | | | {J} | + // | J | | ["u"] | ["z"] *2 | {H} | + // + // *1 - the paper lists "a", "b", and "r" here as lookaheads. We + // do not. This is because when we trace back pi3, we never reach + // those states, as we have already acquired the necessary token + // of context earlier. I can imagine a distinct lane tracing + // algorithm that considers *sets* of conflicts and only + // terminates when all sets have context, but it's much more + // complex to implement, and seems to add little value. + // + // *2 - the paper does not list this context, and yet it seems to + // present. If you trace back "t" and "k" you reach state J which + // has the item "X = k t (*)". This "unepsilons" to "X = k t U (*) + // X P", and the lookahead from the "X" here is FIRST(P) which is + // "z". +} + +#[test] +fn paper_example_large_build() { + let _tls = Tls::test(); + let grammar = paper_example_large(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let states = LaneTableConstruct::new(&grammar, nt("G")) + .construct() + .expect("failed to build lane table states"); + + let tree = interpret::interpret(&states, tokens!["y", "s", "k", "t", "c", "b"]).unwrap(); + expect_debug( + &tree, + r#"[G: "y", [W: [U: "s"], [X: "k", "t"], [C: "c"]], "b"]"#, + ); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/lookahead.rs b/third_party/rust/lalrpop-snap/src/lr1/lookahead.rs new file mode 100644 index 000000000000..94d5a60f9546 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/lookahead.rs @@ -0,0 +1,299 @@ +use bit_set::{self, BitSet}; +use collections::Collection; +use lr1::core::*; +use lr1::tls::Lr1Tls; +use std::fmt::{Debug, Error, Formatter}; +use std::hash::Hash; +use grammar::repr::*; + +pub trait Lookahead: Clone + Debug + Eq + Ord + Hash + Collection { + fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error>; + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec>; +} + +#[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct Nil; + +impl Collection for Nil { + type Item = Nil; + + fn push(&mut self, _: Nil) -> bool { + false + } +} + +impl Lookahead for Nil { + fn fmt_as_item_suffix(&self, _fmt: &mut Formatter) -> Result<(), Error> { + Ok(()) + } + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { + let index = this_state.index; + + let mut conflicts = vec![]; + + for (terminal, &next_state) in &this_state.shifts { + conflicts.extend( + this_state + .reductions + .iter() + .map(|&(_, production)| Conflict { + state: index, + lookahead: Nil, + production: production, + action: Action::Shift(terminal.clone(), next_state), + }), + ); + } + + if this_state.reductions.len() > 1 { + for &(_, production) in &this_state.reductions[1..] { + let other_production = this_state.reductions[0].1; + conflicts.push(Conflict { + state: index, + lookahead: Nil, + production: production, + action: Action::Reduce(other_production), + }); + } + } + + conflicts + } +} + +/// I have semi-arbitrarily decided to use the term "token" to mean +/// either one of the terminals of our language, or else the +/// pseudo-symbol EOF that represents "end of input". +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum Token { + EOF, + Error, + Terminal(TerminalString), +} + +impl Lookahead for TokenSet { + fn fmt_as_item_suffix(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, " {:?}", self) + } + + fn conflicts<'grammar>(this_state: &State<'grammar, Self>) -> Vec> { + let mut conflicts = vec![]; + + for (terminal, &next_state) in &this_state.shifts { + let token = Token::Terminal(terminal.clone()); + let inconsistent = this_state.reductions.iter().filter_map( + |&(ref reduce_tokens, production)| { + if reduce_tokens.contains(&token) { + Some(production) + } else { + None + } + }, + ); + let set = TokenSet::from(token.clone()); + for production in inconsistent { + conflicts.push(Conflict { + state: this_state.index, + lookahead: set.clone(), + production: production, + action: Action::Shift(terminal.clone(), next_state), + }); + } + } + + let len = this_state.reductions.len(); + for i in 0..len { + for j in i + 1..len { + let &(ref i_tokens, i_production) = &this_state.reductions[i]; + let &(ref j_tokens, j_production) = &this_state.reductions[j]; + + if i_tokens.is_disjoint(j_tokens) { + continue; + } + + conflicts.push(Conflict { + state: this_state.index, + lookahead: i_tokens.intersection(j_tokens), + production: i_production, + action: Action::Reduce(j_production), + }); + } + } + + conflicts + } +} + +impl Token { + pub fn unwrap_terminal(&self) -> &TerminalString { + match *self { + Token::Terminal(ref t) => t, + Token::EOF | Token::Error => { + panic!("`unwrap_terminal()` invoked but with EOF or Error") + } + } + } +} + +#[derive(Clone, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct TokenSet { + bit_set: BitSet, +} + +fn with(op: OP) -> RET +where + OP: FnOnce(&TerminalSet) -> RET, +{ + Lr1Tls::with(op) +} + +impl TokenSet { + pub fn new() -> Self { + with(|terminals| TokenSet { + bit_set: BitSet::with_capacity(terminals.all.len() + 2), + }) + } + + /// A TokenSet containing all possible terminals + EOF. + pub fn all() -> Self { + let mut s = TokenSet::new(); + with(|terminals| { + for i in 0..terminals.all.len() { + s.bit_set.insert(i); + } + s.insert_eof(); + }); + s + } + + pub fn eof() -> Self { + let mut set = TokenSet::new(); + set.insert_eof(); + set + } + + fn eof_bit(&self) -> usize { + with(|terminals| terminals.all.len()) + } + + fn bit(&self, lookahead: &Token) -> usize { + match *lookahead { + Token::EOF => self.eof_bit(), + Token::Error => self.eof_bit() + 1, + Token::Terminal(ref t) => with(|terminals| terminals.bits[t]), + } + } + + pub fn len(&self) -> usize { + self.bit_set.len() + } + + pub fn insert(&mut self, lookahead: Token) -> bool { + let bit = self.bit(&lookahead); + self.bit_set.insert(bit) + } + + pub fn insert_eof(&mut self) -> bool { + let bit = self.eof_bit(); + self.bit_set.insert(bit) + } + + pub fn union_with(&mut self, set: &TokenSet) -> bool { + let len = self.len(); + self.bit_set.union_with(&set.bit_set); + self.len() != len + } + + pub fn intersection(&self, set: &TokenSet) -> TokenSet { + let mut bit_set = self.bit_set.clone(); + bit_set.intersect_with(&set.bit_set); + TokenSet { bit_set: bit_set } + } + + pub fn contains(&self, token: &Token) -> bool { + self.bit_set.contains(self.bit(token)) + } + + pub fn contains_eof(&self) -> bool { + self.bit_set.contains(self.eof_bit()) + } + + /// If this set contains EOF, removes it from the set and returns + /// true. Otherwise, returns false. + pub fn take_eof(&mut self) -> bool { + let eof_bit = self.eof_bit(); + let contains_eof = self.bit_set.contains(eof_bit); + self.bit_set.remove(eof_bit); + contains_eof + } + + pub fn is_disjoint(&self, other: &TokenSet) -> bool { + self.bit_set.is_disjoint(&other.bit_set) + } + + pub fn is_intersecting(&self, other: &TokenSet) -> bool { + !self.is_disjoint(other) + } + + pub fn iter<'iter>(&'iter self) -> TokenSetIter<'iter> { + TokenSetIter { + bit_set: self.bit_set.iter(), + } + } +} + +pub struct TokenSetIter<'iter> { + bit_set: bit_set::Iter<'iter, u32>, +} + +impl<'iter> Iterator for TokenSetIter<'iter> { + type Item = Token; + + fn next(&mut self) -> Option { + self.bit_set.next().map(|bit| { + with(|terminals| { + if bit == terminals.all.len() + 1 { + Token::Error + } else if bit == terminals.all.len() { + Token::EOF + } else { + Token::Terminal(terminals.all[bit].clone()) + } + }) + }) + } +} + +impl<'debug> Debug for TokenSet { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let terminals: Vec<_> = self.iter().collect(); + Debug::fmt(&terminals, fmt) + } +} + +impl<'iter> IntoIterator for &'iter TokenSet { + type IntoIter = TokenSetIter<'iter>; + type Item = Token; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +impl Collection for TokenSet { + type Item = TokenSet; + + fn push(&mut self, item: TokenSet) -> bool { + self.union_with(&item) + } +} + +impl From for TokenSet { + fn from(token: Token) -> Self { + let mut set = TokenSet::new(); + set.insert(token); + set + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/mod.rs new file mode 100644 index 000000000000..b87ea1898293 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/mod.rs @@ -0,0 +1,43 @@ +//! Naive LR(1) generation algorithm. + +use grammar::repr::*; + +pub mod codegen; +mod build; +mod build_lalr; +mod core; +mod error; +mod example; +mod first; +mod lane_table; +mod lookahead; +mod state_graph; +mod tls; +mod trace; +mod report; +use std::io::{self, Write}; + +#[cfg(test)] +mod interpret; + +pub use self::core::{LR1Result, LR1TableConstructionError}; +pub use self::error::report_error; +pub use self::tls::Lr1Tls; + +pub fn build_states<'grammar>( + grammar: &'grammar Grammar, + start: NonterminalString, +) -> LR1Result<'grammar> { + if !grammar.algorithm.lalr { + build::build_lr1_states(grammar, start) + } else { + build_lalr::build_lalr_states(grammar, start) + } +} + +pub fn generate_report<'grammar, W: Write + 'grammar>( + out: &'grammar mut W, + lr1result: &LR1Result<'grammar>, +) -> io::Result<()> { + report::generate_report(out, lr1result) +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/report/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/report/mod.rs new file mode 100644 index 000000000000..d62d897f603c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/report/mod.rs @@ -0,0 +1,446 @@ +use grammar::repr::*; +use lr1::core::*; +use std::io::{self, Write}; +use std::cmp::max; +use collections::*; + +use super::lookahead::*; + +pub fn generate_report<'grammar, W: Write + 'grammar>( + out: &'grammar mut W, + lr1result: &LR1Result<'grammar>, +) -> io::Result<()> { + let mut generator = ReportGenerator::new(out); + generator.report_lr_table_construction(lr1result) +} + +static INDENT_STRING: &'static str = " "; + +struct ReportGenerator<'report, W> +where + W: Write + 'report, +{ + pub out: &'report mut W, +} + +type ConflictStateMap<'report, 'grammar, L> = Map>>; + +impl<'report, W> ReportGenerator<'report, W> +where + W: Write + 'report, +{ + pub fn new(out: &'report mut W) -> Self { + ReportGenerator { out: out } + } + + pub fn report_lr_table_construction<'grammar: 'report, L>( + &mut self, + lr1result: &'report LRResult<'grammar, L>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(self.write_header()); + try!(self.write_section_header("Summary")); + try!(writeln!(self.out, "")); + match lr1result { + &Ok(ref states) => { + try!(writeln!(self.out, "Constructed {} states", states.len())); + try!(self.report_states(&states, &Map::new())); + } + &Err(ref table_construction_error) => { + try!(writeln!(self.out, "Failure")); + try!(writeln!( + self.out, + "Constructed {} states", + table_construction_error.states.len() + )); + try!(writeln!( + self.out, + "Has {} conflicts", + table_construction_error.conflicts.len() + )); + let (sr, rr, conflict_map) = + self.process_conflicts(&table_construction_error.conflicts); + if (sr > 0) { + try!(writeln!(self.out, "{}shift/reduce: {}", INDENT_STRING, sr)); + } + if (rr > 0) { + try!(writeln!(self.out, "{}reduce/reduce: {}", INDENT_STRING, rr)); + } + try!(write!(self.out, "States with conflicts: ")); + for state in conflict_map.keys() { + try!(write!(self.out, " {}", state)); + } + try!(writeln!(self.out, "")); + try!(self.report_states(&table_construction_error.states, &conflict_map)); + } + }; + Ok(()) + } + + fn process_conflicts<'grammar, L>( + &mut self, + conflicts: &'report Vec>, + ) -> (usize, usize, ConflictStateMap<'report, 'grammar, L>) + where + L: Lookahead, + { + let mut sr: usize = 0; + let mut rr: usize = 0; + let mut conflict_map = Map::new(); + for conflict in conflicts.iter() { + match conflict.action { + Action::Shift(_, _) => sr = sr + 1, + Action::Reduce(_) => rr = rr + 1, + } + conflict_map + .entry(conflict.state) + .or_insert(vec![]) + .push(conflict); + } + (sr, rr, conflict_map) + } + + fn report_states<'grammar, L>( + &mut self, + states: &Vec>, + conflict_map: &ConflictStateMap<'report, 'grammar, L>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(self.write_section_header("State Table")); + for ref state in states { + try!(writeln!(self.out, "")); + try!(self.report_state(&state, conflict_map.get(&state.index))); + } + Ok(()) + } + + fn report_state<'grammar, L>( + &mut self, + state: &State<'grammar, L>, + conflicts_opt: Option<&Vec<&'report Conflict<'grammar, L>>>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(writeln!(self.out, "State {} {{", state.index)); + try!(self.write_items(&state.items)); + if (state.reductions.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_reductions(&state.reductions)); + } + + let max_width = get_width_for_gotos(state); + + if (!state.shifts.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_shifts(&state.shifts, max_width)); + } + + if (!state.gotos.len() > 0) { + try!(writeln!(self.out, "")); + try!(self.write_gotos(&state.gotos, max_width)); + } + + if let Some(conflicts) = conflicts_opt { + for conflict in conflicts.iter() { + try!(self.write_conflict(conflict)); + } + } + + try!(writeln!(self.out, "}}")); + Ok(()) + } + + fn write_conflict<'grammar, L>(&mut self, conflict: &Conflict<'grammar, L>) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(writeln!(self.out, "")); + match conflict.action { + Action::Shift(ref terminal, state) => { + let max_width = max( + terminal.display_len(), + conflict.production.nonterminal.len(), + ); + try!(writeln!(self.out, "{}shift/reduce conflict", INDENT_STRING)); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(conflict.production, max_width)); + let sterminal = format!("{}", terminal); + try!(writeln!( + self.out, + "{}{}shift {:width$} shift and goto {}", + INDENT_STRING, + INDENT_STRING, + sterminal, + state, + width = max_width + )); + } + Action::Reduce(other_production) => { + let max_width = max( + other_production.nonterminal.len(), + conflict.production.nonterminal.len(), + ); + try!(writeln!( + self.out, + "{}reduce/reduce conflict", + INDENT_STRING + )); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(conflict.production, max_width)); + try!(write!( + self.out, + "{}{}reduction ", + INDENT_STRING, INDENT_STRING + )); + try!(self.write_production(other_production, max_width)); + } + } + try!(self.write_lookahead(&conflict.lookahead)); + Ok(()) + } + + fn write_items<'grammar, L>(&mut self, items: &Items<'grammar, L>) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let max_width = get_max_length(items.vec.iter().map(|item| &item.production.nonterminal)); + + for item in items.vec.iter() { + try!(writeln!(self.out, "")); + try!(self.write_item(item, max_width)); + } + Ok(()) + } + + fn write_item<'grammar, L>( + &mut self, + item: &Item<'grammar, L>, + max_width: usize, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", item.production.nonterminal); + try!(write!(self.out, "{:width$} ->", s, width = max_width)); + for i in 0..item.index { + try!(write!(self.out, " {}", item.production.symbols[i])); + } + try!(write!(self.out, " .")); + for i in item.index..item.production.symbols.len() { + try!(write!(self.out, " {}", item.production.symbols[i])); + } + try!(writeln!(self.out, "")); + try!(self.write_lookahead(&item.lookahead)); + Ok(()) + } + + fn write_shifts( + &mut self, + shifts: &Map, + max_width: usize, + ) -> io::Result<()> { + for entry in shifts { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", entry.0); + try!(writeln!( + self.out, + "{:width$} shift and goto {}", + s, + entry.1, + width = max_width + )); + } + Ok(()) + } + + fn write_reductions<'grammar, L>( + &mut self, + reductions: &Vec<(L, &'grammar Production)>, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let max_width = get_max_length(reductions.into_iter().map(|p| &p.1.nonterminal)); + for reduction in reductions.iter() { + try!(writeln!(self.out, "")); + try!(self.write_reduction(reduction, max_width)); + } + Ok(()) + } + + fn write_production<'grammar>( + &mut self, + production: &'grammar Production, + max_width: usize, + ) -> io::Result<()> { + try!(write!( + self.out, + "{:width$} ->", + production.nonterminal, + width = max_width + )); + for symbol in production.symbols.iter() { + try!(write!(self.out, " {}", symbol)); + } + try!(writeln!(self.out, "")); + Ok(()) + } + + fn write_reduction<'grammar, L>( + &mut self, + reduction: &(L, &'grammar Production), + max_width: usize, + ) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + let ref production = reduction.1; + try!(write!(self.out, "{}reduction ", INDENT_STRING)); + try!(self.write_production(production, max_width)); + try!(self.write_lookahead(&reduction.0)); + Ok(()) + } + + fn write_lookahead(&mut self, lookahead: &L) -> io::Result<()> + where + L: Lookahead + LookaheadPrinter, + { + if (lookahead.has_anything_to_print()) { + try!(write!( + self.out, + "{}{}lookahead", + INDENT_STRING, INDENT_STRING + )); + try!(lookahead.print(self.out)); + try!(writeln!(self.out, "")); + } + Ok(()) + } + + fn write_gotos( + &mut self, + gotos: &Map, + max_width: usize, + ) -> io::Result<()> { + for entry in gotos { + try!(write!(self.out, "{}", INDENT_STRING)); + // stringize it first to allow handle :width by Display for string + let s = format!("{}", entry.0); + try!(writeln!( + self.out, + "{:width$} goto {}", + s, + entry.1, + width = max_width + )); + } + Ok(()) + } + + fn write_section_header(&mut self, title: &str) -> io::Result<()> { + try!(writeln!(self.out, "\n{}", title)); + try!(writeln!( + self.out, + "----------------------------------------" + )); + Ok(()) + } + + fn write_header(&mut self) -> io::Result<()> { + try!(writeln!(self.out, "Lalrpop Report File")); + try!(writeln!( + self.out, + "========================================" + )); + Ok(()) + } +} + +// helpers + +trait LookaheadPrinter +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()>; + + fn has_anything_to_print<'report>(self: &Self) -> bool; +} + +impl LookaheadPrinter for Nil +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, _: &'report mut W) -> io::Result<()> { + Ok(()) + } + + fn has_anything_to_print<'report>(self: &Self) -> bool { + false + } +} + +impl LookaheadPrinter for TokenSet +where + W: Write, +{ + fn print<'report, 'grammar>(self: &Self, out: &'report mut W) -> io::Result<()> { + for i in self.iter() { + try!(write!(out, " {}", i)) + } + Ok(()) + } + + fn has_anything_to_print<'report>(self: &Self) -> bool { + self.len() > 0 + } +} + +trait HasDisplayLen { + fn display_len(&self) -> usize; +} + +impl<'a> HasDisplayLen for &'a TerminalString { + fn display_len(&self) -> usize { + TerminalString::display_len(self) + } +} + +impl<'a> HasDisplayLen for &'a NonterminalString { + fn display_len(&self) -> usize { + self.len() + } +} + +fn get_max_length(m: I) -> usize +where + I: Iterator, + I::Item: HasDisplayLen, +{ + m.map(|k| k.display_len()).fold(0, |acc, x| max(acc, x)) +} + +fn get_width_for_gotos<'grammar, L>(state: &State<'grammar, L>) -> usize +where + L: Lookahead, +{ + let shifts_max_width = get_max_length(state.shifts.keys()); + let gotos_max_width = get_max_length(state.gotos.keys()); + max(shifts_max_width, gotos_max_width) +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/state_graph.rs b/third_party/rust/lalrpop-snap/src/lr1/state_graph.rs new file mode 100644 index 000000000000..8639845e4c90 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/state_graph.rs @@ -0,0 +1,94 @@ +use grammar::repr::*; +use lr1::core::*; +use lr1::lookahead::Lookahead; +use petgraph::{EdgeDirection, Graph}; +use petgraph::graph::NodeIndex; +use petgraph::prelude::*; + +// Each state `s` corresponds to the node in the graph with index +// `s`. The edges are the shift transitions. +pub struct StateGraph { + graph: Graph<(), Symbol>, +} + +impl StateGraph { + pub fn new<'grammar, L>(states: &[State<'grammar, L>]) -> StateGraph + where + L: Lookahead, + { + let mut graph = Graph::new(); + + // First, create the nodes. + for i in 0..states.len() { + let j = graph.add_node(()); + assert_eq!(i, j.index()); + } + + // Add in the edges. + for (i, state) in states.iter().enumerate() { + // Successors of a node arise from: + // - shifts (found in the `conflicts` and `tokens` maps) + // - gotos (found in the `gotos` map) + graph.extend_with_edges( + state + .shifts + .iter() + .map(|(terminal, &state)| (Symbol::Terminal(terminal.clone()), state)) + .chain( + state + .gotos + .iter() + .map(|(nt, &state)| (Symbol::Nonterminal(nt.clone()), state)), + ) + .map(|(symbol, successor)| { + (NodeIndex::new(i), NodeIndex::new(successor.0), symbol) + }), + ); + } + + StateGraph { graph: graph } + } + + /// Given a list of symbols `[X, Y, Z]`, traces back from + /// `initial_state_index` to find the set of states whence we + /// could have arrived at `initial_state_index` after pushing `X`, + /// `Y`, and `Z`. + pub fn trace_back( + &self, + initial_state_index: StateIndex, + initial_symbols: &[Symbol], + ) -> Vec { + let mut stack = vec![(initial_state_index, initial_symbols)]; + let mut result = vec![]; + while let Some((state_index, symbols)) = stack.pop() { + if let Some((head, tail)) = symbols.split_last() { + stack.extend( + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) + .filter(|edge| edge.weight() == head) + .map(|edge| (StateIndex(edge.source().index()), tail)), + ); + } else { + result.push(state_index); + } + } + result.sort(); + result.dedup(); + result + } + + pub fn successors(&self, state_index: StateIndex) -> Vec { + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Outgoing) + .map(|edge| StateIndex(edge.target().index())) + .collect() + } + + pub fn predecessors(&self, state_index: StateIndex, symbol: Symbol) -> Vec { + self.graph + .edges_directed(NodeIndex::new(state_index.0), EdgeDirection::Incoming) + .filter(|edge| *edge.weight() == symbol) + .map(|edge| StateIndex(edge.source().index())) + .collect() + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/tls.rs b/third_party/rust/lalrpop-snap/src/lr1/tls.rs new file mode 100644 index 000000000000..3f68a45cc1ec --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/tls.rs @@ -0,0 +1,40 @@ +//! Thread-local data specific to LR(1) processing. + +use grammar::repr::TerminalSet; +use std::cell::RefCell; +use std::mem; +use std::sync::Arc; + +thread_local! { + static TERMINALS: RefCell>> = RefCell::new(None) +} + +pub struct Lr1Tls { + old_value: Option>, +} + +impl Lr1Tls { + pub fn install(terminals: TerminalSet) -> Lr1Tls { + let old_value = TERMINALS.with(|s| { + let mut s = s.borrow_mut(); + mem::replace(&mut *s, Some(Arc::new(terminals))) + }); + + Lr1Tls { + old_value: old_value, + } + } + + pub fn with(op: OP) -> RET + where + OP: FnOnce(&TerminalSet) -> RET, + { + TERMINALS.with(|s| op(s.borrow().as_ref().expect("LR1 TLS not installed"))) + } +} + +impl Drop for Lr1Tls { + fn drop(&mut self) { + TERMINALS.with(|s| *s.borrow_mut() = self.old_value.take()); + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/mod.rs new file mode 100644 index 000000000000..d928a205a530 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/mod.rs @@ -0,0 +1,31 @@ +use collections::{set, Set}; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::state_graph::StateGraph; +use grammar::repr::*; + +mod reduce; +mod shift; +mod trace_graph; + +pub struct Tracer<'trace, 'grammar: 'trace> { + states: &'trace [LR1State<'grammar>], + first_sets: &'trace FirstSets, + state_graph: StateGraph, + trace_graph: TraceGraph<'grammar>, + visited_set: Set<(StateIndex, NonterminalString)>, +} + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn new(first_sets: &'trace FirstSets, states: &'trace [LR1State<'grammar>]) -> Self { + Tracer { + states: states, + first_sets: first_sets, + state_graph: StateGraph::new(states), + trace_graph: TraceGraph::new(), + visited_set: set(), + } + } +} + +pub use self::trace_graph::TraceGraph; diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/mod.rs new file mode 100644 index 000000000000..028dcb77f43b --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/mod.rs @@ -0,0 +1,111 @@ +use lr1::core::*; +use grammar::repr::*; + +use super::Tracer; +use super::trace_graph::*; + +#[cfg(test)] +mod test; + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn backtrace_reduce( + mut self, + item_state: StateIndex, + item: LR0Item<'grammar>, + ) -> TraceGraph<'grammar> { + self.trace_reduce_item(item_state, item); + self.trace_graph + } + + fn trace_reduce_item(&mut self, item_state: StateIndex, item: LR0Item<'grammar>) { + // We start out with an item + // + // X = ...p (*) ...s + // + // which we can (eventually) reduce, though we may have to do + // some epsilon reductions first if ...s is non-empty. We want + // to trace back until we have (at least) one element of + // context for the reduction. + let nonterminal = &item.production.nonterminal; // X + + // Add an edge + // + // [X] -{...p,_,...s}-> [X = ...p (*) ...s] + // + // because to reach that item we pushed `...p` from the start + // of `X` and afterwards we expect to see `...s`. + self.trace_graph + .add_edge(nonterminal.clone(), item, item.symbol_sets()); + + // Walk back to the set of states S where we had: + // + // X = (*) ...p + let pred_states = self.state_graph.trace_back(item_state, item.prefix()); + + // Add in edges from [X] to all the places [X] can be consumed. + for pred_state in pred_states { + self.trace_reduce_from_state(pred_state, nonterminal); + } + } + + // We know that we can reduce the nonterminal `Y`. We want to find + // at least one element of context, so we search back to find out + // who will consume that reduced value. So search for those items + // that can shift a `Y`: + // + // Z = ... (*) Y ...s + // + // If we find that `...s` is potentially empty, then we haven't + // actually found any context, and so we may have to keep + // searching. + fn trace_reduce_from_state(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) + // "Y" + { + if !self.visited_set.insert((item_state, nonterminal.clone())) { + return; + } + for pred_item in self.states[item_state.0] + .items + .vec + .iter() + .filter(|i| i.can_shift_nonterminal(nonterminal)) + { + // Found a state: + // + // Z = ...p (*) Y ...s + // + // If `...s` does not match `\epsilon`, then we are done, + // because `FIRST(...s)` will provide a token of context. + // But otherwise we have to keep searching backwards. + + let symbol_sets = pred_item.symbol_sets(); + + let first_suffix = self.first_sets.first0(symbol_sets.suffix); + let continue_tracing = first_suffix.contains_eof(); + + if !continue_tracing { + // Add an edge + // + // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] + // + // and stop. + self.trace_graph + .add_edge(pred_item.to_lr0(), nonterminal.clone(), symbol_sets); + } else { + // Add an edge + // + // [Z] -{..p}-> [Y] + // + // because we can reduce by consuming `...p` + // tokens, and continue tracing. + self.trace_graph.add_edge( + pred_item.production.nonterminal.clone(), + nonterminal.clone(), + symbol_sets, + ); + + self.trace_reduce_item(item_state, pred_item.to_lr0()); + } + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/test.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/test.rs new file mode 100644 index 000000000000..20f150039898 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/reduce/test.rs @@ -0,0 +1,364 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::core::Item; +use lr1::first::FirstSets; +use lr1::interpret::interpret_partial; +use lr1::lookahead::{Token, TokenSet}; +use lr1::tls::Lr1Tls; +use test_util::{expect_debug, normalized_grammar}; +use tls::Tls; + +use super::super::Tracer; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +fn term(t: &str) -> TerminalString { + TerminalString::quoted(Atom::from(t)) +} + +macro_rules! terms { + ($($t:expr),*) => { + vec![$(term($t)),*] + } +} + +fn test_grammar1() -> Grammar { + normalized_grammar( + r#" + grammar; + + pub Start: () = Stmt; + + pub Stmt: () = { + Exprs ";", + Exprs + }; + + Exprs: () = { + Expr, + Exprs "," Expr + }; + + Expr: () = { + "Int", + Expr "+" "Int", + }; +"#, + ) +} + +#[test] +fn backtrace1() { + let _tls = Tls::test(); + let grammar = test_grammar1(); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let states = build_states(&grammar, nt("Start")).unwrap(); + let tracer = Tracer::new(&first_sets, &states); + let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); + let top_state = *state_stack.last().unwrap(); + + // Top state will have items like: + // + // Expr = "Int" (*) [EOF], + // Expr = "Int" (*) ["+"], + // Expr = "Int" (*) [","], + // Expr = "Int" (*) [";"] + // + // Select the ";" one. + let semi = Token::Terminal(term(";")); + let semi_item = states[top_state.0] + .items + .vec + .iter() + .filter(|item| item.lookahead.contains(&semi)) + .next() + .unwrap(); + + let backtrace = tracer.backtrace_reduce(top_state, semi_item.to_lr0()); + + println!("{:#?}", backtrace); + + let pictures: Vec<_> = backtrace + .lr0_examples(semi_item.to_lr0()) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug( + &pictures, + r#" +[ + [ + " Exprs "," "Int" ╷ ";"", + " │ └─Expr─┤ │", + " ├─Exprs──────────┘ │", + " └─Stmt───────────────┘" + ], + [ + " Exprs "," "Int" ╷ "," Expr", + " │ └─Expr─┤ │", + " ├─Exprs──────────┘ │", + " └─Exprs───────────────────┘" + ], + [ + " "Int" ╷ ";"", + " ├─Expr──┤ │", + " ├─Exprs─┘ │", + " └─Stmt──────┘" + ], + [ + " "Int" ╷ "," Expr", + " ├─Expr──┤ │", + " ├─Exprs─┘ │", + " └─Exprs──────────┘" + ], + [ + " "Int" ╷ "+" "Int"", + " ├─Expr─┘ │", + " └─Expr───────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn backtrace2() { + let _tls = Tls::test(); + // This grammar yields a S/R conflict. Is it (int -> int) -> int + // or int -> (int -> int)? + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let tracer = Tracer::new(&first_sets, &err.states); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + let item = Item { + production: conflict.production, + index: conflict.production.symbols.len(), + lookahead: conflict.lookahead.clone(), + }; + println!("item={:?}", item); + let backtrace = tracer.backtrace_reduce(conflict.state, item.to_lr0()); + println!("{:#?}", backtrace); + expect_debug( + &backtrace, + r#" +[ + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), + (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + // Check that we can successfully enumerate and paint the examples + // here. + let pictures: Vec<_> = backtrace + .lr1_examples(&first_sets, &item) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug( + &pictures, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " ├─Ty─────┘ │", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn reduce_backtrace_3_graph() { + // This grammar yields a S/R conflict. Is it `(int -> int) -> int` + // or `int -> (int -> int)`? + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + let item = Item { + production: conflict.production, + index: conflict.production.symbols.len(), + lookahead: conflict.lookahead.clone(), + }; + println!("item={:?}", item); + let tracer = Tracer::new(&first_sets, &err.states); + let graph = tracer.backtrace_reduce(conflict.state, item.to_lr0()); + expect_debug( + &graph, + r#" +[ + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Item(Ty = Ty "->" (*) Ty)), + (Nonterminal(Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty, "->", Ty], None, [])-> Item(Ty = Ty "->" Ty (*))), + (Item(Ty = (*) Ty "->" Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + let list: Vec<_> = graph + .lr1_examples(&first_sets, &item) + .map(|example| example.paint_unstyled()) + .collect(); + expect_debug( + &list, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " ├─Ty─────┘ │", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn backtrace_filter() { + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" + grammar; + + pub Start: () = Stmt; + + pub Stmt: () = { + Exprs ";" + }; + + Exprs: () = { + Expr, + Exprs "," Expr + }; + + Expr: () = { + ExprAtom ExprSuffix + }; + + ExprSuffix: () = { + (), + "?", + }; + + ExprAtom: () = { + "Int", + }; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let states = build_states(&grammar, nt("Start")).unwrap(); + let first_sets = FirstSets::new(&grammar); + let tracer = Tracer::new(&first_sets, &states); + let state_stack = interpret_partial(&states, terms!["Int"]).unwrap(); + let top_state = *state_stack.last().unwrap(); + + // Top state will have an item like: + // + // Expr = "Int" (*) [",", ";"], + let semi = Token::Terminal(term(";")); + let lr1_item = states[top_state.0] + .items + .vec + .iter() + .filter(|item| item.lookahead.contains(&semi)) + .next() + .unwrap(); + + let backtrace = tracer.backtrace_reduce(top_state, lr1_item.to_lr0()); + + println!("{:#?}", backtrace); + + // With no filtering, we get examples with both `;` and `,` as + // lookahead (though `ExprSuffix` is in the way). + let pictures: Vec<_> = backtrace + .lr0_examples(lr1_item.to_lr0()) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug(&pictures, r#" +[ + [ + " Exprs "," "Int" ╷ ExprSuffix ";"", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Stmt──────────────────────────────┘" + ], + [ + " Exprs "," "Int" ╷ ExprSuffix "," Expr", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Exprs──────────────────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix ";"", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Stmt────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix "," Expr", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Exprs────────────────────────┘" + ] +] +"#.trim()); + + // Select those with `;` as lookahead + let semi_item = lr1_item.with_lookahead(TokenSet::from(semi)); + let pictures: Vec<_> = backtrace + .lr1_examples(&first_sets, &semi_item) + .map(|e| e.paint_unstyled()) + .collect(); + expect_debug(&pictures, r#" +[ + [ + " Exprs "," "Int" ╷ ExprSuffix ";"", + " │ ├─ExprAtom─┘ │ │", + " │ └─Expr────────────────┤ │", + " ├─Exprs─────────────────────────┘ │", + " └─Stmt──────────────────────────────┘" + ], + [ + " "Int" ╷ ExprSuffix ";"", + " ├─ExprAtom─┘ │ │", + " ├─Expr────────────────┤ │", + " ├─Exprs───────────────┘ │", + " └─Stmt────────────────────┘" + ] +] +"#.trim()); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/shift/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/shift/mod.rs new file mode 100644 index 000000000000..540e6e321f87 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/shift/mod.rs @@ -0,0 +1,101 @@ +use lr1::core::*; +use grammar::repr::*; + +use super::Tracer; +use super::trace_graph::*; + +#[cfg(test)] +mod test; + +/// A backtrace explaining how a particular shift: +/// +/// X = ...p (*) Token ... +/// +/// came to be in the list of items for some state S. This backtrace +/// always has a particular form. First, we can walk back over the +/// prefix, which will bring us to some set of states S1 all of which +/// contain the same item, but with the cursor at the front: +/// +/// X = (*) ...p Token ... +/// +/// Then we can walk back within those states some number of epsilon +/// moves, traversing nonterminals of the form: +/// +/// Y = (*) X ...s +/// +/// (Note that each nonterminal `Y` may potentially have many +/// productions of this form. I am not sure yet if they all matter or +/// not.) +/// +/// Finally, either we are in the start state, or else we reach some +/// production of the form: +/// +/// Z = ...p (*) Y ...s +/// +/// Ultimately this "trace" is best represented as a DAG. The problem +/// is that some of those nonterminals could, for example, be +/// optional. + +impl<'trace, 'grammar> Tracer<'trace, 'grammar> { + pub fn backtrace_shift( + mut self, + item_state: StateIndex, + item: LR0Item<'grammar>, + ) -> TraceGraph<'grammar> { + let symbol_sets = item.symbol_sets(); + + // The states `S` + let pred_states = self.state_graph.trace_back(item_state, symbol_sets.prefix); + + // Add the edge `[X] -{...p,Token,...s}-> [X = ...p (*) Token ...s]` + self.trace_graph + .add_edge(item.production.nonterminal.clone(), item, symbol_sets); + + for pred_state in pred_states { + self.trace_epsilon_edges(pred_state, &item.production.nonterminal); + } + + self.trace_graph + } + + // Because item.index is 0, we know we are at an index + // like: + // + // Y = (*) ... + // + // This can only arise if `Y` is the start nonterminal + // or if there is an epsilon move from another item + // like: + // + // Z = ...p (*) Y ... + // + // So search for items like Z. + fn trace_epsilon_edges(&mut self, item_state: StateIndex, nonterminal: &NonterminalString) // "Y" + { + if self.visited_set.insert((item_state, nonterminal.clone())) { + for pred_item in self.states[item_state.0].items.vec.iter() { + if pred_item.can_shift_nonterminal(nonterminal) { + if pred_item.index > 0 { + // Add an edge: + // + // [Z = ...p (*) Y ...s] -(...p,Y,...s)-> [Y] + self.trace_graph.add_edge( + pred_item, + nonterminal.clone(), + pred_item.symbol_sets(), + ); + } else { + // Trace back any incoming edges to [Z = ...p (*) Y ...]. + let pred_nonterminal = &pred_item.production.nonterminal; + self.trace_graph.add_edge( + pred_nonterminal.clone(), + nonterminal.clone(), + pred_item.symbol_sets(), + ); + self.trace_epsilon_edges(item_state, pred_nonterminal); + } + } + } + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/shift/test.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/shift/test.rs new file mode 100644 index 000000000000..8e34457f0dc6 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/shift/test.rs @@ -0,0 +1,78 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::build_states; +use lr1::core::*; +use lr1::first::FirstSets; +use lr1::tls::Lr1Tls; +use test_util::{expect_debug, normalized_grammar}; +use tls::Tls; + +use super::super::Tracer; + +fn nt(t: &str) -> NonterminalString { + NonterminalString(Atom::from(t)) +} + +#[test] +fn shift_backtrace_1() { + // This grammar yields a S/R conflict. Is it `(int -> int) -> int` + // or `int -> (int -> int)`? + + let _tls = Tls::test(); + let grammar = normalized_grammar( + r#" +grammar; +pub Ty: () = { + "int" => (), + "bool" => (), + "->" => (), +}; +"#, + ); + let _lr1_tls = Lr1Tls::install(grammar.terminals.clone()); + let first_sets = FirstSets::new(&grammar); + let err = build_states(&grammar, nt("Ty")).unwrap_err(); + let conflict = err.conflicts[0].clone(); + println!("conflict={:?}", conflict); + + // Gin up the LR0 item involved in the shift/reduce conflict: + // + // Ty = Ty (*) -> Ty (shift) + // + // from the item that we can reduce: + // + // Ty = Ty -> Ty (*) (reduce) + + assert!(conflict.production.symbols.len() == 3); + let item = Item::lr0(conflict.production, 1); + println!("item={:?}", item); + let tracer = Tracer::new(&first_sets, &err.states); + let graph = tracer.backtrace_shift(conflict.state, item); + expect_debug( + &graph, + r#" +[ + (Nonterminal(Ty) -([], Some(Ty), ["->", Ty])-> Nonterminal(Ty)), + (Nonterminal(Ty) -([Ty], Some("->"), [Ty])-> Item(Ty = Ty (*) "->" Ty)), + (Item(Ty = Ty "->" (*) Ty) -([Ty, "->"], Some(Ty), [])-> Nonterminal(Ty)) +] +"#.trim(), + ); + + let list: Vec<_> = graph + .lr0_examples(item) + .map(|example| example.paint_unstyled()) + .collect(); + expect_debug( + &list, + r#" +[ + [ + " Ty "->" Ty "->" Ty", + " │ └─Ty─────┤", + " └─Ty─────────────┘" + ] +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/mod.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/mod.rs new file mode 100644 index 000000000000..652cab79ded3 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/mod.rs @@ -0,0 +1,452 @@ +use collections::{map, Map}; +use lr1::core::*; +use lr1::first::*; +use lr1::lookahead::*; +use lr1::example::*; +use grammar::repr::*; +use petgraph::{Directed, EdgeDirection, Graph}; +use petgraph::graph::{EdgeReference, Edges, NodeIndex}; +use petgraph::prelude::*; +use std::fmt::{Debug, Error, Formatter}; + +#[cfg(test)] +mod test; + +/// Trace graphs are used to summarize how it is that we came to be in +/// a state where we can take some particular shift/reduce action; put +/// another way, how it is that we came to be in a state with some +/// particular LR(1) item. +/// +/// The nodes in the graph are each labeled with a TraceGraphNode and +/// hence take one of two forms: +/// +/// - TraceGraphNode::Item -- represents an LR0 item. These nodes are +/// used for the starting/end points in the graph only. Basically a +/// complete trace stretches from the start item to some end item, +/// and all intermediate nodes are nonterminals. +/// - TraceGraphNode::Nonterminal -- if this graph is for a shift, +/// then these represent items where the cursor is at the beginning: +/// `X = (*) ...`. If the graph is for a reduce, they represent +/// items where a reduce is possible without shifting any more +/// terminals (though further reductions may be needed): `X = +/// ... (*) ...s` where `FIRST(...s)` includes `\epsilon`. +/// +/// The edges in the graph are also important. They are labeled with +/// `SymbolSets` instances, meaning that each carries a (prefix, +/// cursor, and suffix) tuple. The label on an edge `A -> B` means +/// that transitioning from a state containing `A` to a state +/// containing `B` is possible if you: +/// +/// - shift the symbols in `prefix` +/// - `B` will produce the symbol in `cursor` +/// - shift the symbols in `suffix` after `B` is popped +pub struct TraceGraph<'grammar> { + // A -L-> B means: + // + // Transition from a state containing A to a state containing + // B by (pushing|popping) the symbols L. + // + // If this trace graph represents a shift backtrace, then the + // labels are symbols that are pushed. Otherwise they are labels + // that are popped. + graph: Graph, SymbolSets<'grammar>>, + indices: Map, NodeIndex>, +} + +#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq)] +pub enum TraceGraphNode<'grammar> { + Nonterminal(NonterminalString), + Item(LR0Item<'grammar>), +} + +impl<'grammar> TraceGraph<'grammar> { + pub fn new() -> Self { + TraceGraph { + graph: Graph::new(), + indices: map(), + } + } + + pub fn add_node(&mut self, node: T) -> NodeIndex + where + T: Into>, + { + let node = node.into(); + let graph = &mut self.graph; + *self.indices + .entry(node.clone()) + .or_insert_with(|| graph.add_node(node)) + } + + pub fn add_edge(&mut self, from: F, to: T, labels: SymbolSets<'grammar>) + where + F: Into>, + T: Into>, + { + let from = self.add_node(from.into()); + let to = self.add_node(to.into()); + if !self.graph + .edges_directed(from, EdgeDirection::Outgoing) + .any(|edge| edge.target() == to && *edge.weight() == labels) + { + self.graph.add_edge(from, to, labels); + } + } + + pub fn lr0_examples<'graph>( + &'graph self, + lr0_item: LR0Item<'grammar>, + ) -> PathEnumerator<'graph, 'grammar> { + PathEnumerator::new(self, lr0_item) + } + + pub fn lr1_examples<'trace>( + &'trace self, + first_sets: &'trace FirstSets, + item: &LR1Item<'grammar>, + ) -> FilteredPathEnumerator<'trace, 'grammar> { + FilteredPathEnumerator::new(first_sets, self, item.to_lr0(), item.lookahead.clone()) + } +} + +impl<'grammar> Into> for NonterminalString { + fn into(self) -> TraceGraphNode<'grammar> { + TraceGraphNode::Nonterminal(self) + } +} + +impl<'grammar, L: Lookahead> Into> for Item<'grammar, L> { + fn into(self) -> TraceGraphNode<'grammar> { + (&self).into() + } +} + +impl<'a, 'grammar, L: Lookahead> Into> for &'a Item<'grammar, L> { + fn into(self) -> TraceGraphNode<'grammar> { + TraceGraphNode::Item(self.to_lr0()) + } +} + +// This just exists to help with the `Debug` impl +struct TraceGraphEdge<'grammar> { + from: TraceGraphNode<'grammar>, + to: TraceGraphNode<'grammar>, + label: ( + &'grammar [Symbol], + Option<&'grammar Symbol>, + &'grammar [Symbol], + ), +} + +impl<'grammar> Debug for TraceGraphEdge<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "({:?} -{:?}-> {:?})", self.from, self.label, self.to) + } +} + +impl<'grammar> Debug for TraceGraph<'grammar> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let mut s = fmt.debug_list(); + for (node, &index) in &self.indices { + for edge in self.graph.edges_directed(index, EdgeDirection::Outgoing) { + let label = edge.weight(); + s.entry(&TraceGraphEdge { + from: node.clone(), + to: self.graph[edge.target()].clone(), + label: (label.prefix, label.cursor, label.suffix), + }); + } + } + s.finish() + } +} + +/////////////////////////////////////////////////////////////////////////// +// PathEnumerator +// +// The path enumerater walks a trace graph searching for paths that +// start at a given item and terminate at another item. If such a path +// is found, you can then find the complete list of symbols by calling +// `symbols_and_cursor` and also get access to the state. + +pub struct PathEnumerator<'graph, 'grammar: 'graph> { + graph: &'graph TraceGraph<'grammar>, + stack: Vec>, +} + +struct EnumeratorState<'graph, 'grammar: 'graph> { + index: NodeIndex, + symbol_sets: SymbolSets<'grammar>, + edges: Edges<'graph, SymbolSets<'grammar>, Directed>, +} + +impl<'graph, 'grammar> PathEnumerator<'graph, 'grammar> { + fn new(graph: &'graph TraceGraph<'grammar>, lr0_item: LR0Item<'grammar>) -> Self { + let start_state = graph.indices[&TraceGraphNode::Item(lr0_item)]; + let mut enumerator = PathEnumerator { + graph: graph, + stack: vec![], + }; + let edges = enumerator.incoming_edges(start_state); + enumerator.stack.push(EnumeratorState { + index: start_state, + symbol_sets: SymbolSets::new(), + edges: edges, + }); + enumerator.find_next_trace(); + enumerator + } + + /// Advance to the next example. Returns false if there are no more + /// examples. + pub fn advance(&mut self) -> bool { + // If we have not yet exhausted all the examples, then the top + // of the stack should be the last target item that we + // found. Pop it off. + match self.stack.pop() { + Some(top_state) => { + assert!(match self.graph.graph[top_state.index] { + TraceGraphNode::Item(_) => true, + TraceGraphNode::Nonterminal(_) => false, + }); + + self.find_next_trace() + } + None => false, + } + } + + fn incoming_edges(&self, index: NodeIndex) -> Edges<'graph, SymbolSets<'grammar>, Directed> { + self.graph + .graph + .edges_directed(index, EdgeDirection::Incoming) + } + + /// This is the main operation, written in CPS style and hence it + /// can seem a bit confusing. The idea is that `find_next_trace` + /// is called when we are ready to consider the next child of + /// whatever is on the top of the stack. It simply withdraws + /// that next child (if any) and hands it to `push_next`. + fn find_next_trace(&mut self) -> bool { + if !self.stack.is_empty() { + let next_edge = { + let top_of_stack = self.stack.last_mut().unwrap(); + top_of_stack.edges.next() + }; + self.push_next_child_if_any(next_edge) + } else { + false + } + } + + /// Invoked with the next child (if any) of the node on the top of + /// the stack. + /// + /// If `next` is `Some`, we simply call `push_next_child`. + /// + /// If `next` is `None`, then the node on the top of + /// the stack *has* no next child, and so it is popped, and then + /// we call `find_next_trace` again to start with the next child + /// of the new top of the stack. + fn push_next_child_if_any( + &mut self, + next: Option>>, + ) -> bool { + if let Some(edge) = next { + let index = edge.source(); + let symbol_sets = *edge.weight(); + self.push_next_child(index, symbol_sets) + } else { + self.stack.pop(); + self.find_next_trace() + } + } + + /// Push the next child of the top of the stack onto the stack, + /// making the child the new top. + /// + /// If the child is an `Item` node, we have found the next trace, + /// and hence our search terminates. We push the symbols from this + /// item node into the symbols vector and then return true. + /// + /// Otherwise, we check whether this new node would cause a cycle. + /// If so, we do *not* push it, and instead just call + /// `find_next_trace` again to proceed to the next child of the + /// current top. + /// + /// Finally, if the new node would NOT cause a cycle, then we can + /// push it onto the stack so that it becomes the new top, and + /// call `find_next_trace` to start searching its children. + fn push_next_child(&mut self, index: NodeIndex, symbol_sets: SymbolSets<'grammar>) -> bool { + match self.graph.graph[index] { + TraceGraphNode::Item(_) => { + // If we reached an item like + // + // X = ...p (*) ...s + // + // then we are done, but we still need to push on the + // symbols `...p`. + let edges = self.incoming_edges(index); + self.stack.push(EnumeratorState { + index: index, + symbol_sets: symbol_sets, + edges: edges, + }); + return true; + } + TraceGraphNode::Nonterminal(_) => { + // If this node already appears on the stack, do not + // visit its children. + if !self.stack.iter().any(|state| state.index == index) { + let edges = self.incoming_edges(index); + self.stack.push(EnumeratorState { + index: index, + symbol_sets: symbol_sets, + edges: edges, + }); + } + self.find_next_trace() + } + } + } + + pub fn found_trace(&self) -> bool { + !self.stack.is_empty() + } + + /// Returns the 1-context for the current trace. In other words, + /// the set of tokens that may appear next in the input. If this + /// trace was derived from a shiftable item, this will always be + /// the terminal that was to be shifted; if derived from a reduce + /// item, this constitutes the set of lookaheads that will trigger + /// a reduce. + pub fn first0(&self, first_sets: &FirstSets) -> TokenSet { + assert!(self.found_trace()); + first_sets.first0( + self.stack[1] + .symbol_sets + .cursor + .into_iter() + .chain(self.stack.iter().flat_map(|s| s.symbol_sets.suffix)), + ) + } + + pub fn example(&self) -> Example { + assert!(self.found_trace()); + + let mut symbols = vec![]; + + symbols.extend( + self.stack + .iter() + .rev() + .flat_map(|s| s.symbol_sets.prefix) + .cloned() + .map(ExampleSymbol::Symbol), + ); + + let cursor = symbols.len(); + + match self.stack[1].symbol_sets.cursor { + Some(s) => symbols.push(ExampleSymbol::Symbol(s.clone())), + None => if self.stack[1].symbol_sets.prefix.is_empty() { + symbols.push(ExampleSymbol::Epsilon) + } else { + }, + } + + symbols.extend( + self.stack + .iter() + .flat_map(|s| s.symbol_sets.suffix) + .cloned() + .map(ExampleSymbol::Symbol), + ); + + let mut cursors = (0, symbols.len()); + + let mut reductions: Vec<_> = self.stack[1..] + .iter() + .rev() + .map(|state| { + let nonterminal = match self.graph.graph[state.index] { + TraceGraphNode::Nonterminal(ref nonterminal) => nonterminal.clone(), + TraceGraphNode::Item(ref item) => item.production.nonterminal.clone(), + }; + let reduction = Reduction { + start: cursors.0, + end: cursors.1, + nonterminal: nonterminal, + }; + cursors.0 += state.symbol_sets.prefix.len(); + cursors.1 -= state.symbol_sets.suffix.len(); + reduction + }) + .collect(); + reductions.reverse(); + + Example { + symbols: symbols, + cursor: cursor, + reductions: reductions, + } + } +} + +impl<'graph, 'grammar> Iterator for PathEnumerator<'graph, 'grammar> { + type Item = Example; + + fn next(&mut self) -> Option { + if self.found_trace() { + let example = self.example(); + self.advance(); + Some(example) + } else { + None + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// FilteredPathEnumerator +// +// Like the path enumerator, but tests for examples with some specific +// lookahead + +pub struct FilteredPathEnumerator<'graph, 'grammar: 'graph> { + base: PathEnumerator<'graph, 'grammar>, + first_sets: &'graph FirstSets, + lookahead: TokenSet, +} + +impl<'graph, 'grammar> FilteredPathEnumerator<'graph, 'grammar> { + fn new( + first_sets: &'graph FirstSets, + graph: &'graph TraceGraph<'grammar>, + lr0_item: LR0Item<'grammar>, + lookahead: TokenSet, + ) -> Self { + FilteredPathEnumerator { + base: PathEnumerator::new(graph, lr0_item), + first_sets: first_sets, + lookahead: lookahead, + } + } +} + +impl<'graph, 'grammar> Iterator for FilteredPathEnumerator<'graph, 'grammar> { + type Item = Example; + + fn next(&mut self) -> Option { + while self.base.found_trace() { + let firsts = self.base.first0(self.first_sets); + if firsts.is_intersecting(&self.lookahead) { + let example = self.base.example(); + self.base.advance(); + return Some(example); + } + self.base.advance(); + } + None + } +} diff --git a/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/test.rs b/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/test.rs new file mode 100644 index 000000000000..c1398065908a --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/lr1/trace/trace_graph/test.rs @@ -0,0 +1,162 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::*; +use lr1::core::*; +use test_util::expect_debug; +use tls::Tls; + +macro_rules! nt { + ($x:ident) => { + NonterminalString(Atom::from(stringify!($x))) + } +} + +macro_rules! syms { + ($($x:ident),*) => { + vec![$(Symbol::Nonterminal(nt!($x))),*] + } +} + +macro_rules! production { + ($x:ident = $($y:ident)*) => { + Production { + nonterminal: nt!($x), + symbols: syms![$($y),*], + action: ActionFn::new(0), + span: Span(0, 0) + } + } +} + +use super::TraceGraph; + +#[test] +fn enumerator() { + let _tls = Tls::test(); + + // Build this graph: + // + // X = X0 (*) X1 + // ^ + // | + // {X0} + // | + // +-> X <-- Z = Z0 (*) X Z1 + // | + // Y = Y0 (*) X Y1 + // + // which enumerates out to: + // + // [Y0 X0 (*) X1 Y1] + // [Z0 X0 (*) X1 Z1] + + let productions = vec![ + production![X = X0 X1], + production![Y = Y0 X Y1], + production![Z = Z0 X Z1], + ]; + + let mut graph = TraceGraph::new(); + + let item0 = Item::lr0(&productions[0], 1); // X = X0 (*) X1 + graph.add_edge(nt!(X), item0, item0.symbol_sets()); + + let item1 = Item::lr0(&productions[1], 1); // Y = Y0 (*) X Y1 + graph.add_edge(item1, nt!(X), item1.symbol_sets()); + + let item2 = Item::lr0(&productions[2], 1); // Z = Z0 (*) X Z1 + graph.add_edge(item2, nt!(X), item2.symbol_sets()); + + let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 1)); + let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); + expect_debug( + &list, + r#" +[ + [ + " Z0 X0 X1 Z1", + " │ └─X─┘ │", + " └─Z───────┘" + ], + [ + " Y0 X0 X1 Y1", + " │ └─X─┘ │", + " └─Y───────┘" + ] +] +"#.trim(), + ); +} + +#[test] +fn enumerator1() { + let _tls = Tls::test(); + + // Build this graph: + // + // W = W0 W1 (*) + // ^ + // {W0,W1} + // | + // W + // ^ + // {X0} + // | + // +-> X <-- Z = Z0 (*) X Z1 + // | + // Y = Y0 (*) X Y1 + // + // which enumerates out to: + // + // [Y0 X0 (*) X1 Y1] + // [Z0 X0 (*) X1 Z1] + + let productions = vec![ + production![W = W0 W1], + production![X = X0 W X1], // where X1 may be empty + production![Y = Y0 X Y1], + production![Z = Z0 X Z1], + ]; + + let mut graph = TraceGraph::new(); + + let item0 = Item::lr0(&productions[0], 2); // W = W0 W1 (*) + graph.add_edge(nt!(W), item0, item0.symbol_sets()); + + graph.add_edge( + nt!(X), + nt!(W), + SymbolSets { + prefix: &productions[1].symbols[..1], + cursor: Some(&productions[1].symbols[1]), + suffix: &productions[1].symbols[2..], + }, + ); + + let item1 = Item::lr0(&productions[2], 1); + graph.add_edge(item1, nt!(X), item1.symbol_sets()); + + let item2 = Item::lr0(&productions[3], 1); + graph.add_edge(item2, nt!(X), item2.symbol_sets()); + + let enumerator = graph.lr0_examples(Item::lr0(&productions[0], 2)); + let list: Vec<_> = enumerator.map(|example| example.paint_unstyled()).collect(); + expect_debug( + &list, + r#" +[ + [ + " Z0 X0 W0 W1 X1 Z1", + " │ │ └─W─┘ │ │", + " │ └─X───────┘ │", + " └─Z─────────────┘" + ], + [ + " Y0 X0 W0 W1 X1 Y1", + " │ │ └─W─┘ │ │", + " │ └─X───────┘ │", + " └─Y─────────────┘" + ] +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop-snap/src/message/builder.rs b/third_party/rust/lalrpop-snap/src/message/builder.rs new file mode 100644 index 000000000000..c0c5b7c85a3c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/builder.rs @@ -0,0 +1,309 @@ +use grammar::parse_tree::Span; +use message::{Content, Message}; +use message::indent::Indent; +use message::horiz::Horiz; +use message::styled::Styled; +use message::text::Text; +use message::vert::Vert; +use message::wrap::Wrap; +use style::Style; + +pub struct MessageBuilder { + span: Span, + heading: Option>, + body: Option>, +} + +pub struct HeadingCharacter { + message: MessageBuilder, +} + +pub struct BodyCharacter { + message: MessageBuilder, +} + +impl MessageBuilder { + pub fn new(span: Span) -> Self { + MessageBuilder { + span: span, + heading: None, + body: None, + } + } + + pub fn heading(self) -> Builder { + Builder::new(HeadingCharacter { message: self }) + } + + pub fn body(self) -> Builder { + Builder::new(BodyCharacter { message: self }) + } + + pub fn end(self) -> Message { + Message::new( + self.span, + self.heading.expect("never defined a heading"), + self.body.expect("never defined a body"), + ) + } +} + +impl Character for HeadingCharacter { + type End = MessageBuilder; + + fn end(mut self, items: Vec>) -> MessageBuilder { + assert!( + self.message.heading.is_none(), + "already defined a heading for this message" + ); + self.message.heading = Some(Box::new(Vert::new(items, 1))); + self.message + } +} + +impl Character for BodyCharacter { + type End = MessageBuilder; + + fn end(mut self, items: Vec>) -> MessageBuilder { + assert!( + self.message.body.is_none(), + "already defined a body for this message" + ); + self.message.body = Some(Box::new(Vert::new(items, 2))); + self.message + } +} + +/////////////////////////////////////////////////////////////////////////// +// Inline builder: Useful for constructing little bits of content: for +// example, converting an Example into something renderable. Using an +// inline builder, if you push exactly one item, then when you call +// `end` that is what you get; otherwise, you get items laid out +// adjacent to one another horizontally (no spaces in between). + +pub struct InlineBuilder; + +impl InlineBuilder { + pub fn new() -> Builder { + Builder::new(InlineBuilder) + } +} + +impl Character for InlineBuilder { + type End = Box; + + fn end(self, mut items: Vec>) -> Box { + if items.len() == 1 { + items.pop().unwrap() + } else { + Box::new(Horiz::new(items, 1)) + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// Builder -- generic helper for multi-part items + +/// The builder is used to construct multi-part items. It is intended +/// to be used in a "method-call chain" style. The base method is +/// called `push`, and it simply pushes a new child of the current +/// parent. +/// +/// Methods whose name like `begin_foo` are used to create a new +/// multi-part child; they return a fresh builder corresponding to the +/// child. When the child is completely constructed, call `end` to +/// finish the child builder and return to the parent builder. +/// +/// Methods whose name ends in "-ed", such as `styled`, post-process +/// the last item pushed. They will panic if invoked before any items +/// have been pushed. +/// +/// Example: +/// +/// ``` +/// let node = +/// InlineBuilder::new() +/// .begin_lines() // starts a child builder for adjacent lines +/// .text("foo") // add a text node "foo" to the child builder +/// .text("bar") // add a text node "bar" to the child builder +/// .end() // finish the lines builder, return to the parent +/// .end(); // finish the parent `InlineBuilder`, yielding up the +/// // `lines` child that was pushed (see `InlineBuilder` +/// // for more details) +/// ``` +pub struct Builder { + items: Vec>, + character: C, +} + +impl Builder { + fn new(character: C) -> Self { + Builder { + items: vec![], + character: character, + } + } + + pub fn push(mut self, item: I) -> Self + where + I: Into>, + { + self.items.push(item.into()); + self + } + + fn pop(&mut self) -> Option> { + self.items.pop() + } + + pub fn begin_vert(self, separate: usize) -> Builder> { + Builder::new(VertCharacter { + base: self, + separate: separate, + }) + } + + pub fn begin_lines(self) -> Builder> { + self.begin_vert(1) + } + + pub fn begin_paragraphs(self) -> Builder> { + self.begin_vert(2) + } + + pub fn begin_horiz(self, separate: usize) -> Builder> { + Builder::new(HorizCharacter { + base: self, + separate: separate, + }) + } + + // "item1item2" + pub fn begin_adjacent(self) -> Builder> { + self.begin_horiz(1) + } + + // "item1 item2" + pub fn begin_spaced(self) -> Builder> { + self.begin_horiz(2) + } + + pub fn begin_wrap(self) -> Builder> { + Builder::new(WrapCharacter { base: self }) + } + + pub fn styled(mut self, style: Style) -> Self { + let content = self.pop().expect("bold must be applied to an item"); + self.push(Box::new(Styled::new(style, content))) + } + + pub fn indented_by(mut self, amount: usize) -> Self { + let content = self.pop().expect("indent must be applied to an item"); + self.push(Box::new(Indent::new(amount, content))) + } + + pub fn indented(self) -> Self { + self.indented_by(2) + } + + pub fn text(self, text: T) -> Self { + self.push(Box::new(Text::new(text.to_string()))) + } + + /// Take the item just pushed and makes some text adjacent to it. + /// E.g. `builder.wrap().text("foo").adjacent_text(".").end()` + /// result in `"foo."` being printed without any wrapping in + /// between. + pub fn adjacent_text(mut self, prefix: T, suffix: U) -> Self { + let item = self.pop().expect("adjacent text must be added to an item"); + let prefix = prefix.to_string(); + let suffix = suffix.to_string(); + if !prefix.is_empty() && !suffix.is_empty() { + self.begin_adjacent() + .text(prefix) + .push(item) + .text(suffix) + .end() + } else if !suffix.is_empty() { + self.begin_adjacent().push(item).text(suffix).end() + } else if !prefix.is_empty() { + self.begin_adjacent().text(prefix).push(item).end() + } else { + self.push(item) + } + } + + pub fn verbatimed(self) -> Self { + self.adjacent_text("`", "`") + } + + pub fn punctuated(self, text: T) -> Self { + self.adjacent_text("", text) + } + + pub fn wrap_text(self, text: T) -> Self { + self.begin_wrap().text(text).end() + } + + pub fn end(self) -> C::End { + self.character.end(self.items) + } +} + +pub trait Character { + type End; + fn end(self, items: Vec>) -> Self::End; +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct HorizCharacter { + base: Builder, + separate: usize, +} + +impl Character for HorizCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Horiz::new(items, self.separate))) + } +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct VertCharacter { + base: Builder, + separate: usize, +} + +impl Character for VertCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Vert::new(items, self.separate))) + } +} + +/////////////////////////////////////////////////////////////////////////// + +pub struct WrapCharacter { + base: Builder, +} + +impl Character for WrapCharacter { + type End = Builder; + + fn end(self, items: Vec>) -> Builder { + self.base.push(Box::new(Wrap::new(items))) + } +} + +impl From> for Box +where + T: Content + 'static, +{ + fn from(b: Box) -> Box { + b + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/horiz.rs b/third_party/rust/lalrpop-snap/src/message/horiz.rs new file mode 100644 index 000000000000..275fe1d06cf9 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/horiz.rs @@ -0,0 +1,44 @@ +use ascii_canvas::AsciiView; +use itertools::Itertools; +use super::*; + +#[derive(Debug)] +pub struct Horiz { + items: Vec>, + separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs +} + +impl Horiz { + pub fn new(items: Vec>, separate: usize) -> Self { + Horiz { + items: items, + separate: separate, + } + } +} + +impl Content for Horiz { + fn min_width(&self) -> usize { + self.items + .iter() + .map(|c| c.min_width()) + .intersperse(self.separate) + .fold(0, |a, b| a + b) + } + + fn emit(&self, view: &mut AsciiView) { + emit_horiz(view, &self.items, self.separate); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +pub fn emit_horiz(view: &mut AsciiView, items: &[Box], separate: usize) { + let mut column = 0; + for item in items { + let (_, end_column) = item.emit_at(view, 0, column); + column = end_column + separate; + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/indent.rs b/third_party/rust/lalrpop-snap/src/message/indent.rs new file mode 100644 index 000000000000..e3311d6544fd --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/indent.rs @@ -0,0 +1,32 @@ +use ascii_canvas::AsciiView; +use super::*; + +#[derive(Debug)] +pub struct Indent { + amount: usize, + content: Box, +} + +impl Indent { + pub fn new(amount: usize, content: Box) -> Self { + Indent { + amount: amount, + content: content, + } + } +} + +impl Content for Indent { + fn min_width(&self) -> usize { + self.content.min_width() + self.amount + } + + fn emit(&self, view: &mut AsciiView) { + let mut subview = view.shift(0, self.amount); + self.content.emit(&mut subview); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/message.rs b/third_party/rust/lalrpop-snap/src/message/message.rs new file mode 100644 index 000000000000..1c5397c284b8 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/message.rs @@ -0,0 +1,84 @@ +use ascii_canvas::AsciiView; +use grammar::parse_tree::Span; +use message::Content; +use std::cmp; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use tls::Tls; + +/// The top-level message display like this: +/// +/// ``` +/// : +/// +/// +/// ``` +/// +/// This is equivalent to a +/// +/// ``` +/// Vert[separate=2] { +/// Horiz[separate=1] { +/// Horiz[separate=0] { +/// Citation { span }, +/// Text { ":" }, +/// }, +/// , +/// }, +/// +/// } +/// ``` +pub struct Message { + span: Span, + heading: Box, + body: Box, +} + +impl Message { + pub fn new(span: Span, heading: Box, body: Box) -> Self { + Message { + span: span, + heading: heading, + body: body, + } + } +} + +impl Content for Message { + fn min_width(&self) -> usize { + let file_text = Tls::file_text(); + let span = file_text.span_str(self.span).chars().count(); + let heading = self.heading.min_width(); + let body = self.body.min_width(); + cmp::max(span + heading + 2, body + 2) + } + + fn emit(&self, view: &mut AsciiView) { + let session = Tls::session(); + let file_text = Tls::file_text(); + + let span = file_text.span_str(self.span); + view.write_chars(0, 0, span.chars(), Style::new()); + let count = span.chars().count(); + view.write_chars(0, count, ":".chars(), Style::new()); + + let (row, _) = self.heading + .emit_at(&mut view.styled(session.heading), 0, count + 2); + + self.body.emit_at(view, row + 2, 2); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +impl Debug for Message { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + fmt.debug_struct("Message") + .field("span", &self.span) + .field("heading", &self.heading) + .field("body", &self.body) + .finish() + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/mod.rs b/third_party/rust/lalrpop-snap/src/message/mod.rs new file mode 100644 index 000000000000..5ddc21c02f1f --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/mod.rs @@ -0,0 +1,79 @@ +use ascii_canvas::{AsciiCanvas, AsciiView}; + +use std::cmp; +use std::fmt::Debug; + +pub mod builder; +pub mod horiz; +pub mod message; +pub mod indent; +pub mod styled; +#[cfg(test)] +mod test; +pub mod text; +pub mod vert; +pub mod wrap; + +/// Content which can be rendered. +pub trait Content: Debug { + fn min_width(&self) -> usize; + + fn emit(&self, view: &mut AsciiView); + + /// Creates a canvas at least `min_width` in width (it may be + /// larger if the content requires that) and fills it with the + /// current content. Returns the canvas. Typically `min_width` + /// would be 80 or the width of the current terminal. + fn emit_to_canvas(&self, min_width: usize) -> AsciiCanvas { + let computed_min = self.min_width(); + let min_width = cmp::max(min_width, computed_min); + debug!( + "emit_to_canvas: min_width={} computed_min={} self={:#?}", + min_width, computed_min, self + ); + let mut canvas = AsciiCanvas::new(0, min_width); + self.emit(&mut canvas); + canvas + } + + /// Emit at a particular upper-left corner, returning the + /// lower-right corner that was emitted. + fn emit_at(&self, view: &mut AsciiView, row: usize, column: usize) -> (usize, usize) { + debug!( + "emit_at({},{}) self={:?} min_width={:?}", + row, + column, + self, + self.min_width() + ); + let mut shifted_view = view.shift(row, column); + self.emit(&mut shifted_view); + let (r, c) = shifted_view.close(); + (r, c) + } + + /// When items are enclosed into a wrap, this method deconstructs + /// them into their indivisible components. + fn into_wrap_items(self: Box, wrap_items: &mut Vec>); +} + +/// Helper function: convert `content` into wrap items and then map +/// those with `op`, appending the final result into `wrap_items`. +/// Useful for "modifier" content items like `Styled` that do not +/// affect wrapping. +fn into_wrap_items_map(content: Box, wrap_items: &mut Vec>, op: OP) +where + OP: FnMut(Box) -> C, + C: Content + 'static, +{ + let mut subvector = vec![]; + content.into_wrap_items(&mut subvector); + wrap_items.extend( + subvector + .into_iter() + .map(op) + .map(|item| Box::new(item) as Box), + ); +} + +pub use self::message::Message; diff --git a/third_party/rust/lalrpop-snap/src/message/styled.rs b/third_party/rust/lalrpop-snap/src/message/styled.rs new file mode 100644 index 000000000000..9bef07687704 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/styled.rs @@ -0,0 +1,41 @@ +use ascii_canvas::AsciiView; +use std::fmt::{Debug, Error, Formatter}; +use style::Style; +use super::*; + +pub struct Styled { + style: Style, + content: Box, +} + +impl Styled { + pub fn new(style: Style, content: Box) -> Self { + Styled { + style: style, + content: content, + } + } +} + +impl Content for Styled { + fn min_width(&self) -> usize { + self.content.min_width() + } + + fn emit(&self, view: &mut AsciiView) { + self.content.emit(&mut view.styled(self.style)) + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + let style = self.style; + super::into_wrap_items_map(self.content, wrap_items, |item| Styled::new(style, item)) + } +} + +impl Debug for Styled { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + fmt.debug_struct("Styled") + .field("content", &self.content) + .finish() + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/test.rs b/third_party/rust/lalrpop-snap/src/message/test.rs new file mode 100644 index 000000000000..118d8469e1ba --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/test.rs @@ -0,0 +1,142 @@ +use ascii_canvas::AsciiCanvas; +use grammar::parse_tree::Span; +use message::builder::MessageBuilder; +use test_util::expect_debug; +use tls::Tls; + +use super::*; + +fn install_tls() -> Tls { + Tls::test_string( + r#"foo +bar +baz +"#, + ) +} + +#[test] +fn hello_world() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() + .body() + .begin_wrap() + .text( + "This is a very, very, very, very long sentence. \ + OK, not THAT long!", + ) + .end() + .indented_by(4) + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is a very, very,", + " very, very long sentence.", + " OK, not THAT long!" +] +"#.trim(), + ); +} + +/// Test a case where the body in the message is longer than the +/// header (which used to mess up the `min_width` computation). +#[test] +fn long_body() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() + .body() + .text( + "This is a very, very, very, very long sentence. \ + OK, not THAT long!", + ) + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is a very, very, very, very long sentence. OK, not THAT long!" +] +"#.trim(), + ); +} + +#[test] +fn paragraphs() { + let _tls = install_tls(); + let msg = MessageBuilder::new(Span(0, 2)) + .heading() + .text("Hello, world!") + .end() // heading + .body() + .begin_paragraphs() + .begin_wrap() + .text("This is the first paragraph. It contains a lot of really interesting \ + information that the reader will no doubt peruse with care.") + .end() + .begin_wrap() + .text("This is the second paragraph. It contains even more really interesting \ + information that the reader will no doubt skip over with wild abandon.") + .end() + .begin_wrap() + .text("This is the final paragraph. The reader won't even spare this one \ + a second glance, despite it containing just waht they need to know \ + to solve their problem and to derive greater pleasure from life. \ + The secret: All you need is love! Dum da da dum.") + .end() + .end() + .end() + .end(); + let min_width = msg.min_width(); + let mut canvas = AsciiCanvas::new(0, min_width); + msg.emit(&mut canvas); + expect_debug( + &canvas.to_strings(), + r#" +[ + "tmp.txt:1:1: 1:2: Hello, world!", + "", + " This is the first paragraph.", + " It contains a lot of really", + " interesting information that", + " the reader will no doubt", + " peruse with care.", + "", + " This is the second paragraph.", + " It contains even more really", + " interesting information that", + " the reader will no doubt skip", + " over with wild abandon.", + "", + " This is the final paragraph.", + " The reader won't even spare", + " this one a second glance,", + " despite it containing just", + " waht they need to know to", + " solve their problem and to", + " derive greater pleasure from", + " life. The secret: All you", + " need is love! Dum da da dum." +] +"#.trim(), + ); +} diff --git a/third_party/rust/lalrpop-snap/src/message/text.rs b/third_party/rust/lalrpop-snap/src/message/text.rs new file mode 100644 index 000000000000..b807444057af --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/text.rs @@ -0,0 +1,37 @@ +use ascii_canvas::AsciiView; +use style::Style; + +use super::*; + +/// Text to be display. This will be flowed appropriately depending on +/// the container; e.g., in a Horiz, it will be one unit, but in a +/// Wrap, it will be broken up word by word. +#[derive(Debug)] +pub struct Text { + text: String, +} + +impl Text { + pub fn new(text: String) -> Self { + Text { text: text } + } +} + +impl Content for Text { + fn min_width(&self) -> usize { + self.text.chars().count() + } + + fn emit(&self, view: &mut AsciiView) { + view.write_chars(0, 0, self.text.chars(), Style::new()) + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.extend( + self.text + .split_whitespace() + .map(|word| Text::new(word.to_string())) + .map(|item| Box::new(item) as Box), + ); + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/vert.rs b/third_party/rust/lalrpop-snap/src/message/vert.rs new file mode 100644 index 000000000000..a470bdcec808 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/vert.rs @@ -0,0 +1,39 @@ +use ascii_canvas::AsciiView; +use super::*; + +#[derive(Debug)] +pub struct Vert { + items: Vec>, + separate: usize, // 0 => overlapping, 1 => each on its own line, 2 => paragraphs +} + +impl Vert { + pub fn new(items: Vec>, separate: usize) -> Self { + Vert { + items: items, + separate: separate, + } + } +} + +impl Content for Vert { + fn min_width(&self) -> usize { + self.items.iter().map(|c| c.min_width()).max().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + emit_vert(view, &self.items, self.separate); + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.push(self); + } +} + +pub fn emit_vert(view: &mut AsciiView, items: &[Box], separate: usize) { + let mut row = 0; + for item in items { + let (end_row, _) = item.emit_at(view, row, 0); + row = end_row + separate; + } +} diff --git a/third_party/rust/lalrpop-snap/src/message/wrap.rs b/third_party/rust/lalrpop-snap/src/message/wrap.rs new file mode 100644 index 000000000000..11984119f598 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/message/wrap.rs @@ -0,0 +1,54 @@ +use ascii_canvas::AsciiView; +use std::cmp; +use super::*; + +#[derive(Debug)] +pub struct Wrap { + items: Vec>, +} + +impl Wrap { + pub fn new(items: Vec>) -> Self { + let mut wrap_items = vec![]; + for item in items { + item.into_wrap_items(&mut wrap_items); + } + Wrap { items: wrap_items } + } +} + +impl Content for Wrap { + fn min_width(&self) -> usize { + self.items.iter().map(|c| c.min_width()).max().unwrap() + } + + fn emit(&self, view: &mut AsciiView) { + let columns = view.columns(); + let mut row = 0; // current row + let mut height = 1; // max height of anything in this row + let mut column = 0; // current column in this row + + for item in &self.items { + let len = item.min_width(); + + // If we don't have enough space for this content, + // then move to the next line. + if column + len > columns { + column = 0; + row += height; + height = 1; + } + + assert!(column + len <= columns); + + let (c_row, c_column) = item.emit_at(view, row, column); + assert!(c_column >= column); + column = c_column + 2; + height = cmp::max(c_row - row + 1, height); + } + } + + fn into_wrap_items(self: Box, wrap_items: &mut Vec>) { + wrap_items.extend(self.items); // `items` are already subdivided + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/inline/graph/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/inline/graph/mod.rs new file mode 100644 index 000000000000..10d768f0f2eb --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/inline/graph/mod.rs @@ -0,0 +1,119 @@ +#![allow(dead_code)] + +use string_cache::DefaultAtom as Atom; +use normalize::{NormError, NormResult}; +use petgraph::graph::{Graph, NodeIndex}; +use grammar::consts::INLINE; +use grammar::repr::*; +use collections::{map, Map}; + +#[cfg(test)] +mod test; + +/// Computes the proper order to inline the various nonterminals in +/// `grammar`. Reports an error if there is an inline +/// cycle. Otherwise, yields an ordering such that we inline X before +/// Y if Y references X. I actually think it doesn't matter what +/// order we do the inlining, really, but this order seems better +/// somehow. :) (That is, inline into something before we inline it.) +pub fn inline_order(grammar: &Grammar) -> NormResult> { + let mut graph = NonterminalGraph::new(grammar); + graph.create_nodes(); + graph.add_edges(); + graph.inline_order() +} + +struct NonterminalGraph<'grammar> { + grammar: &'grammar Grammar, + graph: Graph, + nonterminal_map: Map, +} + +#[derive(Copy, Clone)] +enum WalkState { + NotVisited, + Visiting, + Visited, +} + +impl<'grammar> NonterminalGraph<'grammar> { + fn new(grammar: &'grammar Grammar) -> NonterminalGraph<'grammar> { + NonterminalGraph { + grammar: grammar, + graph: Graph::new(), + nonterminal_map: map(), + } + } + + fn create_nodes(&mut self) { + let inline = Atom::from(INLINE); + for (name, data) in &self.grammar.nonterminals { + if data.annotations.iter().any(|a| a.id == inline) { + let index = self.graph.add_node(name.clone()); + self.nonterminal_map.insert(name.clone(), index); + } + } + } + + fn add_edges(&mut self) { + for production in self.grammar + .nonterminals + .values() + .flat_map(|d| &d.productions) + { + let from_index = match self.nonterminal_map.get(&production.nonterminal) { + Some(&index) => index, + None => continue, // this is not an inlined nonterminal + }; + + for symbol in &production.symbols { + match *symbol { + Symbol::Nonterminal(ref to) => { + if let Some(&to_index) = self.nonterminal_map.get(to) { + self.graph.add_edge(from_index, to_index, ()); + } + } + Symbol::Terminal(_) => {} + } + } + } + } + + fn inline_order(&self) -> NormResult> { + let mut states = vec![WalkState::NotVisited; self.graph.node_count()]; + let mut result = vec![]; + for node in self.nonterminal_map.values().cloned() { + try!(self.walk(&mut states, &mut result, node)); + } + Ok(result) + } + + fn walk( + &self, + states: &mut Vec, + result: &mut Vec, + source: NodeIndex, + ) -> NormResult<()> { + let nt = self.graph.node_weight(source).unwrap(); + + match states[source.index()] { + WalkState::NotVisited => { + states[source.index()] = WalkState::Visiting; + for target in self.graph.neighbors(source) { + try!(self.walk(states, result, target)); + } + states[source.index()] = WalkState::Visited; + result.push(nt.clone()); + Ok(()) + } + WalkState::Visited => Ok(()), + WalkState::Visiting => { + return_err!( + self.grammar.nonterminals[&nt].span, + "cyclic inline directive: `{}` would have to be inlined into itself", + nt + ); + } + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/inline/graph/test.rs b/third_party/rust/lalrpop-snap/src/normalize/inline/graph/test.rs new file mode 100644 index 000000000000..a2952702b7c5 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/inline/graph/test.rs @@ -0,0 +1,52 @@ +use string_cache::DefaultAtom as Atom; +use grammar::repr::NonterminalString; +use normalize::lower_helper; +use parser; +use session::Session; +use super::inline_order; + +#[test] +fn test_inline_self_cycle() { + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + assert!(inline_order(&grammar).is_err()); +} + +#[test] +fn test_inline_cycle_3() { + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = B; + #[inline] B: () = C; + #[inline] C: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + assert!(inline_order(&grammar).is_err()); +} + +#[test] +fn test_inline_order() { + // because C references A, we inline A first. + let grammar = parser::parse_grammar( + r#" + grammar; + extern { } + #[inline] A: () = B; + B: () = C; + #[inline] C: () = A; +"#, + ).unwrap(); + let grammar = lower_helper(&Session::test(), grammar, true).unwrap(); + let a = NonterminalString(Atom::from("A")); + let c = NonterminalString(Atom::from("C")); + assert_eq!(inline_order(&grammar).unwrap(), vec![a, c]); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/inline/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/inline/mod.rs new file mode 100644 index 000000000000..d0a032e86771 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/inline/mod.rs @@ -0,0 +1,156 @@ +/*! + * Inlining of nonterminals + */ + +use grammar::repr::*; +use normalize::NormResult; + +mod graph; + +#[cfg(test)] +mod test; + +pub fn inline(mut grammar: Grammar) -> NormResult { + let order = try!(graph::inline_order(&grammar)); + for nt in order { + inline_nt(&mut grammar, &nt); + } + Ok(grammar) +} + +fn inline_nt(grammar: &mut Grammar, inline_nt: &NonterminalString) { + let inline_productions: Vec<_> = grammar.productions_for(inline_nt).iter().cloned().collect(); + for (_, data) in &mut grammar.nonterminals { + let mut new_productions = vec![]; + let mut new_action_fn_defns = vec![]; + + for into_production in &data.productions { + if !into_production + .symbols + .contains(&Symbol::Nonterminal(inline_nt.clone())) + { + new_productions.push(into_production.clone()); + continue; + } + + let mut inliner = Inliner { + action_fn_defns: &grammar.action_fn_defns, + inline_nonterminal: inline_nt.clone(), + into_production: into_production, + inline_fallible: 0, + inline_productions: &inline_productions, + new_symbols: vec![], + new_productions: &mut new_productions, + new_action_fn_defns: &mut new_action_fn_defns, + }; + + inliner.inline(&into_production.symbols); + } + + data.productions = new_productions; + grammar.action_fn_defns.extend(new_action_fn_defns); + } +} + +struct Inliner<'a> { + /// Action fn defns + action_fn_defns: &'a [ActionFnDefn], + + /// The nonterminal `A` being inlined + inline_nonterminal: NonterminalString, + + /// The full set of productions `A = B C D | E F G` for the + /// nonterminal `A` being inlined + inline_productions: &'a [Production], + + /// Number of actions that we have inlined for `A` so far which + /// have been fallible. IOW, if we are inlining `A` into `X = Y A + /// A Z`, and in the first instance of `A` we used a fallible + /// action, but the second we used an infallible one, count would + /// be 1. + inline_fallible: u32, + + /// The `X = Y A Z` being inlined into + into_production: &'a Production, + + /// The list of symbols we building up for the new production. + /// For example, this would (eventually) contain `Y B C D Z`, + /// given our running example. + new_symbols: Vec, + + /// The output vector of all productions for `X` that we have created + new_productions: &'a mut Vec, + + /// Vector of all action fn defns from the grammar. + new_action_fn_defns: &'a mut Vec, +} + +impl<'a> Inliner<'a> { + fn inline(&mut self, into_symbols: &[Symbol]) { + if into_symbols.is_empty() { + // create an action fn for the result of inlining + let into_action = self.into_production.action; + let into_fallible = self.action_fn_defns[into_action.index()].fallible; + let into_ret_type = self.action_fn_defns[into_action.index()].ret_type.clone(); + let inline_fallible = self.inline_fallible != 0; + let index = self.action_fn_defns.len() + self.new_action_fn_defns.len(); + let action_fn = ActionFn::new(index); + let inline_defn = InlineActionFnDefn { + action: into_action, + symbols: self.new_symbols.clone(), + }; + self.new_action_fn_defns.push(ActionFnDefn { + fallible: into_fallible || inline_fallible, + ret_type: into_ret_type, + kind: ActionFnDefnKind::Inline(inline_defn), + }); + let prod_symbols: Vec = self.new_symbols + .iter() + .flat_map(|sym| match *sym { + InlinedSymbol::Original(ref s) => vec![s.clone()], + InlinedSymbol::Inlined(_, ref s) => s.clone(), + }) + .collect(); + self.new_productions.push(Production { + nonterminal: self.into_production.nonterminal.clone(), + span: self.into_production.span, + symbols: prod_symbols, + action: action_fn, + }); + } else { + let next_symbol = &into_symbols[0]; + match *next_symbol { + Symbol::Nonterminal(ref n) if *n == self.inline_nonterminal => { + // Replace the current symbol with each of the + // `inline_productions` in turn. + for inline_production in self.inline_productions { + // If this production is fallible, increment + // count of fallible actions. + let inline_action = inline_production.action; + let fallible = self.action_fn_defns[inline_action.index()].fallible; + self.inline_fallible += fallible as u32; + + // Push the symbols of the production inline. + self.new_symbols.push(InlinedSymbol::Inlined( + inline_production.action, + inline_production.symbols.clone(), + )); + + // Inline remaining symbols: + self.inline(&into_symbols[1..]); + + // Reset state after we have inlined remaining symbols: + self.new_symbols.pop(); + self.inline_fallible -= fallible as u32; + } + } + _ => { + self.new_symbols + .push(InlinedSymbol::Original(next_symbol.clone())); + self.inline(&into_symbols[1..]); + self.new_symbols.pop(); + } + } + } + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/inline/test.rs b/third_party/rust/lalrpop-snap/src/normalize/inline/test.rs new file mode 100644 index 000000000000..3a6b121e8d62 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/inline/test.rs @@ -0,0 +1,102 @@ +use grammar::parse_tree::NonterminalString; +use grammar::repr::Grammar; +use string_cache::DefaultAtom as Atom; +use normalize::{self, NormResult}; +use parser; +use session::Session; + +use super::inline; + +fn inlined_grammar(text: &str) -> NormResult { + let g = parser::parse_grammar(text).unwrap(); + let g = normalize::lower_helper(&Session::test(), g, true).unwrap(); + inline(g) +} + +#[test] +fn sri() { + // This grammar gets a shift-reduce conflict because if the input + // is "&" (*) "L", then we see two possibilities, and we must decide + // between them: + // + // "&" (*) "L" E + // | | | + // +-------+--| + // | + // E + // + // or + // + // "&" (*) "L" + // | | + // | OPT_L E + // | | | + // +---+---+----+ + // | + // E + // + // to some extent this may be a false conflict, in that inlined + // rules would address it, but it's an interesting one for + // producing a useful error message. + + let grammar = inlined_grammar( + r#" + grammar; + + E: () = { + "L", + "&" OPT_L E + }; + + #[inline] OPT_L: () = { + (), + "L" + }; + "#, + ).unwrap(); + + let nt = NonterminalString(Atom::from("E")); + + // After inlining, we expect: + // + // E = "L" + // E = "&" E + // E = "&" "L" E + // + // Note that the `()` also gets inlined. + let e_productions = grammar.productions_for(&nt); + assert_eq!(e_productions.len(), 3); + assert_eq!(format!("{:?}", e_productions[0].symbols), r#"["L"]"#); + assert_eq!(format!("{:?}", e_productions[1].symbols), r#"["&", E]"#); + assert_eq!( + format!("{:?}", e_productions[2].symbols), + r#"["&", "L", E]"# + ); +} + +#[test] +fn issue_55() { + let grammar = inlined_grammar( + r#" +grammar; + +pub E: () = { + "X" "{" "}" => () +}; + +AT: () = { + "type" ";" => () +}; + +ET: () = { + "enum" "{" "}" => () +}; + "#, + ).unwrap(); + let nt = NonterminalString(Atom::from("E")); + + // The problem in issue #55 was that we would inline both `AT*` + // the same way, so we ended up with `E = X { ET }` and `E = X { + // AT+ ET AT+ }` but not `E = X { AT+ ET }` or `E = X { ET AT+ }`. + assert!(grammar.productions_for(&nt).len() == 4); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/lower/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/lower/mod.rs new file mode 100644 index 000000000000..d11f1e180439 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/lower/mod.rs @@ -0,0 +1,459 @@ +//! Lower +//! + +use string_cache::DefaultAtom as Atom; +use normalize::NormResult; +use normalize::norm_util::{self, Symbols}; +use grammar::consts::*; +use grammar::pattern::{Pattern, PatternKind}; +use grammar::parse_tree as pt; +use grammar::parse_tree::{read_algorithm, InternToken, NonterminalString, Path, TerminalString}; +use grammar::repr as r; +use session::Session; +use collections::{map, Map}; + +pub fn lower(session: &Session, grammar: pt::Grammar, types: r::Types) -> NormResult { + let state = LowerState::new(session, types, &grammar); + state.lower(grammar) +} + +struct LowerState<'s> { + session: &'s Session, + prefix: String, + action_fn_defns: Vec, + nonterminals: Map, + conversions: Vec<(TerminalString, Pattern)>, + intern_token: Option, + types: r::Types, + uses_error_recovery: bool, +} + +impl<'s> LowerState<'s> { + fn new(session: &'s Session, types: r::Types, grammar: &pt::Grammar) -> Self { + LowerState { + session: session, + prefix: grammar.prefix.clone(), + action_fn_defns: vec![], + nonterminals: map(), + conversions: vec![], + types: types, + intern_token: None, + uses_error_recovery: false, + } + } + + fn lower(mut self, grammar: pt::Grammar) -> NormResult { + let start_symbols = self.synthesize_start_symbols(&grammar); + + let mut uses = vec![]; + let mut token_span = None; + let internal_token_path = Path { + absolute: false, + ids: vec![Atom::from("Token")], + }; + + for item in grammar.items { + match item { + pt::GrammarItem::Use(data) => { + uses.push(data); + } + + pt::GrammarItem::MatchToken(_) => { + // The declarations in the match token are handled + // fully by the `token_check` when it constructs the + // `InternToken` -- there is nothing left to do here. + } + + pt::GrammarItem::InternToken(data) => { + token_span = Some(grammar.span); + let span = grammar.span; + let input_str = r::TypeRepr::Ref { + lifetime: Some(Atom::from(INPUT_LIFETIME)), + mutable: false, + referent: Box::new(r::TypeRepr::Nominal(r::NominalTypeRepr { + path: r::Path::str(), + types: vec![], + })), + }; + self.conversions + .extend(data.match_entries.iter().enumerate().map( + |(index, match_entry)| { + let pattern = Pattern { + span: span, + kind: PatternKind::TupleStruct( + internal_token_path.clone(), + vec![ + Pattern { + span: span, + kind: PatternKind::Usize(index), + }, + Pattern { + span: span, + kind: PatternKind::Choose(input_str.clone()), + }, + ], + ), + }; + + (match_entry.user_name.clone(), pattern) + }, + )); + self.intern_token = Some(data); + } + + pt::GrammarItem::ExternToken(data) => { + if let Some(enum_token) = data.enum_token { + token_span = Some(enum_token.type_span); + self.conversions + .extend(enum_token.conversions.iter().map(|conversion| { + ( + conversion.from.clone(), + conversion.to.map(&mut |t| t.type_repr()), + ) + })); + } + } + + pt::GrammarItem::Nonterminal(nt) => { + let nt_name = &nt.name; + let productions: Vec<_> = nt.alternatives + .into_iter() + .map(|alt| { + let nt_type = self.types.nonterminal_type(nt_name).clone(); + let symbols = self.symbols(&alt.expr.symbols); + let action = self.action_kind(nt_type, &alt.expr, &symbols, alt.action); + r::Production { + nonterminal: nt_name.clone(), + span: alt.span, + symbols: symbols, + action: action, + } + }) + .collect(); + self.nonterminals.insert( + nt_name.clone(), + r::NonterminalData { + name: nt_name.clone(), + visibility: nt.visibility.clone(), + annotations: nt.annotations, + span: nt.span, + productions: productions, + }, + ); + } + } + } + + let parameters = grammar + .parameters + .iter() + .map(|p| r::Parameter { + name: p.name.clone(), + ty: p.ty.type_repr(), + }) + .collect(); + + let where_clauses = grammar + .where_clauses + .iter() + .map(|wc| wc.map(pt::TypeRef::type_repr)) + .collect(); + + let mut algorithm = r::Algorithm::default(); + + // FIXME Error recovery only works for parse tables so temporarily only generate parse tables for + // testing + if self.session.unit_test && !self.uses_error_recovery { + algorithm.codegen = r::LrCodeGeneration::TestAll; + } + + read_algorithm(&grammar.annotations, &mut algorithm); + + let mut all_terminals: Vec<_> = self.conversions + .iter() + .map(|c| c.0.clone()) + .chain(if self.uses_error_recovery { + Some(TerminalString::Error) + } else { + None + }) + .collect(); + all_terminals.sort(); + + let terminal_bits: Map<_, _> = all_terminals.iter().cloned().zip(0..).collect(); + + Ok(r::Grammar { + uses_error_recovery: self.uses_error_recovery, + prefix: self.prefix, + start_nonterminals: start_symbols, + uses: uses, + action_fn_defns: self.action_fn_defns, + nonterminals: self.nonterminals, + conversions: self.conversions.into_iter().collect(), + types: self.types, + token_span: token_span.unwrap(), + type_parameters: grammar.type_parameters, + parameters: parameters, + where_clauses: where_clauses, + algorithm: algorithm, + intern_token: self.intern_token, + terminals: r::TerminalSet { + all: all_terminals, + bits: terminal_bits, + }, + module_attributes: grammar.module_attributes, + }) + } + + fn synthesize_start_symbols( + &mut self, + grammar: &pt::Grammar, + ) -> Map { + grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .filter(|nt| nt.visibility.is_pub()) + .map(|nt| { + // create a synthetic symbol `__Foo` for each public symbol `Foo` + // with a rule like: + // + // __Foo = Foo; + let fake_name = + pt::NonterminalString(Atom::from(format!("{}{}", self.prefix, nt.name))); + let nt_type = self.types.nonterminal_type(&nt.name).clone(); + self.types.add_type(fake_name.clone(), nt_type.clone()); + let expr = pt::ExprSymbol { + symbols: vec![ + pt::Symbol::new(nt.span, pt::SymbolKind::Nonterminal(fake_name.clone())), + ], + }; + let symbols = vec![r::Symbol::Nonterminal(nt.name.clone())]; + let action_fn = self.action_fn(nt_type, false, &expr, &symbols, None); + let production = r::Production { + nonterminal: fake_name.clone(), + symbols: symbols, + action: action_fn, + span: nt.span, + }; + self.nonterminals.insert( + fake_name.clone(), + r::NonterminalData { + name: fake_name.clone(), + visibility: nt.visibility.clone(), + annotations: vec![], + span: nt.span, + productions: vec![production], + }, + ); + (nt.name.clone(), fake_name) + }) + .collect() + } + + fn action_kind( + &mut self, + nt_type: r::TypeRepr, + expr: &pt::ExprSymbol, + symbols: &[r::Symbol], + action: Option, + ) -> r::ActionFn { + match action { + Some(pt::ActionKind::Lookahead) => self.lookahead_action_fn(), + Some(pt::ActionKind::Lookbehind) => self.lookbehind_action_fn(), + Some(pt::ActionKind::User(string)) => { + self.action_fn(nt_type, false, &expr, &symbols, Some(string)) + } + Some(pt::ActionKind::Fallible(string)) => { + self.action_fn(nt_type, true, &expr, &symbols, Some(string)) + } + None => self.action_fn(nt_type, false, &expr, &symbols, None), + } + } + + fn lookahead_action_fn(&mut self) -> r::ActionFn { + let action_fn_defn = r::ActionFnDefn { + fallible: false, + ret_type: self.types.terminal_loc_type(), + kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookahead), + }; + + self.add_action_fn(action_fn_defn) + } + + fn lookbehind_action_fn(&mut self) -> r::ActionFn { + let action_fn_defn = r::ActionFnDefn { + fallible: false, + ret_type: self.types.terminal_loc_type(), + kind: r::ActionFnDefnKind::Lookaround(r::LookaroundActionFnDefn::Lookbehind), + }; + + self.add_action_fn(action_fn_defn) + } + + fn action_fn( + &mut self, + nt_type: r::TypeRepr, + fallible: bool, + expr: &pt::ExprSymbol, + symbols: &[r::Symbol], + action: Option, + ) -> r::ActionFn { + let action = match action { + Some(s) => s, + None => { + // If the user declared a type `()`, or we inferred + // it, then there is only one possible action that + // will type-check (`()`), so supply that. Otherwise, + // default is to include all selected items. + if nt_type.is_unit() { + format!("()") + } else { + format!("(<>)") + } + } + }; + + // Note that the action fn takes ALL of the symbols in `expr` + // as arguments, and some of them are simply dropped based on + // the user's selections. + + // The set of argument types is thus the type of all symbols: + let arg_types: Vec = + symbols.iter().map(|s| s.ty(&self.types)).cloned().collect(); + + let action_fn_defn = match norm_util::analyze_expr(expr) { + Symbols::Named(names) => { + // if there are named symbols, we want to give the + // arguments the names that the user gave them: + let arg_patterns = patterns( + names + .iter() + .map(|&(index, ref name, _)| (index, name.clone())), + symbols.len(), + ); + + let action = { + match norm_util::check_between_braces(&action) { + norm_util::Presence::None => action, + norm_util::Presence::Normal => { + let name_str: String = { + let name_strs: Vec<_> = names + .iter() + .map(|&(_, ref name, _)| name.as_ref()) + .collect(); + name_strs.join(", ") + }; + action.replace("<>", &name_str) + } + norm_util::Presence::InCurlyBrackets => { + let name_str = { + let name_strs: Vec<_> = names + .iter() + .map(|&(_, ref name, _)| format!("{0}:{0}", &*name)) + .collect(); + name_strs.join(", ") + }; + action.replace("<>", &name_str) + } + } + }; + + r::ActionFnDefn { + fallible: fallible, + ret_type: nt_type, + kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { + arg_patterns: arg_patterns, + arg_types: arg_types, + code: action, + }), + } + } + Symbols::Anon(indices) => { + let names: Vec<_> = (0..indices.len()).map(|i| self.fresh_name(i)).collect(); + let arg_patterns = patterns( + indices + .iter() + .map(|&(index, _)| index) + .zip(names.iter().cloned()), + symbols.len(), + ); + let name_str = { + let name_strs: Vec<_> = names.iter().map(|n| n.as_ref()).collect(); + name_strs.join(", ") + }; + let action = action.replace("<>", &name_str); + r::ActionFnDefn { + fallible: fallible, + ret_type: nt_type, + kind: r::ActionFnDefnKind::User(r::UserActionFnDefn { + arg_patterns: arg_patterns, + arg_types: arg_types, + code: action, + }), + } + } + }; + + self.add_action_fn(action_fn_defn) + } + + fn add_action_fn(&mut self, action_fn_defn: r::ActionFnDefn) -> r::ActionFn { + let index = r::ActionFn::new(self.action_fn_defns.len()); + self.action_fn_defns.push(action_fn_defn); + index + } + + fn symbols(&mut self, symbols: &[pt::Symbol]) -> Vec { + symbols.iter().map(|sym| self.symbol(sym)).collect() + } + + fn symbol(&mut self, symbol: &pt::Symbol) -> r::Symbol { + match symbol.kind { + pt::SymbolKind::Terminal(ref id) => r::Symbol::Terminal(id.clone()), + pt::SymbolKind::Nonterminal(ref id) => r::Symbol::Nonterminal(id.clone()), + pt::SymbolKind::Choose(ref s) | pt::SymbolKind::Name(_, ref s) => self.symbol(s), + pt::SymbolKind::Error => { + self.uses_error_recovery = true; + r::Symbol::Terminal(TerminalString::Error) + } + + pt::SymbolKind::Macro(..) + | pt::SymbolKind::Repeat(..) + | pt::SymbolKind::Expr(..) + | pt::SymbolKind::AmbiguousId(_) + | pt::SymbolKind::Lookahead + | pt::SymbolKind::Lookbehind => unreachable!( + "symbol `{}` should have been normalized away by now", + symbol + ), + } + } + + fn fresh_name(&self, i: usize) -> Atom { + Atom::from(format!("{}{}", self.prefix, i)) + } +} + +fn patterns(mut chosen: I, num_args: usize) -> Vec +where + I: Iterator, +{ + let blank = Atom::from("_"); + + let mut next_chosen = chosen.next(); + + let result = (0..num_args) + .map(|index| match next_chosen.clone() { + Some((chosen_index, ref chosen_name)) if chosen_index == index => { + next_chosen = chosen.next(); + chosen_name.clone() + } + _ => blank.clone(), + }) + .collect(); + + debug_assert!(next_chosen.is_none()); + + result +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/macro_expand/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/macro_expand/mod.rs new file mode 100644 index 000000000000..6d58cab07da4 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/macro_expand/mod.rs @@ -0,0 +1,603 @@ +use std::collections::{HashMap, HashSet}; +use string_cache::DefaultAtom as Atom; +use grammar::consts::INLINE; +use grammar::parse_tree::{ActionKind, Alternative, Annotation, Condition, ConditionOp, ExprSymbol, + Grammar, GrammarItem, MacroSymbol, NonterminalData, NonterminalString, + Path, RepeatOp, RepeatSymbol, Span, Symbol, SymbolKind, TerminalLiteral, + TerminalString, TypeRef, Visibility}; +use normalize::resolve; +use normalize::{NormError, NormResult}; +use normalize::norm_util::{self, Symbols}; +use regex::Regex; +use std::mem; + +#[cfg(test)] +mod test; + +pub fn expand_macros(input: Grammar) -> NormResult { + let input = try!(resolve::resolve(input)); + + let items = input.items; + + let (macro_defs, mut items): (Vec<_>, Vec<_>) = + items.into_iter().partition(|mi| mi.is_macro_def()); + + let macro_defs: HashMap<_, _> = macro_defs + .into_iter() + .map(|md| match md { + GrammarItem::Nonterminal(ref data) => (data.name.clone(), data.clone()), + _ => unreachable!(), + }) + .collect(); + + let mut expander = MacroExpander::new(macro_defs); + try!(expander.expand(&mut items)); + + Ok(Grammar { + items: items, + ..input + }) +} + +struct MacroExpander { + macro_defs: HashMap, + expansion_set: HashSet, + expansion_stack: Vec, +} + +impl MacroExpander { + fn new(macro_defs: HashMap) -> MacroExpander { + MacroExpander { + macro_defs: macro_defs, + expansion_stack: Vec::new(), + expansion_set: HashSet::new(), + } + } + + fn expand(&mut self, items: &mut Vec) -> NormResult<()> { + let mut counter = 0; + loop { + // Find any macro uses in items added since last round and + // replace them in place with the expanded version: + for item in &mut items[counter..] { + self.replace_item(item); + } + counter = items.len(); + + // No more expansion to do. + if self.expansion_stack.is_empty() { + return Ok(()); + } + + // Drain expansion stack: + while let Some(sym) = self.expansion_stack.pop() { + match sym.kind { + SymbolKind::Macro(msym) => { + items.push(try!(self.expand_macro_symbol(sym.span, msym))) + } + SymbolKind::Expr(expr) => { + items.push(try!(self.expand_expr_symbol(sym.span, expr))) + } + SymbolKind::Repeat(repeat) => { + items.push(try!(self.expand_repeat_symbol(sym.span, *repeat))) + } + SymbolKind::Lookahead => items.push(try!(self.expand_lookaround_symbol( + sym.span, + "@L", + ActionKind::Lookahead + ))), + SymbolKind::Lookbehind => items.push(try!(self.expand_lookaround_symbol( + sym.span, + "@R", + ActionKind::Lookbehind + ))), + _ => assert!(false, "don't know how to expand `{:?}`", sym), + } + } + } + } + + fn replace_item(&mut self, item: &mut GrammarItem) { + match *item { + GrammarItem::MatchToken(..) => {} + GrammarItem::ExternToken(..) => {} + GrammarItem::InternToken(..) => {} + GrammarItem::Use(..) => {} + GrammarItem::Nonterminal(ref mut data) => { + // Should not encounter macro definitions here, + // they've already been siphoned off. + assert!(!data.is_macro_def()); + + for alternative in &mut data.alternatives { + self.replace_symbols(&mut alternative.expr.symbols); + } + } + } + } + + fn replace_symbols(&mut self, symbols: &mut [Symbol]) { + for symbol in symbols { + self.replace_symbol(symbol); + } + } + + fn replace_symbol(&mut self, symbol: &mut Symbol) { + match symbol.kind { + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + SymbolKind::Macro(ref mut m) => for sym in &mut m.args { + self.replace_symbol(sym); + }, + SymbolKind::Expr(ref mut expr) => { + self.replace_symbols(&mut expr.symbols); + } + SymbolKind::Repeat(ref mut repeat) => { + self.replace_symbol(&mut repeat.symbol); + } + SymbolKind::Terminal(_) | SymbolKind::Nonterminal(_) | SymbolKind::Error => { + return; + } + SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { + self.replace_symbol(sym); + return; + } + SymbolKind::Lookahead | SymbolKind::Lookbehind => {} + } + + // only symbols we intend to expand fallthrough to here + + let key = NonterminalString(Atom::from(symbol.canonical_form())); + let replacement = Symbol { + span: symbol.span, + kind: SymbolKind::Nonterminal(key.clone()), + }; + let to_expand = mem::replace(symbol, replacement); + if self.expansion_set.insert(key) { + self.expansion_stack.push(to_expand); + } + } + + /////////////////////////////////////////////////////////////////////////// + // Macro expansion + + fn expand_macro_symbol(&mut self, span: Span, msym: MacroSymbol) -> NormResult { + let msym_name = NonterminalString(Atom::from(msym.canonical_form())); + + let mdef = match self.macro_defs.get(&msym.name) { + Some(v) => v, + None => return_err!(span, "no macro definition found for `{}`", msym.name), + }; + + if mdef.args.len() != msym.args.len() { + return_err!( + span, + "expected {} arguments to `{}` but found {}", + mdef.args.len(), + msym.name, + msym.args.len() + ); + } + + let args: HashMap = mdef.args + .iter() + .cloned() + .zip(msym.args.into_iter().map(|s| s.kind)) + .collect(); + + let type_decl = mdef.type_decl + .as_ref() + .map(|tr| self.macro_expand_type_ref(&args, tr)); + + // due to the use of `try!`, it's a bit awkward to write this with an iterator + let mut alternatives: Vec = vec![]; + + for alternative in &mdef.alternatives { + if !try!(self.evaluate_cond(&args, &alternative.condition)) { + continue; + } + alternatives.push(Alternative { + span: span, + expr: self.macro_expand_expr_symbol(&args, &alternative.expr), + condition: None, + action: alternative.action.clone(), + }); + } + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: mdef.visibility.clone(), + span: span, + name: msym_name, + annotations: mdef.annotations.clone(), + args: vec![], + type_decl: type_decl, + alternatives: alternatives, + })) + } + + fn macro_expand_type_refs( + &self, + args: &HashMap, + type_refs: &[TypeRef], + ) -> Vec { + type_refs + .iter() + .map(|tr| self.macro_expand_type_ref(args, tr)) + .collect() + } + + fn macro_expand_type_ref( + &self, + args: &HashMap, + type_ref: &TypeRef, + ) -> TypeRef { + match *type_ref { + TypeRef::Tuple(ref trs) => TypeRef::Tuple(self.macro_expand_type_refs(args, trs)), + TypeRef::Nominal { + ref path, + ref types, + } => TypeRef::Nominal { + path: path.clone(), + types: self.macro_expand_type_refs(args, types), + }, + TypeRef::Lifetime(ref id) => TypeRef::Lifetime(id.clone()), + TypeRef::OfSymbol(ref sym) => TypeRef::OfSymbol(sym.clone()), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => TypeRef::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(self.macro_expand_type_ref(args, referent)), + }, + TypeRef::Id(ref id) => match args.get(&NonterminalString(id.clone())) { + Some(sym) => TypeRef::OfSymbol(sym.clone()), + None => TypeRef::Nominal { + path: Path::from_id(id.clone()), + types: vec![], + }, + }, + } + } + + fn evaluate_cond( + &self, + args: &HashMap, + opt_cond: &Option, + ) -> NormResult { + if let Some(ref c) = *opt_cond { + match args[&c.lhs] { + SymbolKind::Terminal(TerminalString::Literal(TerminalLiteral::Quoted(ref lhs))) => { + match c.op { + ConditionOp::Equals => Ok(lhs == &c.rhs), + ConditionOp::NotEquals => Ok(lhs != &c.rhs), + ConditionOp::Match => self.re_match(c.span, lhs, &c.rhs), + ConditionOp::NotMatch => Ok(!try!(self.re_match(c.span, lhs, &c.rhs))), + } + } + ref lhs => { + return_err!( + c.span, + "invalid condition LHS `{}`, expected a string literal, not `{}`", + c.lhs, + lhs + ); + } + } + } else { + Ok(true) + } + } + + fn re_match(&self, span: Span, lhs: &Atom, regex: &Atom) -> NormResult { + let re = match Regex::new(®ex) { + Ok(re) => re, + Err(err) => return_err!(span, "invalid regular expression `{}`: {}", regex, err), + }; + Ok(re.is_match(&lhs)) + } + + fn macro_expand_symbols( + &self, + args: &HashMap, + expr: &[Symbol], + ) -> Vec { + expr.iter() + .map(|s| self.macro_expand_symbol(args, s)) + .collect() + } + + fn macro_expand_expr_symbol( + &self, + args: &HashMap, + expr: &ExprSymbol, + ) -> ExprSymbol { + ExprSymbol { + symbols: self.macro_expand_symbols(args, &expr.symbols), + } + } + + fn macro_expand_symbol( + &self, + args: &HashMap, + symbol: &Symbol, + ) -> Symbol { + let kind = match symbol.kind { + SymbolKind::Expr(ref expr) => { + SymbolKind::Expr(self.macro_expand_expr_symbol(args, expr)) + } + SymbolKind::Terminal(ref id) => SymbolKind::Terminal(id.clone()), + SymbolKind::Nonterminal(ref id) => match args.get(id) { + Some(sym) => sym.clone(), + None => SymbolKind::Nonterminal(id.clone()), + }, + SymbolKind::Macro(ref msym) => SymbolKind::Macro(MacroSymbol { + name: msym.name.clone(), + args: self.macro_expand_symbols(args, &msym.args), + }), + SymbolKind::Repeat(ref r) => SymbolKind::Repeat(Box::new(RepeatSymbol { + op: r.op, + symbol: self.macro_expand_symbol(args, &r.symbol), + })), + SymbolKind::Choose(ref sym) => { + SymbolKind::Choose(Box::new(self.macro_expand_symbol(args, sym))) + } + SymbolKind::Name(ref id, ref sym) => { + SymbolKind::Name(id.clone(), Box::new(self.macro_expand_symbol(args, sym))) + } + SymbolKind::Lookahead => SymbolKind::Lookahead, + SymbolKind::Lookbehind => SymbolKind::Lookbehind, + SymbolKind::Error => SymbolKind::Error, + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + }; + + Symbol { + span: symbol.span, + kind: kind, + } + } + + /////////////////////////////////////////////////////////////////////////// + // Expr expansion + + fn expand_expr_symbol(&mut self, span: Span, expr: ExprSymbol) -> NormResult { + let name = NonterminalString(Atom::from(expr.canonical_form())); + + let ty_ref = + match norm_util::analyze_expr(&expr) { + Symbols::Named(names) => { + let (_, ref ex_id, ex_sym) = names[0]; + return_err!( + span, + "named symbols like `{}:{}` are only allowed at the top-level of a nonterminal", + ex_id, ex_sym) + } + Symbols::Anon(syms) => maybe_tuple( + syms.into_iter() + .map(|(_, s)| TypeRef::OfSymbol(s.kind.clone())) + .collect(), + ), + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + Alternative { + span: span, + expr: expr, + condition: None, + action: action("(<>)"), + }, + ], + })) + } + + /////////////////////////////////////////////////////////////////////////// + // Expr expansion + + fn expand_repeat_symbol( + &mut self, + span: Span, + repeat: RepeatSymbol, + ) -> NormResult { + let name = NonterminalString(Atom::from(repeat.canonical_form())); + let v = Atom::from("v"); + let e = Atom::from("e"); + + let base_symbol_ty = TypeRef::OfSymbol(repeat.symbol.kind.clone()); + + match repeat.op { + RepeatOp::Star => { + let path = Path::vec(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + let plus_repeat = Box::new(RepeatSymbol { + op: RepeatOp::Plus, + symbol: repeat.symbol.clone(), + }); + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X* = + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: action("vec![]"), + }, + // X* = + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![ + Symbol::new( + span, + SymbolKind::Name( + v, + Box::new(Symbol::new( + span, + SymbolKind::Repeat(plus_repeat), + )), + ), + ), + ], + }, + condition: None, + action: action("v"), + }, + ], + })) + } + + RepeatOp::Plus => { + let path = Path::vec(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name.clone(), + annotations: vec![], + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X+ = X + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![repeat.symbol.clone()], + }, + condition: None, + action: action("vec![<>]"), + }, + // X+ = + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![ + Symbol::new( + span, + SymbolKind::Name( + v, + Box::new(Symbol::new( + span, + SymbolKind::Nonterminal(name), + )), + ), + ), + Symbol::new( + span, + SymbolKind::Name(e, Box::new(repeat.symbol.clone())), + ), + ], + }, + condition: None, + action: action("{ let mut v = v; v.push(e); v }"), + }, + ], + })) + } + + RepeatOp::Question => { + let path = Path::option(); + let ty_ref = TypeRef::Nominal { + path: path, + types: vec![base_symbol_ty], + }; + + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: Some(ty_ref), + alternatives: vec![ + // X? = X => Some(<>) + Alternative { + span: span, + expr: ExprSymbol { + symbols: vec![repeat.symbol.clone()], + }, + condition: None, + action: action("Some(<>)"), + }, + // X? = { => None; } + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: action("None"), + }, + ], + })) + } + } + } + + fn expand_lookaround_symbol( + &mut self, + span: Span, + name: &str, + action: ActionKind, + ) -> NormResult { + let name = NonterminalString(Atom::from(name)); + Ok(GrammarItem::Nonterminal(NonterminalData { + visibility: Visibility::Priv, + span: span, + name: name, + annotations: inline(span), + args: vec![], + type_decl: None, + alternatives: vec![ + Alternative { + span: span, + expr: ExprSymbol { symbols: vec![] }, + condition: None, + action: Some(action), + }, + ], + })) + } +} + +fn maybe_tuple(v: Vec) -> TypeRef { + if v.len() == 1 { + v.into_iter().next().unwrap() + } else { + TypeRef::Tuple(v) + } +} + +fn action(s: &str) -> Option { + Some(ActionKind::User(s.to_string())) +} + +fn inline(span: Span) -> Vec { + vec![ + Annotation { + id_span: span, + id: Atom::from(INLINE), + }, + ] +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/macro_expand/test.rs b/third_party/rust/lalrpop-snap/src/normalize/macro_expand/test.rs new file mode 100644 index 000000000000..9de44e5c2ce0 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/macro_expand/test.rs @@ -0,0 +1,112 @@ +use parser; +use test_util::compare; + +use super::expand_macros; + +#[test] +fn test_comma() { + let grammar = parser::parse_grammar( + r#" +grammar; + Comma: Vec = + ",")*> => + v.into_iter().chain(e.into_iter()).collect(); + + Ids = Comma<"Id">; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r##" +grammar; + Ids = `Comma<"Id">`; + + `Comma<"Id">`: Vec<#"Id"#> = + ",")*`> => v.into_iter().chain(e.into_iter()).collect(); + + #[inline] + `"Id"?`: ::std::option::Option<#"Id"#> = { + "Id" => Some(<>), + => None + }; + + #[inline] + `(<"Id"> ",")*`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { + => vec![], + ",")+`> => v, + }; + + #[inline] + `(<"Id"> ",")`: #"Id"# = { + <"Id"> "," => (<>), + }; + + `(<"Id"> ",")+`: ::std::vec::Vec<#`(<"Id"> ",")`#> = { + `(<"Id"> ",")` => vec![<>], + ",")+`> ",")`> => { let mut v = v; v.push(e); v }, + }; +"##, + ).unwrap(); + + compare(actual, expected); +} + +#[test] +fn test_if_match() { + let grammar = parser::parse_grammar( + r#" +grammar; + Expr = { + "A" if E == "A*C", + "B" if E ~~ "^A*C$", + "C" if E != "A*C", + "D" if E !~ "^A*C$" + }; + + Expr1 = Expr<"A*C">; + Expr2 = Expr<"AAC">; + Expr3 = Expr<"ABC">; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r#" +grammar; + Expr1 = `Expr<"A*C">`; + Expr2 = `Expr<"AAC">`; + Expr3 = `Expr<"ABC">`; + + `Expr<"ABC">` = { "C", "D" }; + `Expr<"AAC">` = { "B", "C" }; + `Expr<"A*C">` = { "A", "D" }; +"#, + ).unwrap(); + + compare(actual, expected); +} + +#[test] +fn test_lookahead() { + let grammar = parser::parse_grammar( + r#" + grammar; + Expr = @L; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar( + r#" + grammar; + Expr = `@L`; + #[inline] `@L` = =>@L; +"#, + ).unwrap(); + + compare(actual, expected); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/mod.rs new file mode 100644 index 000000000000..42ead7cd5b87 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/mod.rs @@ -0,0 +1,119 @@ +/*! + * Normalization processes a parse tree until it is in suitable form to + * be converted to the more canonical form. This is done as a series of + * passes, each contained in their own module below. + */ + +use grammar::parse_tree as pt; +use grammar::repr as r; +use session::Session; + +pub type NormResult = Result; + +#[derive(Clone, Debug)] +pub struct NormError { + pub message: String, + pub span: pt::Span, +} + +macro_rules! return_err { + ($span: expr, $($args:expr),+) => { + return Err(NormError { + message: format!($($args),+), + span: $span + }); + } +} + +pub fn normalize(session: &Session, grammar: pt::Grammar) -> NormResult { + normalize_helper(session, grammar, true) +} + +/// for unit tests, it is convenient to skip the validation step, and supply a dummy session +#[cfg(test)] +pub fn normalize_without_validating(grammar: pt::Grammar) -> NormResult { + normalize_helper(&Session::new(), grammar, false) +} + +fn normalize_helper( + session: &Session, + grammar: pt::Grammar, + validate: bool, +) -> NormResult { + let grammar = try!(lower_helper(session, grammar, validate)); + let grammar = profile!(session, "Inlining", try!(inline::inline(grammar))); + Ok(grammar) +} + +fn lower_helper(session: &Session, grammar: pt::Grammar, validate: bool) -> NormResult { + profile!( + session, + "Grammar validation", + if validate { + try!(prevalidate::validate(&grammar)); + } + ); + let grammar = profile!( + session, + "Grammar resolution", + try!(resolve::resolve(grammar)) + ); + let grammar = profile!( + session, + "Macro expansion", + try!(macro_expand::expand_macros(grammar)) + ); + let grammar = profile!(session, "Token check", try!(token_check::validate(grammar))); + let types = profile!(session, "Infer types", try!(tyinfer::infer_types(&grammar))); + let grammar = profile!( + session, + "Lowering", + try!(lower::lower(session, grammar, types)) + ); + Ok(grammar) +} + +// These are executed *IN ORDER*: + +// Check most safety conditions. +mod prevalidate; + +// Resolve identifiers into terminals/nonterminals etc. +mod resolve; + +// Expands macros and expressions +// +// X = ...1 Comma (X Y Z) ...2 +// +// to +// +// X = ...1 `Comma` `(X Y Z)` ...2 +// `Comma_X`: Vec<> = ...; +// `(X Y Z)` = X Y Z; +// +// AFTER THIS POINT: No more macros, macro references, guarded +// alternatives, repeats, or expr symbols, though type indirections +// may occur. +mod macro_expand; + +// Check if there is an extern token and all terminals have have a +// conversion; if no extern token, synthesize an intern token. +mod token_check; + +// Computes types where the user omitted them (or from macro +// byproducts). +// +// AFTER THIS POINT: there is a separate `repr::Types` table +// providing all nonterminals with an explicit type. +mod tyinfer; + +// Lowers the parse tree to the repr notation. +mod lower; + +// Inline nonterminals that have requested it. +mod inline; + +/////////////////////////////////////////////////////////////////////////// +// Shared routines + +mod norm_util; diff --git a/third_party/rust/lalrpop-snap/src/normalize/norm_util.rs b/third_party/rust/lalrpop-snap/src/normalize/norm_util.rs new file mode 100644 index 000000000000..ba4b46515ee4 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/norm_util.rs @@ -0,0 +1,134 @@ +use string_cache::DefaultAtom as Atom; +use grammar::parse_tree::{ActionKind, Alternative, ExprSymbol, Symbol, SymbolKind}; + +#[derive(Debug)] +pub enum AlternativeAction<'a> { + User(&'a ActionKind), + Default(Symbols<'a>), +} + +#[derive(Debug)] +pub enum Symbols<'a> { + Named(Vec<(usize, Atom, &'a Symbol)>), + Anon(Vec<(usize, &'a Symbol)>), +} + +pub fn analyze_action<'a>(alt: &'a Alternative) -> AlternativeAction<'a> { + // We can't infer types for alternatives with actions + if let Some(ref code) = alt.action { + return AlternativeAction::User(code); + } + + AlternativeAction::Default(analyze_expr(&alt.expr)) +} + +pub fn analyze_expr<'a>(expr: &'a ExprSymbol) -> Symbols<'a> { + // First look for named symbols. + let named_symbols: Vec<_> = expr.symbols + .iter() + .enumerate() + .filter_map(|(idx, sym)| match sym.kind { + SymbolKind::Name(ref id, ref sub) => Some((idx, id.clone(), &**sub)), + _ => None, + }) + .collect(); + if !named_symbols.is_empty() { + return Symbols::Named(named_symbols); + } + + // Otherwise, make a tuple of the items they chose with `<>`. + let chosen_symbol_types: Vec<_> = expr.symbols + .iter() + .enumerate() + .filter_map(|(idx, sym)| match sym.kind { + SymbolKind::Choose(ref sub) => Some((idx, &**sub)), + _ => None, + }) + .collect(); + if !chosen_symbol_types.is_empty() { + return Symbols::Anon(chosen_symbol_types); + } + + // If they didn't choose anything with `<>`, make a tuple of everything. + Symbols::Anon(expr.symbols.iter().enumerate().collect()) +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum Presence { + None, + InCurlyBrackets, + Normal, +} + +impl Presence { + pub fn is_in_curly_brackets(&self) -> bool { + *self == Presence::InCurlyBrackets + } +} + +pub fn check_between_braces(action: &str) -> Presence { + if let Some(funky_index) = action.find("<>") { + let (before, after) = { + let (before, after) = action.split_at(funky_index); + (before.trim(), after[2..].trim()) + }; + + let last_before = before.chars().last(); + let next_after = after.chars().next(); + if let (Some('{'), Some('}')) = (last_before, next_after) { + Presence::InCurlyBrackets + } else { + Presence::Normal + } + } else { + Presence::None + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn detecting_normal_funky_expression() { + assert_eq!(Presence::Normal, check_between_braces("<>")); + assert_eq!(Presence::Normal, check_between_braces("ble <> blaa")); + assert_eq!(Presence::Normal, check_between_braces("ble <> } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <> } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <>} b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ e <> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{ <> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{<> e } b")); + assert_eq!(Presence::Normal, check_between_braces("bl{<>")); + assert_eq!(Presence::Normal, check_between_braces("<>}")); + } + + #[test] + fn detecting_nopresence_of_funky_expression() { + assert_eq!(Presence::None, check_between_braces("< >")); + assert_eq!(Presence::None, check_between_braces("ble blaa")); + } + + #[test] + fn detecting_incurlybrackets_funky_expression() { + assert_eq!(Presence::InCurlyBrackets, check_between_braces("{<>}")); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("ble{<> }blaa") + ); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("ble{ <> } b") + ); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("bl{ <>} b") + ); + assert_eq!(Presence::InCurlyBrackets, check_between_braces("bl{<>} b")); + assert_eq!( + Presence::InCurlyBrackets, + check_between_braces("bl{<> } b") + ); + } + +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/prevalidate/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/prevalidate/mod.rs new file mode 100644 index 000000000000..7f69fc831787 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/prevalidate/mod.rs @@ -0,0 +1,296 @@ +//! Validate checks some basic safety conditions. + +use super::{NormError, NormResult}; +use super::norm_util::{self, Symbols}; + +use grammar::consts::*; +use grammar::parse_tree::*; +use grammar::repr as r; +use string_cache::DefaultAtom as Atom; +use collections::{set, Multimap}; +use util::Sep; + +#[cfg(test)] +mod test; + +pub fn validate(grammar: &Grammar) -> NormResult<()> { + let match_token: Option<&MatchToken> = grammar + .items + .iter() + .filter_map(|item| item.as_match_token()) + .next(); + + let extern_token: Option<&ExternToken> = grammar + .items + .iter() + .filter_map(|item| item.as_extern_token()) + .next(); + + let validator = Validator { + grammar: grammar, + match_token: match_token, + extern_token: extern_token, + }; + + validator.validate() +} + +struct Validator<'grammar> { + grammar: &'grammar Grammar, + match_token: Option<&'grammar MatchToken>, + extern_token: Option<&'grammar ExternToken>, +} + +impl<'grammar> Validator<'grammar> { + fn validate(&self) -> NormResult<()> { + let allowed_names = vec![ + Atom::from(LALR), + Atom::from(TABLE_DRIVEN), + Atom::from(RECURSIVE_ASCENT), + Atom::from(TEST_ALL), + ]; + for annotation in &self.grammar.annotations { + if !allowed_names.contains(&annotation.id) { + return_err!( + annotation.id_span, + "unrecognized annotation `{}`", + annotation.id + ); + } + } + + for item in &self.grammar.items { + match *item { + GrammarItem::Use(..) => {} + + GrammarItem::MatchToken(ref data) => { + if data.span != self.match_token.unwrap().span { + return_err!(data.span, "multiple match definitions are not permitted"); + } + + // Only error if a custom lexer is specified, having a custom types is ok + if let Some(d) = self.extern_token { + if d.enum_token.is_some() { + return_err!( + d.span, + "extern (with custom tokens) and match definitions are mutually exclusive"); + } + } + + // Ensure that the catch all is final item of final block + for (contents_idx, match_contents) in data.contents.iter().enumerate() { + for (item_idx, item) in match_contents.items.iter().enumerate() { + if item.is_catch_all() + && (contents_idx != &data.contents.len() - 1 + || item_idx != &match_contents.items.len() - 1) + { + return_err!(item.span(), "Catch all must be final item"); + } else { + println!("ok"); + } + } + } + } + + GrammarItem::ExternToken(ref data) => { + if data.span != self.extern_token.unwrap().span { + return_err!(data.span, "multiple extern definitions are not permitted"); + } + + // Only error if a custom lexer is specified, having a custom types is ok + if let Some(d) = self.match_token { + if data.enum_token.is_some() { + return_err!( + d.span, + "match and extern (with custom tokens) definitions are mutually exclusive"); + } + } + + let allowed_names = vec![Atom::from(LOCATION), Atom::from(ERROR)]; + let mut new_names = set(); + for associated_type in &data.associated_types { + if !allowed_names.contains(&associated_type.type_name) { + return_err!( + associated_type.type_span, + "associated type `{}` not recognized, \ + try one of the following: {}", + associated_type.type_name, + Sep(", ", &allowed_names) + ); + } else if !new_names.insert(associated_type.type_name.clone()) { + return_err!( + associated_type.type_span, + "associated type `{}` already specified", + associated_type.type_name + ); + } + } + } + GrammarItem::Nonterminal(ref data) => { + if data.visibility.is_pub() && !data.args.is_empty() { + return_err!(data.span, "macros cannot be marked public"); + } + let inline_annotation = Atom::from(INLINE); + let known_annotations = vec![inline_annotation.clone()]; + let mut found_annotations = set(); + for annotation in &data.annotations { + if !known_annotations.contains(&annotation.id) { + return_err!( + annotation.id_span, + "unrecognized annotation `{}`", + annotation.id + ); + } else if !found_annotations.insert(annotation.id.clone()) { + return_err!( + annotation.id_span, + "duplicate annotation `{}`", + annotation.id + ); + } else if annotation.id == inline_annotation && data.visibility.is_pub() { + return_err!( + annotation.id_span, + "public items cannot be marked #[inline]" + ); + } + } + + for alternative in &data.alternatives { + try!(self.validate_alternative(alternative)); + } + } + GrammarItem::InternToken(..) => {} + } + } + Ok(()) + } + + fn validate_alternative(&self, alternative: &Alternative) -> NormResult<()> { + try!(self.validate_expr(&alternative.expr)); + + match norm_util::analyze_expr(&alternative.expr) { + Symbols::Named(syms) => { + if alternative.action.is_none() { + let sym = syms.iter().map(|&(_, _, sym)| sym).next().unwrap(); + return_err!( + sym.span, + "named symbols (like `{}`) require a custom action", + sym + ); + } + } + Symbols::Anon(_) => { + let empty_string = "".to_string(); + let action = { + match alternative.action { + Some(ActionKind::User(ref action)) => action, + Some(ActionKind::Fallible(ref action)) => action, + _ => &empty_string, + } + }; + if norm_util::check_between_braces(action).is_in_curly_brackets() { + return_err!( + alternative.span, + "Using `<>` between curly braces (e.g., `{{<>}}`) only works when your parsed values have been given names (e.g., ``, not just ``)"); + } + } + } + + Ok(()) + } + + fn validate_expr(&self, expr: &ExprSymbol) -> NormResult<()> { + for symbol in &expr.symbols { + try!(self.validate_symbol(symbol)); + } + + let chosen: Vec<&Symbol> = expr.symbols + .iter() + .filter(|sym| match sym.kind { + SymbolKind::Choose(_) => true, + _ => false, + }) + .collect(); + + let named: Multimap> = expr.symbols + .iter() + .filter_map(|sym| match sym.kind { + SymbolKind::Name(ref nt, _) => Some((nt.clone(), sym)), + _ => None, + }) + .collect(); + + if !chosen.is_empty() && !named.is_empty() { + return_err!( + chosen[0].span, + "anonymous symbols like this one cannot be combined with \ + named symbols like `{}`", + named.into_iter().next().unwrap().1[0] + ); + } + + for (name, syms) in named.into_iter() { + if syms.len() > 1 { + return_err!( + syms[1].span, + "multiple symbols named `{}` are not permitted", + name + ); + } + } + + Ok(()) + } + + fn validate_symbol(&self, symbol: &Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref expr) => { + try!(self.validate_expr(expr)); + } + SymbolKind::AmbiguousId(_) => { /* see resolve */ } + SymbolKind::Terminal(_) => { /* see postvalidate! */ } + SymbolKind::Nonterminal(_) => { /* see resolve */ } + SymbolKind::Error => { + let mut algorithm = r::Algorithm::default(); + read_algorithm(&self.grammar.annotations, &mut algorithm); + if algorithm.codegen == r::LrCodeGeneration::RecursiveAscent { + return_err!( + symbol.span, + "error recovery is not yet supported by recursive ascent parsers" + ); + } + } + SymbolKind::Macro(ref msym) => { + debug_assert!(msym.args.len() > 0); + for arg in &msym.args { + try!(self.validate_symbol(arg)); + } + } + SymbolKind::Repeat(ref repeat) => { + try!(self.validate_symbol(&repeat.symbol)); + } + SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { + try!(self.validate_symbol(sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind => { + // if using an internal tokenizer, lookahead/lookbehind are ok. + if let Some(extern_token) = self.extern_token { + if extern_token.enum_token.is_some() { + // otherwise, the Location type must be specified. + let loc = Atom::from(LOCATION); + if self.extern_token.unwrap().associated_type(loc).is_none() { + return_err!( + symbol.span, + "lookahead/lookbehind require you to declare the type of \ + a location; add a `type {} = ..` statement to the extern token \ + block", + LOCATION + ); + } + } + } + } + } + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/prevalidate/test.rs b/third_party/rust/lalrpop-snap/src/normalize/prevalidate/test.rs new file mode 100644 index 000000000000..6bc3f4ec1f92 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/prevalidate/test.rs @@ -0,0 +1,151 @@ +use parser; +use test_util; + +fn check_err(expected_err: &str, grammar: &str, span: &str) { + let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); + let err = super::validate(&parsed_grammar).unwrap_err(); + test_util::check_norm_err(expected_err, span, err); +} + +#[test] +fn named_symbols() { + check_err( + r#"named symbols \(like `"Num"`\) require a custom action"#, + r#"grammar; Term = { };"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn bad_assoc_type() { + check_err( + r#"associated type `Foo` not recognized"#, + r#"grammar; extern { type Foo = i32; enum Tok { } }"#, + r#" ~~~ "#, + ); +} + +#[test] +fn dup_assoc_type() { + check_err( + r#"associated type `Location` already specified"#, + r#"grammar; extern { type Location = i32; type Location = u32; enum Tok { } }"#, + r#" ~~~~~~~~ "#, + ); +} + +#[test] +fn lookahead_without_loc_type() { + check_err( + r#"lookahead/lookbehind require you to declare the type of a location"#, + r#"grammar; extern { enum Tok { } } Foo = @L;"#, + r#" ~~ "#, + ); +} + +#[test] +fn multiple_extern_token() { + check_err( + r#"multiple extern definitions are not permitted"#, + r#"grammar; extern { enum Tok { } } extern { enum Tok { } }"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn unrecognized_annotation() { + check_err( + r#"unrecognized annotation `foo`"#, + r#"grammar; #[foo] Term = ();"#, + r#" ~~~ "#, + ); +} + +#[test] +fn duplicate_annotation() { + check_err( + r#"duplicate annotation `inline`"#, + r#"grammar; #[inline] #[inline] Term = ();"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn pub_inline_annotation() { + check_err( + r#"public items cannot be marked #\[inline\]"#, + r#"grammar; #[inline] pub Term = ();"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn multiple_match_token() { + check_err( + r#"multiple match definitions are not permitted"#, + r#"grammar; match { _ } match { _ }"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn match_after_extern_token() { + check_err( + r#"match and extern \(with custom tokens\) definitions are mutually exclusive"#, + r#"grammar; extern { enum Tok { } } match { _ }"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn extern_after_match_token() { + check_err( + r#"extern \(with custom tokens\) and match definitions are mutually exclusive"#, + r#"grammar; match { _ } extern { enum Tok { } }"#, + r#" ~~~~~~ "#, + ); +} + +#[test] +fn match_catch_all_first_of_last() { + check_err( + r#"Catch all must be final item"#, + r#"grammar; match { _, "abc" }"#, + r#" ~ "#, + ); +} + +#[test] +fn match_catch_all_last_of_first() { + check_err( + r#"Catch all must be final item"#, + r#"grammar; match { "abc", _ } else { "foo" }"#, + r#" ~ "#, + ); +} + +#[test] +fn expandable_expression_requires_named_variables() { + check_err( + r#"Using `<>` between curly braces \(e.g., `\{<>\}`\) only works when your parsed values have been given names \(e.g., ``, not just ``\)"#, + r#"grammar; Term = { => Foo {<>} };"#, + r#" ~~~~~~~~~~~~~~~~ "#); +} + +#[test] +fn mixing_names_and_anonymous_values() { + check_err( + r#"anonymous symbols like this one cannot be combined with named symbols like `b:B`"#, + r#"grammar; Term = { => Alien: Eighth passanger of Nostromo};"#, + r#" ~~~ "#, + ); +} + +#[test] +fn public_macros() { + check_err( + r#"macros cannot be marked public"#, + r#"grammar; pub Comma = (T ",")* T?;"#, + r#" ~~~~~~~~ "#, + ); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/resolve/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/resolve/mod.rs new file mode 100644 index 000000000000..892933bf048a --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/resolve/mod.rs @@ -0,0 +1,298 @@ +//! Resolves identifiers to decide if they are macros, terminals, or +//! nonterminals. Rewrites the parse tree accordingly. + +use super::{NormError, NormResult}; + +use grammar::parse_tree::*; +use string_cache::DefaultAtom as Atom; +use collections::{map, Map}; + +#[cfg(test)] +mod test; + +pub fn resolve(mut grammar: Grammar) -> NormResult { + try!(resolve_in_place(&mut grammar)); + Ok(grammar) +} + +fn resolve_in_place(grammar: &mut Grammar) -> NormResult<()> { + let globals = { + let nonterminal_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .map(|nt| { + ( + nt.span.clone(), + nt.name.0.clone(), + Def::Nonterminal(nt.args.len()), + ) + }); + + let terminal_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_extern_token()) + .flat_map(|extern_token| extern_token.enum_token.as_ref()) + .flat_map(|enum_token| &enum_token.conversions) + .filter_map(|conversion| match conversion.from { + TerminalString::Literal(..) | TerminalString::Error => None, + TerminalString::Bare(ref id) => Some((conversion.span, id.clone(), Def::Terminal)), + }); + + // Extract all the bare identifiers that appear in the RHS of a `match` declaration. + // Example: + // match { + // r"(?)begin" => "BEGIN", + // } else { + // r"[a-zA-Z_][a-zA-Z0-9_]*" => ID, + // } + // This would result in `vec![ID]`. + let match_identifiers = grammar + .items + .iter() + .filter_map(|item| item.as_match_token()) + .flat_map(|match_token| &match_token.contents) + .flat_map(|match_contents| &match_contents.items) + .filter_map(|item| match *item { + MatchItem::Mapped(_, TerminalString::Bare(ref id), _) => { + Some((item.span(), id.clone(), Def::Terminal)) + } + _ => None, + }); + + let all_identifiers = nonterminal_identifiers + .chain(terminal_identifiers) + .chain(match_identifiers); + + let mut identifiers = map(); + for (span, id, def) in all_identifiers { + if let Some(old_def) = identifiers.insert(id.clone(), def) { + let description = def.description(); + let old_description = old_def.description(); + if description == old_description { + return_err!(span, "two {}s declared with the name `{}`", description, id); + } else { + return_err!( + span, + "{} and {} both declared with the name `{}`", + description, + old_description, + id + ); + } + } + } + + ScopeChain { + previous: None, + identifiers: identifiers, + } + }; + + let validator = Validator { globals: globals }; + + validator.validate(grammar) +} + +struct Validator { + globals: ScopeChain<'static>, +} + +#[derive(Copy, Clone, Debug)] +enum Def { + Terminal, + Nonterminal(usize), // argument is the number of macro arguments + MacroArg, +} + +#[derive(Debug)] +struct ScopeChain<'scope> { + previous: Option<&'scope ScopeChain<'scope>>, + identifiers: Map, +} + +impl Def { + fn description(&self) -> &'static str { + match *self { + Def::Terminal => "terminal", + Def::Nonterminal(0) => "nonterminal", + Def::Nonterminal(_) => "macro", + Def::MacroArg => "macro argument", + } + } +} + +impl Validator { + fn validate(&self, grammar: &mut Grammar) -> NormResult<()> { + for item in &mut grammar.items { + match *item { + GrammarItem::Use(..) => {} + GrammarItem::MatchToken(..) => {} + GrammarItem::InternToken(..) => {} + GrammarItem::ExternToken(..) => {} + GrammarItem::Nonterminal(ref mut data) => { + let identifiers = try!(self.validate_macro_args(data.span, &data.args)); + let locals = ScopeChain { + previous: Some(&self.globals), + identifiers: identifiers, + }; + for alternative in &mut data.alternatives { + try!(self.validate_alternative(&locals, alternative)); + } + } + } + } + Ok(()) + } + + fn validate_macro_args( + &self, + span: Span, + args: &[NonterminalString], + ) -> NormResult> { + for (index, arg) in args.iter().enumerate() { + if args[..index].contains(&arg) { + return_err!( + span, + "multiple macro arguments declared with the name `{}`", + arg + ); + } + } + Ok(args.iter() + .map(|nt| (nt.0.clone(), Def::MacroArg)) + .collect()) + } + + fn validate_alternative( + &self, + scope: &ScopeChain, + alternative: &mut Alternative, + ) -> NormResult<()> { + if let Some(ref condition) = alternative.condition { + let def = try!(self.validate_id(scope, condition.span.clone(), &condition.lhs.0)); + match def { + Def::MacroArg => { /* OK */ } + _ => { + return_err!( + condition.span, + "only macro arguments can be used in conditions, \ + not {}s like `{}`", + def.description(), + condition.lhs + ); + } + } + } + + try!(self.validate_expr(scope, &mut alternative.expr)); + + Ok(()) + } + + fn validate_expr(&self, scope: &ScopeChain, expr: &mut ExprSymbol) -> NormResult<()> { + for symbol in &mut expr.symbols { + try!(self.validate_symbol(scope, symbol)); + } + + Ok(()) + } + + fn validate_symbol(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref mut expr) => { + try!(self.validate_expr(scope, expr)); + } + SymbolKind::AmbiguousId(_) => { + try!(self.rewrite_ambiguous_id(scope, symbol)); + } + SymbolKind::Terminal(_) => { /* see postvalidate! */ } + SymbolKind::Nonterminal(ref id) => { + // in normal operation, the parser never produces Nonterminal(_) entries, + // but during testing we do produce nonterminal entries + let def = try!(self.validate_id(scope, symbol.span, &id.0)); + match def { + Def::Nonterminal(0) | Def::MacroArg => { + // OK + } + Def::Terminal | Def::Nonterminal(_) => { + return_err!( + symbol.span, + "`{}` is a {}, not a nonterminal", + def.description(), + id + ); + } + } + } + SymbolKind::Macro(ref mut msym) => { + debug_assert!(msym.args.len() > 0); + let def = try!(self.validate_id(scope, symbol.span, &msym.name.0)); + match def { + Def::Nonterminal(0) | Def::Terminal | Def::MacroArg => return_err!( + symbol.span, + "`{}` is a {}, not a macro", + def.description(), + msym.name + ), + Def::Nonterminal(arity) => { + if arity != msym.args.len() { + return_err!( + symbol.span, + "wrong number of arguments to `{}`: \ + expected {}, found {}", + msym.name, + arity, + msym.args.len() + ); + } + } + } + + for arg in &mut msym.args { + try!(self.validate_symbol(scope, arg)); + } + } + SymbolKind::Repeat(ref mut repeat) => { + try!(self.validate_symbol(scope, &mut repeat.symbol)); + } + SymbolKind::Choose(ref mut sym) | SymbolKind::Name(_, ref mut sym) => { + try!(self.validate_symbol(scope, sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} + } + + Ok(()) + } + + fn rewrite_ambiguous_id(&self, scope: &ScopeChain, symbol: &mut Symbol) -> NormResult<()> { + let id = if let SymbolKind::AmbiguousId(ref name) = symbol.kind { + name.clone() + } else { + panic!("Should never happen."); + }; + symbol.kind = match try!(self.validate_id(scope, symbol.span, &id)) { + Def::MacroArg | Def::Nonterminal(0) => SymbolKind::Nonterminal(NonterminalString(id)), + Def::Terminal => SymbolKind::Terminal(TerminalString::Bare(id)), + Def::Nonterminal(_) => return_err!(symbol.span, "`{}` is a macro", id), + }; + Ok(()) + } + + fn validate_id(&self, scope: &ScopeChain, span: Span, id: &Atom) -> NormResult { + match scope.def(id) { + Some(def) => Ok(def), + None => return_err!(span, "no definition found for `{}`", id), + } + } +} + +impl<'scope> ScopeChain<'scope> { + fn def(&self, id: &Atom) -> Option { + self.identifiers + .get(id) + .cloned() + .or_else(|| self.previous.and_then(|s| s.def(id))) + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/resolve/test.rs b/third_party/rust/lalrpop-snap/src/normalize/resolve/test.rs new file mode 100644 index 000000000000..db8fa2b5d27c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/resolve/test.rs @@ -0,0 +1,82 @@ +use parser; +use grammar::parse_tree::Span; +use regex::Regex; + +fn check_err(expected_err: &str, grammar: &str) { + let expected_err = Regex::new(expected_err).unwrap(); + + // the string will have a `>>>` and `<<<` in it, which serve to + // indicate the span where an error is expected. + let start_index = grammar.find(">>>").unwrap(); + let grammar = grammar.replace(">>>", ""); // remove the `>>>` marker + let end_index = grammar.rfind("<<<").unwrap(); + let grammar = grammar.replace("<<<", ""); + + assert!(start_index <= end_index); + + let parsed_grammar = parser::parse_grammar(&grammar).unwrap(); + match super::resolve(parsed_grammar) { + Ok(_) => { + panic!("expected error for grammar"); + } + Err(err) => { + assert_eq!(err.span, Span(start_index, end_index)); + assert!( + expected_err.is_match(&err.message), + "unexpected error text `{}`, did not match `{}`", + err.message, + expected_err + ); + } + } +} + +#[test] +fn unknown_nonterminal() { + check_err("no definition found for `Y`", r#"grammar; X = X >>>Y<<<;"#); +} + +#[test] +fn unknown_nonterminal_in_macro_arg() { + check_err( + "no definition found for `Y`", + r#"grammar; X = X Id<>>>Y<<<>; Id = T;"#, + ); +} + +#[test] +fn unknown_nonterminal_in_repeat_question() { + check_err("no definition found for `Y`", r#"grammar; X = >>>Y<< => n.as_num(), "A" <>>>Expr<<<> "B" };"#, + ); +} + +#[test] +fn double_nonterminal() { + check_err( + "two nonterminals declared with the name `A`", + r#"grammar; A = "Foo"; >>>A<<< = "Bar";"#, + ); +} + +#[test] +fn repeated_macro_arg() { + check_err( + "multiple macro arguments declared with the name `Y`", + r#"grammar; >>>X<<< = "foo";"#, + ); +} + +#[test] +fn overlapping_terminal_and_nonterminal() { + check_err( + "terminal and nonterminal both declared with the name `A`", + r#"grammar; A = "Foo"; extern { enum Foo { >>>A => Foo::A(..) <<<} }"#, + ); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/token_check/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/token_check/mod.rs new file mode 100644 index 000000000000..3ec2f51e5c81 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/token_check/mod.rs @@ -0,0 +1,424 @@ +//! If an extern token is provided, then this pass validates that +//! terminal IDs have conversions. Otherwise, it generates a +//! tokenizer. This can only be done after macro expansion because +//! some macro arguments never make it into an actual production and +//! are only used in `if` conditions; we use string literals for +//! those, but they do not have to have a defined conversion. + +use super::{NormError, NormResult}; + +use string_cache::DefaultAtom as Atom; +use lexer::re; +use lexer::dfa::{self, DFAConstructionError, Precedence}; +use lexer::nfa::NFAConstructionError::*; +use grammar::consts::*; +use grammar::parse_tree::*; +use collections::{Map, Set}; + +#[cfg(test)] +mod test; + +pub fn validate(mut grammar: Grammar) -> NormResult { + let mode = { + let mode = if let Some(enum_token) = grammar.enum_token() { + assert!( + grammar.match_token().is_none(), + "validator permitted both an extern/match section" + ); + + TokenMode::Extern { + conversions: enum_token + .conversions + .iter() + .map(|conversion| conversion.from.clone()) + .collect(), + } + } else { + TokenMode::Internal { + match_block: MatchBlock::new(grammar.match_token())?, + } + }; + + let mut validator = Validator { + grammar: &grammar, + mode: mode, + }; + + validator.validate()?; + + validator.mode + }; + + match mode { + TokenMode::Extern { .. } => { + // If using an external tokenizer, we're all done at this point. + } + TokenMode::Internal { match_block } => { + // Otherwise, construct the `InternToken` item. + construct(&mut grammar, match_block)?; + } + } + + Ok(grammar) +} + +/////////////////////////////////////////////////////////////////////////// +// Validation phase -- this phase walks the grammar and visits all +// terminals. If using an external set of tokens, it checks that all +// terminals have a defined conversion to some pattern. Otherwise, +// it collects all terminals into the `all_literals` set for later use. + +struct Validator<'grammar> { + grammar: &'grammar Grammar, + mode: TokenMode, +} + +enum TokenMode { + /// If there is an `extern { ... }` section that defines + /// conversions of the form `TERMINAL => PATTERN`, then this is a + /// set of those terminals. These are the only terminals that the + /// user should be using. + Extern { conversions: Set }, + + /// Otherwise, we are synthesizing the tokenizer. In that case, + /// `match_block` summarizes the data from the `match { ... }` + /// section, if any. If there was no `match` section, or the + /// section contains a wildcard, the user can also use additional + /// terminals in the grammar. + Internal { match_block: MatchBlock }, +} + +/// Data summarizing the `match { }` block, along with any literals we +/// scraped up. +#[derive(Default)] +struct MatchBlock { + /// This map stores the `match { }` entries. If `match_catch_all` + /// is true, then we will grow this set with "identity mappings" + /// for new literals that we find. + match_entries: Vec, + + /// The names of all terminals the user can legally type. If + /// `match_catch_all` is true, then if we encounter additional + /// terminal literals in the grammar, we will add them to this + /// set. + match_user_names: Set, + + /// For each terminal literal that we have to match, the span + /// where it appeared in user's source. This can either be in the + /// `match { }` section or else in the grammar somewhere (if added + /// due to a catch-all, or there is no match section). + spans: Map, + + /// True if we should permit unrecognized literals to be used. + catch_all: bool, +} + +impl MatchBlock { + /// Creates a `MatchBlock` by reading the data out of the `match { + /// ... }` block that the user provided (if any). + fn new(opt_match_token: Option<&MatchToken>) -> NormResult { + let mut match_block = Self::default(); + if let Some(match_token) = opt_match_token { + for (idx, mc) in match_token.contents.iter().enumerate() { + let precedence = &match_token.contents.len() - idx; + for item in &mc.items { + match *item { + MatchItem::Unmapped(ref sym, span) => { + match_block.add_match_entry( + precedence, + sym.clone(), + TerminalString::Literal(sym.clone()), + span, + )?; + } + MatchItem::Mapped(ref sym, ref user, span) => { + match_block.add_match_entry( + precedence, + sym.clone(), + user.clone(), + span, + )?; + } + MatchItem::CatchAll(_) => { + match_block.catch_all = true; + } + } + } + } + } else { + // no match block is equivalent to `match { _ }` + match_block.catch_all = true; + } + Ok(match_block) + } + + fn add_match_entry( + &mut self, + match_group_precedence: usize, + sym: TerminalLiteral, + user_name: TerminalString, + span: Span, + ) -> NormResult<()> { + if let Some(_old_span) = self.spans.insert(sym.clone(), span) { + return_err!(span, "multiple match entries for `{}`", sym); + } + + // NB: It's legal for multiple regex to produce same terminal. + self.match_user_names.insert(user_name.clone()); + + self.match_entries.push(MatchEntry { + precedence: match_group_precedence * 2 + sym.base_precedence(), + match_literal: sym, + user_name: user_name, + }); + Ok(()) + } + + fn add_literal_from_grammar(&mut self, sym: TerminalLiteral, span: Span) -> NormResult<()> { + // Already saw this literal, maybe in a match entry, maybe in the grammar. + if self.match_user_names + .contains(&TerminalString::Literal(sym.clone())) + { + return Ok(()); + } + + if !self.catch_all { + return_err!( + span, + "terminal `{}` does not have a match mapping defined for it", + sym + ); + } + + self.match_user_names + .insert(TerminalString::Literal(sym.clone())); + + self.match_entries.push(MatchEntry { + precedence: sym.base_precedence(), + match_literal: sym.clone(), + user_name: TerminalString::Literal(sym.clone()), + }); + + self.spans.insert(sym, span); + + Ok(()) + } +} + +impl<'grammar> Validator<'grammar> { + fn validate(&mut self) -> NormResult<()> { + for item in &self.grammar.items { + match *item { + GrammarItem::Use(..) => {} + GrammarItem::MatchToken(..) => {} + GrammarItem::ExternToken(_) => {} + GrammarItem::InternToken(_) => {} + GrammarItem::Nonterminal(ref data) => for alternative in &data.alternatives { + try!(self.validate_alternative(alternative)); + }, + } + } + Ok(()) + } + + fn validate_alternative(&mut self, alternative: &Alternative) -> NormResult<()> { + assert!(alternative.condition.is_none()); // macro expansion should have removed these + try!(self.validate_expr(&alternative.expr)); + Ok(()) + } + + fn validate_expr(&mut self, expr: &ExprSymbol) -> NormResult<()> { + for symbol in &expr.symbols { + try!(self.validate_symbol(symbol)); + } + Ok(()) + } + + fn validate_symbol(&mut self, symbol: &Symbol) -> NormResult<()> { + match symbol.kind { + SymbolKind::Expr(ref expr) => { + try!(self.validate_expr(expr)); + } + SymbolKind::Terminal(ref term) => { + try!(self.validate_terminal(symbol.span, term)); + } + SymbolKind::Nonterminal(_) => {} + SymbolKind::Repeat(ref repeat) => { + try!(self.validate_symbol(&repeat.symbol)); + } + SymbolKind::Choose(ref sym) | SymbolKind::Name(_, ref sym) => { + try!(self.validate_symbol(sym)); + } + SymbolKind::Lookahead | SymbolKind::Lookbehind | SymbolKind::Error => {} + SymbolKind::AmbiguousId(ref id) => { + panic!("ambiguous id `{}` encountered after name resolution", id) + } + SymbolKind::Macro(..) => { + panic!("macro not removed: {:?}", symbol); + } + } + + Ok(()) + } + + fn validate_terminal(&mut self, span: Span, term: &TerminalString) -> NormResult<()> { + match self.mode { + // If there is an extern token definition, validate that + // this terminal has a defined conversion. + TokenMode::Extern { ref conversions } => { + if !conversions.contains(term) { + return_err!( + span, + "terminal `{}` does not have a pattern defined for it", + term + ); + } + } + + // If there is no extern token definition, then collect + // the terminal literals ("class", r"[a-z]+") into a set. + TokenMode::Internal { + ref mut match_block, + } => { + match *term { + TerminalString::Bare(_) => assert!( + match_block.match_user_names.contains(term), + "bare terminal without match entry: {}", + term + ), + + TerminalString::Literal(ref l) => { + match_block.add_literal_from_grammar(l.clone(), span)? + } + + // Error is a builtin terminal that always exists + TerminalString::Error => (), + } + } + } + + Ok(()) + } +} + +/////////////////////////////////////////////////////////////////////////// +// Construction phase -- if we are constructing a tokenizer, this +// phase builds up an internal token DFA. + +fn construct(grammar: &mut Grammar, match_block: MatchBlock) -> NormResult<()> { + let MatchBlock { + mut match_entries, + spans, + .. + } = match_block; + + // Sort match entries by order of increasing precedence. + match_entries.sort(); + + // Build up two vectors, one of parsed regular expressions and + // one of precedences, that are parallel with `literals`. + let mut regexs = Vec::with_capacity(match_entries.len()); + let mut precedences = Vec::with_capacity(match_entries.len()); + try!({ + for match_entry in &match_entries { + precedences.push(Precedence(match_entry.precedence)); + match match_entry.match_literal { + TerminalLiteral::Quoted(ref s) => { + regexs.push(re::parse_literal(&s)); + } + TerminalLiteral::Regex(ref s) => { + match re::parse_regex(&s) { + Ok(regex) => regexs.push(regex), + Err(error) => { + let literal_span = spans[&match_entry.match_literal]; + // FIXME -- take offset into account for + // span; this requires knowing how many # + // the user used, which we do not track + return_err!(literal_span, "invalid regular expression: {}", error); + } + } + } + } + } + Ok(()) + }); + + let dfa = match dfa::build_dfa(®exs, &precedences) { + Ok(dfa) => dfa, + Err(DFAConstructionError::NFAConstructionError { index, error }) => { + let feature = match error { + NamedCaptures => r#"named captures (`(?P...)`)"#, + NonGreedy => r#""non-greedy" repetitions (`*?` or `+?`)"#, + WordBoundary => r#"word boundaries (`\b` or `\B`)"#, + LineBoundary => r#"line boundaries (`^` or `$`)"#, + TextBoundary => r#"text boundaries (`^` or `$`)"#, + ByteRegex => r#"byte-based matches"#, + }; + let literal = &match_entries[index.index()].match_literal; + return_err!( + spans[literal], + "{} are not supported in regular expressions", + feature + ) + } + Err(DFAConstructionError::Ambiguity { match0, match1 }) => { + let literal0 = &match_entries[match0.index()].match_literal; + let literal1 = &match_entries[match1.index()].match_literal; + // FIXME(#88) -- it'd be nice to give an example here + return_err!( + spans[literal0], + "ambiguity detected between the terminal `{}` and the terminal `{}`", + literal0, + literal1 + ) + } + }; + + grammar.items.push(GrammarItem::InternToken(InternToken { + match_entries: match_entries, + dfa: dfa, + })); + + // we need to inject a `'input` lifetime and `input: &'input str` parameter as well: + + let input_lifetime = Atom::from(INPUT_LIFETIME); + for parameter in &grammar.type_parameters { + match *parameter { + TypeParameter::Lifetime(ref i) if *i == input_lifetime => { + return_err!( + grammar.span, + "since there is no external token enum specified, \ + the `'input` lifetime is implicit and cannot be declared" + ); + } + _ => {} + } + } + + let input_parameter = Atom::from(INPUT_PARAMETER); + for parameter in &grammar.parameters { + if parameter.name == input_parameter { + return_err!( + grammar.span, + "since there is no external token enum specified, \ + the `input` parameter is implicit and cannot be declared" + ); + } + } + + grammar + .type_parameters + .insert(0, TypeParameter::Lifetime(input_lifetime.clone())); + + let parameter = Parameter { + name: input_parameter, + ty: TypeRef::Ref { + lifetime: Some(input_lifetime), + mutable: false, + referent: Box::new(TypeRef::Id(Atom::from("str"))), + }, + }; + grammar.parameters.push(parameter); + + Ok(()) +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/token_check/test.rs b/third_party/rust/lalrpop-snap/src/normalize/token_check/test.rs new file mode 100644 index 000000000000..6badfca7e020 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/token_check/test.rs @@ -0,0 +1,203 @@ +use parser; +use normalize::resolve::resolve; +use normalize::NormResult; +use lexer::dfa::interpret; +use grammar::parse_tree::Grammar; +use test_util; + +fn validate_grammar(grammar: &str) -> NormResult { + let parsed_grammar = parser::parse_grammar(&grammar).expect("parse grammar"); + let parsed_grammar = resolve(parsed_grammar).expect("resolve"); + super::validate(parsed_grammar) +} + +fn check_err(expected_err: &str, grammar: &str, span: &str) { + let err = validate_grammar(&grammar).unwrap_err(); + test_util::check_norm_err(expected_err, span, err); +} + +fn check_intern_token(grammar: &str, expected_tokens: Vec<(&'static str, &'static str)>) { + let parsed_grammar = validate_grammar(&grammar).expect("validate"); + let intern_token = parsed_grammar.intern_token().expect("intern_token"); + println!("intern_token: {:?}", intern_token); + for (input, expected_user_name) in expected_tokens { + let actual_user_name = + interpret::interpret(&intern_token.dfa, input).map(|(index, text)| { + let user_name = &intern_token.match_entries[index.index()].user_name; + (user_name.clone(), text) + }); + let actual_user_name = format!("{:?}", actual_user_name); + if expected_user_name != actual_user_name { + panic!( + "input `{}` matched `{}` but we expected `{}`", + input, actual_user_name, expected_user_name + ); + } + } +} + +#[test] +fn unknown_terminal() { + check_err( + r#"terminal `"\+"` does not have a pattern defined for it"#, + r#"grammar; extern { enum Term { } } X = X "+";"#, + r#" ~~~ "#, + ); +} + +#[test] +fn unknown_id_terminal() { + check_err( + r#"terminal `"foo"` does not have a pattern defined for it"#, + r#"grammar; extern { enum Term { } } X = X "foo";"#, + r#" ~~~~~ "#, + ); +} + +#[test] +fn tick_input_lifetime_already_declared() { + check_err( + r#".*the `'input` lifetime is implicit and cannot be declared"#, + r#"grammar<'input>; X = X "foo";"#, + r#"~~~~~~~ "#, + ); +} + +#[test] +fn input_parameter_already_declared() { + check_err( + r#".*the `input` parameter is implicit and cannot be declared"#, + r#"grammar(input:u32); X = X "foo";"#, + r#"~~~~~~~ "#, + ); +} + +#[test] +fn invalid_regular_expression_unterminated_group() { + check_err( + r#"Unclosed parenthesis"#, + r#"grammar; X = X r"(123";"#, + r#" ~~~~~~~ "#, + ); +} + +#[test] +fn quoted_literals() { + check_intern_token( + r#"grammar; X = X "+" "-" "foo" "(" ")";"#, + vec![ + ("+", r#"Some(("+", "+"))"#), + ("-", r#"Some(("-", "-"))"#), + ("(", r#"Some(("(", "("))"#), + (")", r#"Some((")", ")"))"#), + ("foo", r#"Some(("foo", "foo"))"#), + ("<", r#"None"#), + ], + ); +} + +#[test] +fn regex_literals() { + check_intern_token( + r#"grammar; X = X r"[a-z]+" r"[0-9]+";"#, + vec![ + ("a", r##"Some((r#"[a-z]+"#, "a"))"##), + ("def", r##"Some((r#"[a-z]+"#, "def"))"##), + ("1", r##"Some((r#"[0-9]+"#, "1"))"##), + ("9123456", r##"Some((r#"[0-9]+"#, "9123456"))"##), + ], + ); +} + +/// Basic test for match mappings. +#[test] +fn match_mappings() { + check_intern_token( + r#"grammar; match { r"(?i)begin" => "BEGIN" } else { "abc" => ALPHA } X = "BEGIN" ALPHA;"#, + vec![ + ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), + ("begin", r##"Some(("BEGIN", "begin"))"##), + ("abc", r#"Some((ALPHA, "abc"))"#), + ], + ); +} + +/// Match mappings, exercising precedence. Here the ID regex *would* +/// be ambiguous with the begin regex. +#[test] +fn match_precedence() { + check_intern_token( + r#"grammar; match { r"(?i)begin" => "BEGIN" } else { r"\w+" => ID } X = ();"#, + vec![ + ("BEGIN", r##"Some(("BEGIN", "BEGIN"))"##), + ("begin", r##"Some(("BEGIN", "begin"))"##), + ("abc", r#"Some((ID, "abc"))"#), + ], + ); +} + +/// Test that, without a `catch-all`, using unrecognized literals is an error. +#[test] +fn invalid_match_literal() { + check_err( + r#"terminal `"foo"` does not have a match mapping defined for it"#, + r#"grammar; match { r"(?i)begin" => "BEGIN" } X = "foo";"#, + r#" ~~~~~ "#, + ); +} + +/// Test that, without a `catch-all`, using unrecognized literals is an error. +#[test] +fn invalid_match_regex_literal() { + check_err( + r##"terminal `r#"foo"#` does not have a match mapping defined for it"##, + r#"grammar; match { r"(?i)begin" => "BEGIN" } X = r"foo";"#, + r#" ~~~~~~ "#, + ); +} + +/// Test that, with a catch-all, the previous two examples work. +#[test] +fn match_catch_all() { + let grammar = r#"grammar; match { r"(?i)begin" => "BEGIN", _ } X = { "foo", r"foo" };"#; + assert!(validate_grammar(&grammar).is_ok()) +} + +#[test] +fn complex_match() { + let grammar = r##" + grammar; + match { + "abc" => "ABC", + r"(?i)begin" => BEGIN + } + + pub Query: String = { + "ABC" BEGIN => String::from("Success") + }; +"##; + assert!(validate_grammar(&grammar).is_ok()) +} + +/// Test that overlapping regular expressions are still forbidden within one level +/// of a match declaration. +#[test] +fn ambiguity_within_match() { + check_err( + r##"ambiguity detected between the terminal `r#"b"#` and the terminal `r#"\(\?i\)b"#`"##, + r#"grammar; match { r"(?i)b" => "B", r"b" => "b" }"#, + r#" ~~~~~~~~~~~~ "#, + ); +} + +/// Test that using the **exact same regular expression** twice is +/// forbidden, even across multiple levels of the match expression. +/// No good reason to do that. +#[test] +fn same_literal_twice() { + check_err( + r##"multiple match entries for `r#"\(\?i\)b"#`"##, + r#"grammar; match { r"(?i)b" => "B" } else { r"(?i)b" => "b" }"#, + r#" ~~~~~~~~~~~~~~~~ "#, + ); +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/tyinfer/mod.rs b/third_party/rust/lalrpop-snap/src/normalize/tyinfer/mod.rs new file mode 100644 index 000000000000..7af76515d0bc --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/tyinfer/mod.rs @@ -0,0 +1,356 @@ +use super::{NormError, NormResult}; +use super::norm_util::{self, AlternativeAction, Symbols}; + +use std::collections::{HashMap, HashSet}; +use grammar::consts::{ERROR, INPUT_LIFETIME, LOCATION}; +use grammar::parse_tree::{ActionKind, Alternative, Grammar, NonterminalData, NonterminalString, + Path, Span, SymbolKind, TypeParameter, TypeRef}; +use grammar::repr::{NominalTypeRepr, TypeRepr, Types}; +use string_cache::DefaultAtom as Atom; + +#[cfg(test)] +mod test; + +pub fn infer_types(grammar: &Grammar) -> NormResult { + let inferencer = try!(TypeInferencer::new(&grammar)); + inferencer.infer_types() +} + +struct TypeInferencer<'grammar> { + stack: Vec, + nonterminals: HashMap>, + types: Types, + type_parameters: HashSet, +} + +#[derive(Copy, Clone)] +struct NT<'grammar> { + span: Span, + type_decl: &'grammar Option, + alternatives: &'grammar Vec, +} + +impl<'grammar> TypeInferencer<'grammar> { + fn new(grammar: &'grammar Grammar) -> NormResult> { + let types = TypeInferencer::make_types(grammar); + + let nonterminals = grammar + .items + .iter() + .filter_map(|item| item.as_nonterminal()) + .map(|data| { + assert!(!data.is_macro_def()); // normalized away by now + (data.name.clone(), NT::new(data)) + }) + .collect(); + + let type_parameters = grammar + .type_parameters + .iter() + .filter_map(|p| match *p { + TypeParameter::Lifetime(_) => None, + TypeParameter::Id(ref ty) => Some(ty.clone()), + }) + .collect(); + + Ok(TypeInferencer { + stack: vec![], + nonterminals: nonterminals, + types: types, + type_parameters: type_parameters, + }) + } + + fn make_types(grammar: &Grammar) -> Types { + let opt_extern_token = grammar.extern_token(); + + // Determine error type (if any). + let error_type = opt_extern_token.and_then(|extern_token| { + extern_token + .associated_type(Atom::from(ERROR)) + .map(|tr| tr.type_ref.type_repr()) + }); + + // Determine location type and enum type. If using an internal + // token, that's specified by us, not user. + if let Some(intern_token) = grammar.intern_token() { + let loc_type = // usize + TypeRepr::usize(); + let input_str = // &'input str + TypeRepr::Ref { + lifetime: Some(Atom::from(INPUT_LIFETIME)), + mutable: false, + referent: Box::new(TypeRepr::str()) + }; + let enum_type = // Token<'input> + TypeRepr::Nominal(NominalTypeRepr { + path: Path { + absolute: false, + ids: vec![Atom::from("Token")], + }, + types: vec![TypeRepr::Lifetime(Atom::from(INPUT_LIFETIME))] + }); + + let mut types = Types::new(&grammar.prefix, Some(loc_type), error_type, enum_type); + + for match_entry in &intern_token.match_entries { + types.add_term_type(match_entry.user_name.clone(), input_str.clone()); + } + + types + } else { + let extern_token = opt_extern_token.unwrap(); + let loc_type = extern_token + .associated_type(Atom::from(LOCATION)) + .map(|tr| tr.type_ref.type_repr()); + let enum_type = extern_token + .enum_token + .as_ref() + .unwrap() + .type_name + .type_repr(); + let mut types = Types::new(&grammar.prefix, loc_type, error_type, enum_type); + + // For each defined conversion, figure out the type of the + // terminal and enter it into `types` by hand if it is not the + // default. For terminals with custom types, the user should + // have one or more bindings in the pattern -- if more than + // one, make a tuple. + // + // e.g. "(" => Lparen(..) ==> no custom type + // "Num" => Num() ==> custom type is u32 + // "Fraction" => Real(,) ==> custom type is (u32, u32) + for conversion in grammar + .enum_token() + .into_iter() + .flat_map(|et| &et.conversions) + { + let mut tys = Vec::new(); + conversion + .to + .for_each_binding(&mut |ty| tys.push(ty.type_repr())); + if tys.is_empty() { + continue; + } + let ty = maybe_tuple(tys); + types.add_term_type(conversion.from.clone(), ty); + } + + types + } + } + + fn infer_types(mut self) -> NormResult { + let ids: Vec = + self.nonterminals.iter().map(|(id, _)| id.clone()).collect(); + + for id in ids { + try!(self.nonterminal_type(&id)); + debug_assert!(self.types.lookup_nonterminal_type(&id).is_some()); + } + + Ok(self.types) + } + + fn nonterminal_type(&mut self, id: &NonterminalString) -> NormResult { + if let Some(repr) = self.types.lookup_nonterminal_type(id) { + return Ok(repr.clone()); + } + + let nt = self.nonterminals[&id]; + if self.stack.contains(&id) { + return_err!( + nt.span, + "cannot infer type of `{}` because it references itself", + id + ); + } + + let ty = try!(self.push(id, |this| { + if let &Some(ref type_decl) = nt.type_decl { + return this.type_ref(type_decl); + } + + // Try to compute the types of all alternatives; note that + // some may result in an error. Don't report these errors + // (yet). + let mut alternative_types = vec![]; + let mut alternative_errors = vec![]; + for alt in nt.alternatives.iter() { + match this.alternative_type(alt) { + Ok(t) => alternative_types.push(t), + Err(e) => alternative_errors.push(e), + } + } + + // if it never succeeded, report first error + if alternative_types.is_empty() { + match alternative_errors.into_iter().next() { + Some(err) => { + return Err(err); + } + None => { + // if nothing succeeded, and nothing errored, + // must have been nothing to start with + return_err!( + nt.span, + "nonterminal `{}` has no alternatives and hence parse cannot succeed", + id + ); + } + } + } + + // otherwise, check that all the cases where we had success agree + for ((ty, alt), i) in alternative_types[1..] + .iter() + .zip(&nt.alternatives[1..]) + .zip(1..) + { + if &alternative_types[0] != ty { + return_err!( + alt.span, + "type of alternative #{} is `{}`, \ + but type of first alternative is `{}`", + i + 1, + ty, + alternative_types[0] + ); + } + } + + // and use that type + Ok(alternative_types.pop().unwrap()) + })); + + self.types.add_type(id.clone(), ty.clone()); + Ok(ty) + } + + fn push(&mut self, id: &NonterminalString, f: F) -> NormResult + where + F: FnOnce(&mut TypeInferencer) -> NormResult, + { + self.stack.push(id.clone()); + let r = f(self); + assert_eq!(self.stack.pop().unwrap(), *id); + r + } + + fn type_ref(&mut self, type_ref: &TypeRef) -> NormResult { + match *type_ref { + TypeRef::Tuple(ref types) => { + let types = try! { + types.iter().map(|t| self.type_ref(t)).collect() + }; + Ok(TypeRepr::Tuple(types)) + } + TypeRef::Nominal { + ref path, + ref types, + } => { + if path.ids.len() == 2 && self.type_parameters.contains(&path.ids[0]) { + return Ok(TypeRepr::Associated { + type_parameter: path.ids[0].clone(), + id: path.ids[1].clone(), + }); + } + + let types = try! { + types.iter().map(|t| self.type_ref(t)).collect() + }; + Ok(TypeRepr::Nominal(NominalTypeRepr { + path: path.clone(), + types: types, + })) + } + TypeRef::Lifetime(ref id) => Ok(TypeRepr::Lifetime(id.clone())), + TypeRef::Id(ref id) => Ok(TypeRepr::Nominal(NominalTypeRepr { + path: Path::from_id(id.clone()), + types: vec![], + })), + TypeRef::Ref { + ref lifetime, + mutable, + ref referent, + } => Ok(TypeRepr::Ref { + lifetime: lifetime.clone(), + mutable: mutable, + referent: Box::new(try!(self.type_ref(referent))), + }), + TypeRef::OfSymbol(ref symbol) => self.symbol_type(symbol), + } + } + + fn alternative_type(&mut self, alt: &Alternative) -> NormResult { + match norm_util::analyze_action(alt) { + AlternativeAction::User(&ActionKind::User(_)) + | AlternativeAction::User(&ActionKind::Fallible(_)) => { + return_err!( + alt.span, + "cannot infer types if there is custom action code" + ); + } + + AlternativeAction::User(&ActionKind::Lookahead) + | AlternativeAction::User(&ActionKind::Lookbehind) => { + Ok(self.types.opt_terminal_loc_type().unwrap().clone()) + } + + AlternativeAction::Default(Symbols::Named(ref syms)) => { + return_err!( + alt.span, + "cannot infer types in the presence of named symbols like `{}:{}`", + syms[0].1, + syms[0].2 + ); + } + + AlternativeAction::Default(Symbols::Anon(syms)) => { + let symbol_types: Vec = try! { + syms.iter() + .map(|&(_, sym)| self.symbol_type(&sym.kind)) + .collect() + }; + Ok(maybe_tuple(symbol_types)) + } + } + } + + fn symbol_type(&mut self, symbol: &SymbolKind) -> NormResult { + match *symbol { + SymbolKind::Terminal(ref id) => Ok(self.types.terminal_type(id).clone()), + SymbolKind::Nonterminal(ref id) => self.nonterminal_type(id), + SymbolKind::Choose(ref s) => self.symbol_type(&s.kind), + SymbolKind::Name(_, ref s) => self.symbol_type(&s.kind), + SymbolKind::Error => Ok(self.types.error_recovery_type().clone()), + + SymbolKind::Repeat(..) + | SymbolKind::Expr(..) + | SymbolKind::Macro(..) + | SymbolKind::AmbiguousId(..) + | SymbolKind::Lookahead + | SymbolKind::Lookbehind => { + unreachable!("symbol `{:?}` should have been expanded away", symbol) + } + } + } +} + +impl<'grammar> NT<'grammar> { + fn new(data: &'grammar NonterminalData) -> NT<'grammar> { + NT { + span: data.span, + type_decl: &data.type_decl, + alternatives: &data.alternatives, + } + } +} + +fn maybe_tuple(v: Vec) -> TypeRepr { + if v.len() == 1 { + v.into_iter().next().unwrap() + } else { + TypeRepr::Tuple(v) + } +} diff --git a/third_party/rust/lalrpop-snap/src/normalize/tyinfer/test.rs b/third_party/rust/lalrpop-snap/src/normalize/tyinfer/test.rs new file mode 100644 index 000000000000..d57c1be262a8 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/normalize/tyinfer/test.rs @@ -0,0 +1,243 @@ +use string_cache::DefaultAtom as Atom; +use parser; +use normalize::macro_expand::expand_macros; +use normalize::token_check; +use normalize::tyinfer::infer_types; +use grammar::parse_tree::NonterminalString; +use grammar::repr::TypeRepr; + +fn type_repr(s: &str) -> TypeRepr { + let type_ref = parser::parse_type_ref(s).unwrap(); + return type_ref.type_repr(); +} + +fn compare(g1: &str, expected: Vec<(&'static str, &'static str)>) { + let grammar = parser::parse_grammar(g1).unwrap(); + let grammar = expand_macros(grammar).unwrap(); + let grammar = token_check::validate(grammar).unwrap(); + let types = infer_types(&grammar).unwrap(); + + println!("types table: {:?}", types); + + for (nt_id, nt_type) in expected { + let id = NonterminalString(Atom::from(nt_id)); + let ty = type_repr(nt_type); + println!("expected type of {:?} is {:?}", id, ty); + assert_eq!(types.nonterminal_type(&id), &ty); + } +} + +#[test] +fn test_pairs_and_tokens() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } + X = Y Z; + Y: Foo = "Hi"; + Z = "Ho"; +"#, + vec![("X", "(Foo, Tok)"), ("Y", "Foo"), ("Z", "Tok")], + ) +} + +#[test] +fn test_cycle_direct() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..), "Ho" => Ho(..) } } + X = { + X Y, + => vec![<>] + }; + Y = "Hi"; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn test_cycle_indirect() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { } } + A = B; + B = C; + C = D; + D = A; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn test_macro_expansion() { + compare( + r#" +grammar; + extern { enum Tok { "Id" => Id(..) } } + Two: (X, X) = X X; + Ids = Two<"Id">; +"#, + vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], + ) +} + +#[test] +fn test_macro_expansion_infer() { + compare( + r#" +grammar; + extern { enum Tok { "Id" => Id(..) } } + Two = X X; + Ids = Two<"Id">; +"#, + vec![("Ids", "(Tok, Tok)"), (r#"Two<"Id">"#, "(Tok, Tok)")], + ) +} + +#[test] +fn test_type_question() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..) } } + X = Y?; + Y = "Hi"; +"#, + vec![("X", "::std::option::Option"), ("Y", "Tok")], + ) +} + +#[test] +fn test_star_plus_question() { + compare( + r#" +grammar; + extern { enum Tok { "Hi" => Hi(..) } } + A = Z*; + X = "Hi"*; + Y = "Hi"+; + Z = "Hi"?; +"#, + vec![ + ("A", "::std::vec::Vec<::std::option::Option>"), + ("X", "::std::vec::Vec"), + ("Y", "::std::vec::Vec"), + ("Z", "::std::option::Option"), + ], + ) +} + +#[test] +fn test_lookahead() { + compare( + r#" +grammar; + extern { type Location = usize; enum Tok { } } + A = @L; +"#, + vec![("A", "usize")], + ) +} + +#[test] +fn test_spanned_macro() { + compare( + r#" + grammar; + extern { type Location = usize; enum Tok { "Foo" => Foo(..) } } + A = Spanned<"Foo">; + Spanned = { + @L T @R + }; +"#, + vec![("A", "(usize, Tok, usize)")], + ) +} + +#[test] +fn test_action() { + compare( + r#" +grammar; + extern { enum Tok { "+" => .., "foo" => .. } } + + X = { + Y, + "+" => l + r + }; + + Y: i32 = "foo" => 22; +"#, + vec![("X", "i32"), ("Y", "i32")], + ) +} + +#[test] +fn test_inconsistent_action() { + let grammar = parser::parse_grammar( + r#" +grammar; + extern { enum Tok { "+" => .., "foo" => .., "bar" => .. } } + + X = { + Y, + Z, + "+" => l + r + }; + + Y: i32 = "foo" => 22; + + Z: u32 = "bar" => 22; +"#, + ).unwrap(); + + let actual = expand_macros(grammar).unwrap(); + assert!(infer_types(&actual).is_err()); +} + +#[test] +fn custom_token() { + compare( + r#" +grammar; +extern { enum Tok { N => N() } } +A = N; +"#, + vec![("A", "u32")], + ) +} + +#[test] +fn intern_token() { + compare( + r#" +grammar; + Z = @L "Ho" @R; +"#, + vec![("Z", "(usize, &'input str, usize)")], + ) +} + +#[test] +fn error() { + compare( + r#" +grammar; + Z = !; +"#, + vec![ + ( + "Z", + "__lalrpop_util::ErrorRecovery, &'static str>", + ), + ], + ) +} diff --git a/third_party/rust/lalrpop-snap/src/parser/lrgrammar.rs b/third_party/rust/lalrpop-snap/src/parser/lrgrammar.rs new file mode 100644 index 000000000000..c4b8e32e466b --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/parser/lrgrammar.rs @@ -0,0 +1,89292 @@ +// auto-generated: "lalrpop-snap 0.15.1" +use string_cache::DefaultAtom as Atom; +use grammar::parse_tree::*; +use grammar::pattern::*; +use std::iter::once; +use tok::{self, Tok}; +use util::strip; +#[allow(unused_extern_crates)] +extern crate lalrpop_util as ___lalrpop_util; + +#[cfg_attr(rustfmt, rustfmt_skip)] +mod ___parse___Grammar { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] + + use string_cache::DefaultAtom as Atom; + use grammar::parse_tree::*; + use grammar::pattern::*; + use std::iter::once; + use tok::{self, Tok}; + use util::strip; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as ___lalrpop_util; + use super::___ToTriple; + #[allow(dead_code)] + pub enum ___Symbol<'input> + { + Variant0(Tok<'input>), + Variant1(&'input str), + Variant2(::std::option::Option>), + Variant3(TypeRef), + Variant4(::std::option::Option), + Variant5(Vec>), + Variant6(::std::option::Option>>), + Variant7(Condition), + Variant8(::std::option::Option), + Variant9(()), + Variant10(Alternative), + Variant11(::std::vec::Vec), + Variant12(Conversion), + Variant13(::std::vec::Vec), + Variant14(FieldPattern), + Variant15(::std::vec::Vec>), + Variant16(Parameter), + Variant17(::std::vec::Vec), + Variant18(WhereClause), + Variant19(::std::vec::Vec>), + Variant20(Atom), + Variant21(::std::vec::Vec), + Variant22(MatchItem), + Variant23(::std::vec::Vec), + Variant24(NonterminalString), + Variant25(::std::vec::Vec), + Variant26(Pattern), + Variant27(::std::vec::Vec>), + Variant28(Symbol), + Variant29(::std::vec::Vec), + Variant30(TypeBound), + Variant31(::std::vec::Vec>), + Variant32(TypeBoundParameter), + Variant33(::std::vec::Vec>), + Variant34(TypeParameter), + Variant35(::std::vec::Vec), + Variant36(::std::vec::Vec), + Variant37(usize), + Variant38(ActionKind), + Variant39(::std::option::Option), + Variant40(::std::option::Option), + Variant41(Vec), + Variant42(Annotation), + Variant43(::std::vec::Vec), + Variant44(AssociatedType), + Variant45(::std::vec::Vec), + Variant46(Vec), + Variant47(Vec), + Variant48(Vec>), + Variant49(Vec), + Variant50(Vec), + Variant51(Vec), + Variant52(Vec>), + Variant53(Vec), + Variant54(Vec), + Variant55(Vec), + Variant56(ConditionOp), + Variant57(::std::option::Option), + Variant58(EnumToken), + Variant59(ExprSymbol), + Variant60(GrammarItem), + Variant61(::std::option::Option>), + Variant62(::std::option::Option>), + Variant63(Grammar), + Variant64(::std::vec::Vec), + Variant65(::std::option::Option), + Variant66(::std::option::Option>), + Variant67(::std::option::Option>), + Variant68(::std::option::Option>), + Variant69(::std::option::Option>>), + Variant70(::std::option::Option), + Variant71(MatchContents), + Variant72(::std::option::Option), + Variant73(TerminalString), + Variant74(TerminalLiteral), + Variant75(MatchToken), + Variant76((NonterminalString, Vec)), + Variant77(::std::option::Option), + Variant78(Path), + Variant79(::std::option::Option>), + Variant80(PatternKind), + Variant81(Vec>), + Variant82(RepeatOp), + Variant83(String), + Variant84(::std::vec::Vec), + Variant85(::std::option::Option), + Variant86(SymbolKind), + Variant87(::std::option::Option>), + Variant88(::std::option::Option>), + Variant89(::std::option::Option), + Variant90(Visibility), + } + const ___ACTION: &'static [i16] = &[ + // State 0 + 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + // State 1 + 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, 0, 0, 0, 0, -425, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + // State 6 + 0, 0, 0, -488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -488, 0, 0, 0, 0, 0, -488, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, -422, -422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -422, 0, 0, 0, 0, 0, -422, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, -125, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 34, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 14 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, -426, -426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -426, 0, 0, 0, 0, 0, -426, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 41, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 18 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, -489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -489, 0, 0, 0, 0, 0, -489, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 46, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, -144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, -485, 0, -485, 0, 0, 0, 0, 0, 0, 0, -485, 0, -485, 0, -485, 0, -485, 0, -485, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 102, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 35 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 107, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 37 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 118, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 44 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, -360, -360, 0, -360, -360, 0, 0, -360, -360, -360, -360, -360, 0, 0, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -360, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, -361, -361, 0, -361, -361, 0, 0, -361, -361, -361, -361, -361, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 0, 0, 0, 0, -139, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, -337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -337, -337, 0, -337, 0, 0, 0, 0, 0, 0, 0, -337, 0, 0, 0, -337, 0, -337, 0, -337, 0, 0, 0, 0, + // State 61 + 0, 0, 0, -341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -341, -341, 0, -341, 0, 0, 0, 0, 0, 0, 0, -341, 0, 0, 0, -341, 0, -341, 0, -341, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 63 + 0, 0, 0, -336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -336, -336, 0, -336, 0, 0, 0, 0, 0, 0, 0, -336, 0, 0, 0, -336, 0, -336, 0, -336, 0, 0, 0, 0, + // State 64 + 0, 0, 0, -374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -374, -374, 0, -374, 0, 0, 0, 0, 0, 140, 0, -374, 0, 0, 0, -374, 0, -374, 0, -374, 0, 0, 0, 0, + // State 65 + 0, 0, 0, -338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -338, -338, 0, -338, 0, 0, 0, 0, 0, 0, 0, -338, 0, 0, 0, -338, 0, -338, 0, -338, 0, 0, 0, 0, + // State 66 + 0, 0, 0, -335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -335, -335, 0, -335, 0, 0, 0, 0, 0, 0, 0, -335, 0, 0, 0, -335, 0, -335, 0, -335, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -491, -491, 0, -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, -362, 0, -362, -362, 0, 0, -362, -362, 0, 0, -362, -362, -362, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, -146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, -389, -389, 0, -389, -389, 0, 0, -389, 157, -389, -389, -389, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, -478, 0, -478, -478, 0, 0, -478, 0, -478, 159, -478, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 87, 0, 88, 89, -176, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 100 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 206, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 103 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 112 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 113 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 114 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 120 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 124 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 125 + 0, 0, 0, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, -121, 0, -121, 0, 0, 0, 0, 0, 0, 0, 0, 0, -121, 0, 0, 0, -121, 0, 0, 0, 0, 0, 0, + // State 126 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 127 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 128 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 129 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 130 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 133 + 0, 0, 0, 0, 0, 0, 0, -141, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 134 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, + // State 135 + 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 136 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 137 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 138 + 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, -342, 0, -342, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, -342, 0, -342, 0, -342, 0, 0, 0, 0, + // State 139 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, + // State 140 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 142 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -382, 0, 0, 0, -382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -383, 0, 0, 0, -383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 144 + 0, -384, -384, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, -384, 0, 0, 0, -384, -384, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, + // State 145 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 146 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, + // State 147 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 179, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, + // State 148 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 149 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 150 + 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, + // State 151 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 152 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, -145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 153 + 0, 0, 0, 0, 0, 0, -390, -390, 0, -390, -390, 0, 0, -390, 262, -390, -390, -390, 0, 0, 0, 0, 0, -390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -390, 0, 0, + // State 154 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 155 + 0, 0, 0, -41, 0, -41, -41, 0, 0, 0, 0, 0, 0, 0, -41, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, -41, -41, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 156 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 157 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, 0, 0, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 158 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 159 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 90, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 160 + -443, 0, 0, -443, 0, 0, -443, -443, -443, -443, -443, 0, 0, 0, 0, -443, -443, 0, 0, -443, -443, -443, -443, -443, -443, -443, -443, 0, -443, -443, 0, -443, -443, -443, 0, 0, 0, 0, 0, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, 0, -443, 0, + // State 161 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 162 + -417, 0, 0, -417, 0, 0, -417, -417, -417, -417, -417, 0, 0, 0, 0, -417, -417, 0, 0, -417, -417, -417, -417, -417, -417, -417, -417, 0, -417, -417, 0, -417, -417, -417, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, -417, 0, + // State 163 + -441, 0, 0, -441, 0, 0, -441, -441, -441, -441, -441, 0, 0, 0, 0, -441, -441, 0, 0, -441, -441, -441, -441, -441, -441, -441, -441, 0, -441, -441, 0, -441, -441, -441, 0, 0, 0, 0, 0, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, 0, -441, 0, + // State 164 + -416, 0, 0, -416, 0, 0, -416, -416, -416, -416, -416, 0, 0, 0, 0, -416, -416, 0, 0, -416, -416, -416, -416, -416, -416, -416, -416, 0, -416, -416, 0, -416, -416, -416, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, -416, 0, + // State 165 + -415, 0, 0, -415, 0, 0, -415, -415, -415, -415, -415, 0, 0, 0, 0, -415, -415, 0, 0, -415, -415, -415, -415, -415, -415, -415, -415, 0, -415, -415, 0, -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, -415, 0, + // State 166 + 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 167 + -430, 0, 0, -430, 0, 0, -430, -430, 282, 283, -430, 0, 0, 0, 0, -430, -430, 0, 0, -430, -430, -430, -430, -430, 284, -430, -430, 0, -430, -430, 0, -430, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, -430, 0, 0, 0, 0, 0, 0, 0, -430, 0, + // State 168 + -435, 0, 0, -435, 0, 0, -435, -435, -435, -435, -435, 0, 0, 0, 0, -435, -435, 0, 0, -435, -435, -435, -435, -435, -435, -435, -435, 0, -435, -435, 0, -435, -435, -435, 0, 0, 0, 0, 0, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, 0, -435, 0, + // State 169 + -437, 0, 0, -437, 0, 0, -437, -437, -437, -437, -437, 0, 0, 0, 0, -437, -437, 0, 0, -437, -437, -437, -437, -437, -437, -437, -437, 0, -437, -437, 0, -437, -437, -437, 0, 0, 0, 0, 0, 0, 0, 0, -437, 0, 0, 0, 0, 0, 0, 0, -437, 0, + // State 170 + -447, 0, 0, -447, 0, 0, -447, -447, -447, -447, -447, 0, 0, 0, 0, -447, -447, 0, 0, -447, -447, -447, -447, -447, -447, -447, -447, 0, -447, -447, 0, -447, -447, -447, 0, 0, 0, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, 0, -447, 0, + // State 171 + 171, 0, 0, 0, 0, 0, 172, -193, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 172 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 176, 290, 0, 291, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 173 + -445, 0, 0, -445, 0, 0, -445, -445, -445, -445, -445, 0, 0, 0, 0, -445, -445, 0, 0, -445, -445, -445, -445, -445, -445, -445, -445, 0, -445, -445, 0, -445, -445, -445, 0, 0, 0, 0, 0, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, 0, -445, 0, + // State 174 + -446, 0, 0, -446, 0, 0, -446, -446, -446, -446, -446, 0, 0, 0, 0, -446, -446, 0, 0, -446, -446, -446, -446, -446, -446, -446, -446, 0, -446, -446, 0, -446, -446, -446, 0, 0, 0, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, 0, -446, 0, + // State 175 + -192, 0, 0, -192, 0, 0, -192, -192, -192, -192, -192, 0, 0, 0, 0, -192, -192, 0, 0, -192, -192, -192, -192, -192, -192, -192, -192, 0, -192, -192, 0, -192, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, 0, 0, 0, 0, 0, 0, -192, 0, + // State 176 + -442, 0, 0, -442, 0, 0, -442, -442, -442, -442, -442, 0, 0, 0, 0, -442, -442, 0, 0, -442, -442, -442, -442, -442, -442, -442, -442, 0, -442, -442, 0, -442, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, 0, -442, 0, + // State 177 + -418, 0, 0, -418, 0, 0, -418, -418, -418, -418, -418, 0, 0, 0, 0, -418, -418, 0, 0, -418, -418, -418, -418, -418, -418, -418, -418, 0, -418, -418, 0, -418, -418, -418, 0, 0, 0, 0, 0, 0, 0, 0, -418, 0, 0, 0, 0, 0, 0, 0, -418, 0, + // State 178 + -427, 0, 0, -427, 0, 0, -427, -427, -427, -427, -427, 0, 0, 0, 0, -427, -427, 0, 0, -427, -427, -427, -427, -427, -427, -427, -427, 0, -427, -427, 0, -427, -427, -427, 0, 0, 0, 0, 0, 0, 0, 0, -427, 0, 0, 0, 0, 0, 0, 0, -427, 0, + // State 179 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, + // State 180 + 0, 0, 0, 0, 0, 0, 0, -476, 0, -476, -476, 0, 0, -476, 0, -476, 0, -476, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, + // State 181 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 182 + 0, 0, 0, 87, 0, 88, 89, -178, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 183 + 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 184 + 0, 0, 0, 0, 0, 0, 0, -175, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 185 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 186 + 0, 0, 0, 0, 0, 0, -387, -387, 0, -387, -387, 0, 0, -387, 157, -387, -387, -387, 0, 0, 0, 0, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -387, 0, 0, + // State 187 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 188 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 189 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 190 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 191 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 192 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 193 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 194 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 195 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 196 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 197 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 198 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 199 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 200 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 201 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 202 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 203 + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 204 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 205 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 206 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 207 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 208 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 209 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 210 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 211 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 212 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 213 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 214 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 215 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 216 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 217 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 218 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 219 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 220 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 221 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 222 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 223 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 224 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 225 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 226 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 227 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 228 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 229 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 230 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 231 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 232 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 233 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 234 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 235 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 236 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 237 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 238 + 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 239 + 0, 0, 0, 0, 0, 0, 0, -343, 0, 0, -343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 240 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 241 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 179, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, + // State 242 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 243 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 244 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, + // State 245 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, -129, 0, 0, 0, -129, 0, + // State 246 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 362, 0, + // State 247 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 364, 0, + // State 248 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 249 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 250 + 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, -199, 0, -199, 0, -199, 0, 0, 0, 0, + // State 251 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 179, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, + // State 252 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -366, 0, + // State 253 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, + // State 254 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, 0, + // State 255 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -368, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -368, 0, + // State 256 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, + // State 257 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, + // State 258 + 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 259 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 260 + 0, 0, 0, -42, 0, -42, -42, 0, 0, 0, 0, 0, 0, 0, -42, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, -42, -42, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 261 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 262 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 90, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 263 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -410, 0, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 264 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, -407, 0, 0, 0, 0, -407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 265 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 266 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 267 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 268 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 269 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 270 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 271 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, 0, 0, 0, 90, -414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 272 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 273 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -450, -450, 0, 0, 0, 0, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 274 + 0, 0, 0, 0, 0, 0, 380, 0, 0, -458, -458, 0, 0, 0, 0, -458, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 275 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -466, 0, 0, 0, 0, -466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 276 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, -411, 0, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 277 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 278 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, -164, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 279 + 0, 0, 0, 0, 0, 0, 0, -472, 0, -472, -472, 0, 0, -472, 0, -472, 0, -472, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, + // State 280 + -436, 0, 0, -436, 0, 0, -436, -436, -436, -436, -436, 0, 0, 0, 0, -436, -436, 0, 0, -436, -436, -436, -436, -436, -436, -436, -436, 0, -436, -436, 0, -436, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, 0, -436, 0, + // State 281 + -420, 0, 0, -420, 0, 0, -420, -420, -420, -420, -420, 0, 0, 0, 0, -420, -420, 0, 0, -420, -420, -420, -420, -420, -420, -420, -420, 0, -420, -420, 0, -420, -420, -420, 0, 0, 0, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, 0, -420, 0, + // State 282 + -419, 0, 0, -419, 0, 0, -419, -419, -419, -419, -419, 0, 0, 0, 0, -419, -419, 0, 0, -419, -419, -419, -419, -419, -419, -419, -419, 0, -419, -419, 0, -419, -419, -419, 0, 0, 0, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, 0, -419, 0, + // State 283 + -421, 0, 0, -421, 0, 0, -421, -421, -421, -421, -421, 0, 0, 0, 0, -421, -421, 0, 0, -421, -421, -421, -421, -421, -421, -421, -421, 0, -421, -421, 0, -421, -421, -421, 0, 0, 0, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, 0, -421, 0, + // State 284 + 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 285 + -433, 0, 0, 0, 0, 0, -433, -433, 0, 0, -433, 0, 0, 0, 0, -433, -433, 0, 0, -433, -433, -433, -433, 0, 0, -433, -433, 0, -433, -433, 0, -433, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, -433, 0, + // State 286 + 171, 0, 0, 0, 0, 0, 172, -194, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 287 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 288 + 0, 0, 0, 0, 0, 0, 0, 0, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 289 + 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 290 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 291 + 0, 0, 0, 0, 0, 0, 0, -475, 0, -475, -475, 0, 0, -475, 0, -475, 0, -475, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, + // State 292 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 293 + 0, 0, 0, 0, 0, 0, 0, -474, 0, -474, -474, 0, 0, -474, 0, -474, 0, -474, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, + // State 294 + 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 295 + 0, 0, 0, 0, 0, 0, 0, -471, 0, -471, -471, 0, 0, -471, 0, -471, 0, -471, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, + // State 296 + 0, 0, 0, -96, 0, -96, -96, -96, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 297 + 0, 0, 0, 0, 0, 0, -388, -388, 0, -388, -388, 0, 0, -388, 262, -388, -388, -388, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -388, 0, 0, + // State 298 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 299 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 300 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 301 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 302 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 303 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 304 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 305 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 306 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 307 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 308 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 309 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 310 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 311 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 312 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 313 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 314 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + // State 315 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 316 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 317 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 318 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 319 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 320 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 321 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 322 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 323 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 324 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 325 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 326 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 327 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 328 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 329 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 330 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 331 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 332 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 333 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 334 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 335 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 336 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 337 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 338 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 339 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 340 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 341 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 342 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 343 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, + // State 344 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, + // State 345 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 346 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 347 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 348 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 349 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, + // State 350 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 351 + 0, 0, 0, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -379, -379, 0, -379, 0, 0, 0, 0, 0, 0, 0, -379, 0, 0, 0, -379, 0, -379, 0, -379, 0, 0, 0, 0, + // State 352 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, -114, 0, 0, 0, 0, -114, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, -114, 0, + // State 353 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, + // State 354 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, + // State 355 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, + // State 356 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, + // State 357 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 358 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, -132, 0, + // State 359 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, -130, 0, 0, 0, -130, 0, + // State 360 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 433, 0, + // State 361 + 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, -200, 0, -200, 0, -200, 0, 0, 0, 0, + // State 362 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 434, 0, + // State 363 + 0, 0, 0, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, 0, -195, 0, 0, 0, 0, 0, 0, 0, -195, 0, 0, 0, -195, 0, -195, 0, -195, 0, 0, 0, 0, + // State 364 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, + // State 365 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 366 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, + // State 367 + 0, 0, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -376, -376, 0, -376, 0, 0, 0, 0, 0, -376, 0, -376, 0, 0, 0, -376, 0, -376, 0, -376, 0, 0, 0, 0, + // State 368 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, + // State 369 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -369, 0, + // State 370 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -490, -490, 0, -490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 371 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, 0, -353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 372 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, -409, 0, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 373 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 374 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 375 + 0, 0, 0, 0, 0, 0, 0, -477, 0, -477, -477, 0, 0, -477, 0, -477, 0, -477, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, + // State 376 + 0, 0, 0, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 377 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, -413, 0, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 378 + 0, 0, 0, 0, 0, 0, 441, 0, 0, -457, -457, 0, 0, 0, 0, -457, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 379 + 0, 0, 0, 87, 0, 88, 89, -176, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 380 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 381 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, -81, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, -81, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 382 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, -166, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 383 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 384 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 385 + -444, 0, 0, -444, 0, 0, -444, -444, -444, -444, -444, 0, 0, 0, 0, -444, -444, 0, 0, -444, -444, -444, -444, -444, -444, -444, -444, 0, -444, -444, 0, -444, -444, -444, 0, 0, 0, 0, 0, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, 0, -444, 0, + // State 386 + -434, 0, 0, 0, 0, 0, -434, -434, 0, 0, -434, 0, 0, 0, 0, -434, -434, 0, 0, -434, -434, -434, -434, 0, 0, -434, -434, 0, -434, -434, 0, -434, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, -434, 0, + // State 387 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 388 + -429, 0, 0, -429, 0, 0, -429, -429, 0, 0, -429, 0, 0, 0, 0, -429, -429, 0, 0, -429, -429, -429, -429, -429, 0, -429, -429, 0, -429, -429, 0, -429, -429, -429, 0, 0, 0, 0, 0, 0, 0, 0, -429, 0, 0, 0, 0, 0, 0, 0, -429, 0, + // State 389 + 0, 0, 0, 0, 0, 0, 0, -473, 0, -473, -473, 0, 0, -473, 0, -473, 0, -473, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, + // State 390 + 0, 0, 0, -97, 0, -97, -97, -97, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 391 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 392 + 0, 0, 0, -204, 0, -204, -204, 0, 0, 0, 0, 0, 0, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 393 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 394 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 395 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 396 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 397 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 398 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 399 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 400 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 401 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 402 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 403 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 404 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 405 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 406 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 407 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 408 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 409 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 410 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 411 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 412 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 413 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 414 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 415 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 416 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 417 + 0, 0, 0, -380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -380, -380, 0, -380, 0, 0, 0, 0, 0, 0, 0, -380, 0, 0, 0, -380, 0, -380, 0, -380, 0, 0, 0, 0, + // State 418 + 0, 0, 0, -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -375, -375, 0, -375, 0, 0, 0, 0, 0, -375, 0, -375, 0, 0, 0, -375, 0, -375, 0, -375, 0, 0, 0, 0, + // State 419 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 420 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -381, 0, 0, 0, -381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 421 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 422 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, + // State 423 + 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, 0, -119, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, -119, 0, -119, 0, -119, 0, 0, 0, 0, + // State 424 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, + // State 425 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 426 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 355, 356, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 427 + 0, 468, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, + // State 428 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, -134, 0, + // State 429 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -131, 0, + // State 430 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, + // State 431 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 475, 0, + // State 432 + 0, 0, 0, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, 0, -197, 0, 0, 0, 0, 0, 0, 0, -197, 0, 0, 0, -197, 0, -197, 0, -197, 0, 0, 0, 0, + // State 433 + 0, 0, 0, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, 0, -196, 0, 0, 0, 0, 0, 0, 0, -196, 0, 0, 0, -196, 0, -196, 0, -196, 0, 0, 0, 0, + // State 434 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, + // State 435 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 436 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, + // State 437 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 438 + 0, 0, 0, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 439 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, -82, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, -82, -82, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 440 + 0, 0, 0, 87, 0, 88, 89, -176, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 441 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 442 + 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 443 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 48, 77, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 444 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 445 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, 0, 0, 0, 157, 0, -389, 488, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 446 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 447 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 448 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 449 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 450 + -440, 0, 0, -440, 0, 0, -440, -440, -440, -440, -440, 0, 0, 0, 0, -440, -440, 0, 0, -440, -440, -440, -440, -440, -440, -440, -440, 0, -440, -440, 0, -440, -440, -440, 0, 0, 0, 0, 0, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, 0, -440, 0, + // State 451 + -76, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, -76, -76, 0, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 452 + 0, 0, 0, 0, 0, 0, 0, 0, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 453 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 454 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 455 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 456 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 457 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 458 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 459 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 460 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 461 + 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 354, 355, 356, 357, 0, 0, 174, 175, 0, 176, 177, 0, 146, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, + // State 462 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 463 + 0, 0, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -377, -377, 0, -377, 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, -377, 0, -377, 0, -377, 0, 0, 0, 0, + // State 464 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, -112, 0, 0, 0, 354, 355, 356, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, + // State 465 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, 0, + // State 466 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 467 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 468 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 469 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 470 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 471 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, 0, + // State 472 + -21, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, -21, -21, -21, -21, 0, 0, -21, -21, 0, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, -21, 0, + // State 473 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 474 + 0, 0, 0, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, 0, -198, 0, 0, 0, 0, 0, 0, 0, -198, 0, 0, 0, -198, 0, -198, 0, -198, 0, 0, 0, 0, + // State 475 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -138, 0, + // State 476 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, + // State 477 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -135, 0, + // State 478 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 479 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 480 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 481 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 482 + 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 483 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 484 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -454, -454, 505, 0, 0, 0, -454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 485 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 486 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -456, -456, 0, 0, 0, 0, -456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 487 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 488 + 0, 0, 0, -86, 0, -86, -86, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 489 + -77, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, -77, -77, 0, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 490 + -428, 0, 0, -428, 0, 0, -428, -428, 0, 0, -428, 0, 0, 0, 0, -428, -428, 0, 0, -428, -428, -428, -428, -428, 0, -428, -428, 0, -428, -428, 0, -428, -428, -428, 0, 0, 0, 0, 0, 0, 0, 0, -428, 0, 0, 0, 0, 0, 0, 0, -428, 0, + // State 491 + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, 0, -492, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 12, 0, 0, 0, 0, + // State 492 + 0, 0, 0, -378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -378, -378, 0, -378, 0, 0, 0, 0, 0, 0, 0, -378, 0, 0, 0, -378, 0, -378, 0, -378, 0, 0, 0, 0, + // State 493 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, + // State 494 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, -183, 0, 0, 0, -183, -183, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, + // State 495 + -22, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, -22, -22, -22, -22, 0, 0, -22, -22, 0, -22, -22, 0, -22, -22, -22, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, -22, 0, + // State 496 + 0, 0, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, 0, -120, 0, 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, -120, 0, -120, 0, -120, 0, 0, 0, 0, + // State 497 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, + // State 498 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, -191, 0, + // State 499 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 0, + // State 500 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, + // State 501 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 0, 0, 0, 0, 0, 0, 0, -126, 0, 0, 0, -126, 0, + // State 502 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -453, -453, 509, 0, 0, 0, -453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 503 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -455, -455, 0, 0, 0, 0, -455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 504 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 505 + 0, 0, 0, -87, 0, -87, -87, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 506 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 507 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, 0, -27, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, + // State 508 + 0, 0, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 509 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -452, -452, 0, 0, 0, 0, -452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 510 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -451, -451, 0, 0, 0, 0, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + const ___EOF_ACTION: &'static [i16] = &[ + // State 0 + 0, + // State 1 + 0, + // State 2 + 0, + // State 3 + -493, + // State 4 + 0, + // State 5 + 0, + // State 6 + 0, + // State 7 + 0, + // State 8 + 0, + // State 9 + 0, + // State 10 + 0, + // State 11 + 0, + // State 12 + 0, + // State 13 + 0, + // State 14 + 0, + // State 15 + 0, + // State 16 + 0, + // State 17 + 0, + // State 18 + 0, + // State 19 + 0, + // State 20 + 0, + // State 21 + 0, + // State 22 + 0, + // State 23 + 0, + // State 24 + 0, + // State 25 + 0, + // State 26 + -235, + // State 27 + 0, + // State 28 + 0, + // State 29 + -485, + // State 30 + 0, + // State 31 + 0, + // State 32 + 0, + // State 33 + -299, + // State 34 + 0, + // State 35 + 0, + // State 36 + 0, + // State 37 + 0, + // State 38 + 0, + // State 39 + 0, + // State 40 + -237, + // State 41 + 0, + // State 42 + 0, + // State 43 + 0, + // State 44 + 0, + // State 45 + -236, + // State 46 + 0, + // State 47 + 0, + // State 48 + 0, + // State 49 + 0, + // State 50 + -219, + // State 51 + 0, + // State 52 + 0, + // State 53 + -227, + // State 54 + -231, + // State 55 + 0, + // State 56 + 0, + // State 57 + 0, + // State 58 + 0, + // State 59 + 0, + // State 60 + -337, + // State 61 + -341, + // State 62 + -267, + // State 63 + -336, + // State 64 + -374, + // State 65 + -338, + // State 66 + -335, + // State 67 + 0, + // State 68 + 0, + // State 69 + 0, + // State 70 + 0, + // State 71 + 0, + // State 72 + 0, + // State 73 + 0, + // State 74 + 0, + // State 75 + 0, + // State 76 + 0, + // State 77 + 0, + // State 78 + 0, + // State 79 + 0, + // State 80 + 0, + // State 81 + 0, + // State 82 + 0, + // State 83 + 0, + // State 84 + 0, + // State 85 + 0, + // State 86 + 0, + // State 87 + 0, + // State 88 + 0, + // State 89 + 0, + // State 90 + 0, + // State 91 + 0, + // State 92 + -283, + // State 93 + 0, + // State 94 + 0, + // State 95 + -291, + // State 96 + -295, + // State 97 + -331, + // State 98 + 0, + // State 99 + 0, + // State 100 + 0, + // State 101 + -301, + // State 102 + 0, + // State 103 + 0, + // State 104 + 0, + // State 105 + 0, + // State 106 + -238, + // State 107 + 0, + // State 108 + -221, + // State 109 + 0, + // State 110 + 0, + // State 111 + -229, + // State 112 + -233, + // State 113 + -269, + // State 114 + 0, + // State 115 + 0, + // State 116 + 0, + // State 117 + -300, + // State 118 + 0, + // State 119 + -220, + // State 120 + 0, + // State 121 + 0, + // State 122 + -228, + // State 123 + -232, + // State 124 + -268, + // State 125 + 0, + // State 126 + -215, + // State 127 + -251, + // State 128 + 0, + // State 129 + -211, + // State 130 + -223, + // State 131 + -259, + // State 132 + -263, + // State 133 + 0, + // State 134 + 0, + // State 135 + 0, + // State 136 + 0, + // State 137 + 0, + // State 138 + -342, + // State 139 + 0, + // State 140 + 0, + // State 141 + 0, + // State 142 + 0, + // State 143 + 0, + // State 144 + 0, + // State 145 + 0, + // State 146 + 0, + // State 147 + 0, + // State 148 + 0, + // State 149 + 0, + // State 150 + 0, + // State 151 + 0, + // State 152 + 0, + // State 153 + 0, + // State 154 + 0, + // State 155 + 0, + // State 156 + 0, + // State 157 + 0, + // State 158 + 0, + // State 159 + 0, + // State 160 + 0, + // State 161 + 0, + // State 162 + 0, + // State 163 + 0, + // State 164 + 0, + // State 165 + 0, + // State 166 + 0, + // State 167 + 0, + // State 168 + 0, + // State 169 + 0, + // State 170 + 0, + // State 171 + 0, + // State 172 + 0, + // State 173 + 0, + // State 174 + 0, + // State 175 + 0, + // State 176 + 0, + // State 177 + 0, + // State 178 + 0, + // State 179 + 0, + // State 180 + 0, + // State 181 + 0, + // State 182 + 0, + // State 183 + 0, + // State 184 + 0, + // State 185 + 0, + // State 186 + 0, + // State 187 + 0, + // State 188 + -279, + // State 189 + -315, + // State 190 + 0, + // State 191 + -275, + // State 192 + -287, + // State 193 + -323, + // State 194 + -327, + // State 195 + 0, + // State 196 + -285, + // State 197 + 0, + // State 198 + 0, + // State 199 + -293, + // State 200 + -297, + // State 201 + -333, + // State 202 + 0, + // State 203 + 0, + // State 204 + 0, + // State 205 + -302, + // State 206 + 0, + // State 207 + -222, + // State 208 + 0, + // State 209 + 0, + // State 210 + -230, + // State 211 + -234, + // State 212 + -270, + // State 213 + -217, + // State 214 + -253, + // State 215 + 0, + // State 216 + -213, + // State 217 + -225, + // State 218 + -261, + // State 219 + -265, + // State 220 + 0, + // State 221 + -284, + // State 222 + 0, + // State 223 + 0, + // State 224 + -292, + // State 225 + -296, + // State 226 + -332, + // State 227 + -216, + // State 228 + -252, + // State 229 + 0, + // State 230 + -212, + // State 231 + -224, + // State 232 + -260, + // State 233 + -264, + // State 234 + -247, + // State 235 + -207, + // State 236 + -243, + // State 237 + -255, + // State 238 + 0, + // State 239 + 0, + // State 240 + 0, + // State 241 + 0, + // State 242 + 0, + // State 243 + 0, + // State 244 + 0, + // State 245 + 0, + // State 246 + 0, + // State 247 + 0, + // State 248 + 0, + // State 249 + 0, + // State 250 + -199, + // State 251 + 0, + // State 252 + 0, + // State 253 + 0, + // State 254 + 0, + // State 255 + 0, + // State 256 + 0, + // State 257 + 0, + // State 258 + 0, + // State 259 + 0, + // State 260 + 0, + // State 261 + 0, + // State 262 + 0, + // State 263 + 0, + // State 264 + 0, + // State 265 + 0, + // State 266 + 0, + // State 267 + 0, + // State 268 + 0, + // State 269 + 0, + // State 270 + 0, + // State 271 + 0, + // State 272 + 0, + // State 273 + 0, + // State 274 + 0, + // State 275 + 0, + // State 276 + 0, + // State 277 + 0, + // State 278 + 0, + // State 279 + 0, + // State 280 + 0, + // State 281 + 0, + // State 282 + 0, + // State 283 + 0, + // State 284 + 0, + // State 285 + 0, + // State 286 + 0, + // State 287 + 0, + // State 288 + 0, + // State 289 + 0, + // State 290 + 0, + // State 291 + 0, + // State 292 + 0, + // State 293 + 0, + // State 294 + 0, + // State 295 + 0, + // State 296 + 0, + // State 297 + 0, + // State 298 + 0, + // State 299 + 0, + // State 300 + 0, + // State 301 + -311, + // State 302 + -271, + // State 303 + -307, + // State 304 + -319, + // State 305 + -281, + // State 306 + -317, + // State 307 + 0, + // State 308 + -277, + // State 309 + -289, + // State 310 + -325, + // State 311 + -329, + // State 312 + 0, + // State 313 + -286, + // State 314 + 0, + // State 315 + 0, + // State 316 + -294, + // State 317 + -298, + // State 318 + -334, + // State 319 + -218, + // State 320 + -254, + // State 321 + 0, + // State 322 + -214, + // State 323 + -226, + // State 324 + -262, + // State 325 + -266, + // State 326 + -249, + // State 327 + -209, + // State 328 + -245, + // State 329 + -257, + // State 330 + -280, + // State 331 + -316, + // State 332 + 0, + // State 333 + -276, + // State 334 + -288, + // State 335 + -324, + // State 336 + -328, + // State 337 + -248, + // State 338 + -208, + // State 339 + -244, + // State 340 + -256, + // State 341 + -239, + // State 342 + 0, + // State 343 + 0, + // State 344 + 0, + // State 345 + 0, + // State 346 + 0, + // State 347 + 0, + // State 348 + 0, + // State 349 + 0, + // State 350 + 0, + // State 351 + -379, + // State 352 + 0, + // State 353 + 0, + // State 354 + 0, + // State 355 + 0, + // State 356 + 0, + // State 357 + 0, + // State 358 + 0, + // State 359 + 0, + // State 360 + 0, + // State 361 + -200, + // State 362 + 0, + // State 363 + -195, + // State 364 + 0, + // State 365 + 0, + // State 366 + 0, + // State 367 + -376, + // State 368 + 0, + // State 369 + 0, + // State 370 + 0, + // State 371 + 0, + // State 372 + 0, + // State 373 + 0, + // State 374 + 0, + // State 375 + 0, + // State 376 + 0, + // State 377 + 0, + // State 378 + 0, + // State 379 + 0, + // State 380 + 0, + // State 381 + 0, + // State 382 + 0, + // State 383 + 0, + // State 384 + 0, + // State 385 + 0, + // State 386 + 0, + // State 387 + 0, + // State 388 + 0, + // State 389 + 0, + // State 390 + 0, + // State 391 + 0, + // State 392 + 0, + // State 393 + 0, + // State 394 + -303, + // State 395 + -313, + // State 396 + -273, + // State 397 + -309, + // State 398 + -321, + // State 399 + -282, + // State 400 + -318, + // State 401 + 0, + // State 402 + -278, + // State 403 + -290, + // State 404 + -326, + // State 405 + -330, + // State 406 + -250, + // State 407 + -210, + // State 408 + -246, + // State 409 + -258, + // State 410 + -241, + // State 411 + -312, + // State 412 + -272, + // State 413 + -308, + // State 414 + -320, + // State 415 + -240, + // State 416 + 0, + // State 417 + -380, + // State 418 + -375, + // State 419 + 0, + // State 420 + 0, + // State 421 + 0, + // State 422 + 0, + // State 423 + -119, + // State 424 + 0, + // State 425 + 0, + // State 426 + 0, + // State 427 + 0, + // State 428 + 0, + // State 429 + 0, + // State 430 + 0, + // State 431 + 0, + // State 432 + -197, + // State 433 + -196, + // State 434 + 0, + // State 435 + 0, + // State 436 + 0, + // State 437 + 0, + // State 438 + 0, + // State 439 + 0, + // State 440 + 0, + // State 441 + 0, + // State 442 + 0, + // State 443 + 0, + // State 444 + 0, + // State 445 + 0, + // State 446 + 0, + // State 447 + 0, + // State 448 + 0, + // State 449 + 0, + // State 450 + 0, + // State 451 + 0, + // State 452 + 0, + // State 453 + 0, + // State 454 + -305, + // State 455 + -314, + // State 456 + -274, + // State 457 + -310, + // State 458 + -322, + // State 459 + -242, + // State 460 + -304, + // State 461 + 0, + // State 462 + 0, + // State 463 + -377, + // State 464 + 0, + // State 465 + 0, + // State 466 + 0, + // State 467 + 0, + // State 468 + 0, + // State 469 + 0, + // State 470 + 0, + // State 471 + 0, + // State 472 + 0, + // State 473 + 0, + // State 474 + -198, + // State 475 + 0, + // State 476 + 0, + // State 477 + 0, + // State 478 + 0, + // State 479 + 0, + // State 480 + 0, + // State 481 + 0, + // State 482 + 0, + // State 483 + 0, + // State 484 + 0, + // State 485 + 0, + // State 486 + 0, + // State 487 + 0, + // State 488 + 0, + // State 489 + 0, + // State 490 + 0, + // State 491 + -306, + // State 492 + -378, + // State 493 + 0, + // State 494 + 0, + // State 495 + 0, + // State 496 + -120, + // State 497 + 0, + // State 498 + 0, + // State 499 + 0, + // State 500 + 0, + // State 501 + 0, + // State 502 + 0, + // State 503 + 0, + // State 504 + 0, + // State 505 + 0, + // State 506 + 0, + // State 507 + 0, + // State 508 + 0, + // State 509 + 0, + // State 510 + 0, + ]; + const ___GOTO: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 17, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 167, 0, 0, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 103 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 112 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 113 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 114 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 120 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 124 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 125 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 126 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 127 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 128 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 129 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 130 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 133 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 134 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 135 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 136 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 137 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 241, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 138 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 139 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 140 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 142 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 144 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 145 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 146 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 147 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 148 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 149 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 150 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 151 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 152 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 153 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 154 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 155 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 156 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 157 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 158 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 159 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 160 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 161 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 162 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 163 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 164 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 165 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 166 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 167 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 168 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 169 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 170 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 171 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 287, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 172 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 0, 0, 0, 289, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 173 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 174 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 175 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 176 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 177 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 178 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 179 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 180 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 181 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 182 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 183 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 184 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 185 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 186 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 187 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 188 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 189 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 190 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 191 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 192 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 193 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 194 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 195 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 196 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 197 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 198 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 199 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 200 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 201 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 202 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 203 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 204 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 205 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 206 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 207 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 208 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 209 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 210 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 211 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 212 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 213 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 214 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 215 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 216 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 217 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 218 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 219 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 220 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 221 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 222 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 223 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 224 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 225 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 226 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 227 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 228 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 229 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 230 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 231 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 232 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 233 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 234 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 235 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 236 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 237 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 238 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 239 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 240 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 241 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 255, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 242 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 243 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 244 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 245 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 246 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 247 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 248 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 249 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 250 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 251 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 252 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 253 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 254 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 255 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 256 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 257 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 258 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 259 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 260 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 261 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 262 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 263 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 264 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 265 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 266 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 267 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 268 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 269 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 270 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 271 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 272 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 273 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 274 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 275 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 276 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 277 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 278 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 385, 0, 0, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 279 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 280 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 281 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 282 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 283 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 284 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 285 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 286 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 387, 0, 0, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 287 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 288 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 289 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 290 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 291 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 292 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 293 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 294 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 295 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 296 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 297 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 298 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 299 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 300 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 301 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 302 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 303 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 304 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 305 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 306 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 307 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 308 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 309 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 310 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 311 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 312 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 313 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 314 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 315 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 316 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 317 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 318 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 319 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 320 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 321 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 322 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 323 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 324 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 325 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 326 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 327 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 328 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 329 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 330 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 331 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 332 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 333 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 334 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 335 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 336 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 337 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 338 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 339 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 340 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 341 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 342 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 343 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 344 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 345 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 346 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 347 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 348 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 349 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 350 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 351 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 352 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 387, 0, 0, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 353 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 354 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 355 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 356 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 357 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 358 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 359 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 360 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 361 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 362 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 363 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 364 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 365 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 366 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 367 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 368 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 369 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 370 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 371 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 372 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 373 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 374 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 375 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 376 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 377 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 378 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 379 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 380 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 381 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 382 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 450, 0, 0, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 383 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 384 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 385 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 386 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 387 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 0, 0, 0, 453, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 388 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 389 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 390 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 391 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 392 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 393 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 394 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 395 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 396 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 397 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 398 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 399 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 400 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 401 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 402 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 403 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 404 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 405 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 406 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 407 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 408 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 409 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 410 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 411 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 412 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 413 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 414 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 415 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 416 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 417 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 418 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 419 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 420 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 421 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 422 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 423 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 424 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 425 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 426 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 427 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 428 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 429 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 430 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 431 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 432 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 433 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 434 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 479, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 435 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 436 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 437 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 438 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 439 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 440 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 441 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 442 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 443 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 444 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 445 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 446 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 447 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 448 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 449 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 450 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 451 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 452 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 453 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 454 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 455 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 456 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 457 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 458 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 459 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 460 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 461 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 0, 0, 166, 286, 0, 353, 168, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 462 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 463 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 464 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 465 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 466 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 467 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 468 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 469 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 470 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 471 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 472 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 473 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 474 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 475 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 479, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 476 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 477 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 478 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 479 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 480 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 481 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 482 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 483 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 484 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 485 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 486 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 487 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 488 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 489 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 490 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 491 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, + // State 492 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 493 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 494 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 495 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 496 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 497 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 498 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 499 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 500 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 501 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 502 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 503 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 504 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 505 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 506 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 507 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 508 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 509 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 510 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { + const ___TERMINAL: &'static [&'static str] = &[ + r###""!""###, + r###""!=""###, + r###""!~""###, + r###""#""###, + r###""#![...]""###, + r###""&""###, + r###""(""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""->""###, + r###""..""###, + r###"":""###, + r###""::""###, + r###"";""###, + r###""<""###, + r###""=""###, + r###""==""###, + r###""=>""###, + r###""=>?""###, + r###""=>@L""###, + r###""=>@R""###, + r###"">""###, + r###""?""###, + r###""@L""###, + r###""@R""###, + r###""CharLiteral""###, + r###""Escape""###, + r###""Id""###, + r###""Lifetime""###, + r###""MacroId""###, + r###""RegexLiteral""###, + r###""StringLiteral""###, + r###""[""###, + r###""]""###, + r###""_""###, + r###""else""###, + r###""enum""###, + r###""extern""###, + r###""for""###, + r###""grammar""###, + r###""if""###, + r###""match""###, + r###""mut""###, + r###""pub""###, + r###""type""###, + r###""use""###, + r###""where""###, + r###""{""###, + r###""}""###, + r###""~~""###, + ]; + ___ACTION[(___state * 52)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { + if state == 0 { + None + } else { + Some(terminal.to_string()) + } + }).collect() + } + pub struct GrammarParser { + _priv: (), + } + + impl GrammarParser { + pub fn new() -> GrammarParser { + GrammarParser { + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + ___TOKEN: ___ToTriple<'input, Error=tok::Error>, + ___TOKENS: IntoIterator, + >( + &self, + text: &'input str, + ___tokens0: ___TOKENS, + ) -> Result, tok::Error>> + { + let ___tokens = ___tokens0.into_iter(); + let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); + let mut ___states = vec![0_i16]; + let mut ___symbols = vec![]; + let mut ___integer; + let mut ___lookahead; + let ___last_location = &mut Default::default(); + '___shift: loop { + ___lookahead = match ___tokens.next() { + Some(Ok(v)) => v, + None => break '___shift, + Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), + }; + *___last_location = ___lookahead.2.clone(); + ___integer = match ___lookahead.1 { + Tok::Bang if true => 0, + Tok::BangEquals if true => 1, + Tok::BangTilde if true => 2, + Tok::Hash if true => 3, + Tok::ShebangAttribute(_) if true => 4, + Tok::Ampersand if true => 5, + Tok::LeftParen if true => 6, + Tok::RightParen if true => 7, + Tok::Star if true => 8, + Tok::Plus if true => 9, + Tok::Comma if true => 10, + Tok::MinusGreaterThan if true => 11, + Tok::DotDot if true => 12, + Tok::Colon if true => 13, + Tok::ColonColon if true => 14, + Tok::Semi if true => 15, + Tok::LessThan if true => 16, + Tok::Equals if true => 17, + Tok::EqualsEquals if true => 18, + Tok::EqualsGreaterThanCode(_) if true => 19, + Tok::EqualsGreaterThanQuestionCode(_) if true => 20, + Tok::EqualsGreaterThanLookahead if true => 21, + Tok::EqualsGreaterThanLookbehind if true => 22, + Tok::GreaterThan if true => 23, + Tok::Question if true => 24, + Tok::Lookahead if true => 25, + Tok::Lookbehind if true => 26, + Tok::CharLiteral(_) if true => 27, + Tok::Escape(_) if true => 28, + Tok::Id(_) if true => 29, + Tok::Lifetime(_) if true => 30, + Tok::MacroId(_) if true => 31, + Tok::RegexLiteral(_) if true => 32, + Tok::StringLiteral(_) if true => 33, + Tok::LeftBracket if true => 34, + Tok::RightBracket if true => 35, + Tok::Underscore if true => 36, + Tok::Else if true => 37, + Tok::Enum if true => 38, + Tok::Extern if true => 39, + Tok::For if true => 40, + Tok::Grammar if true => 41, + Tok::If if true => 42, + Tok::Match if true => 43, + Tok::Mut if true => 44, + Tok::Pub if true => 45, + Tok::Type if true => 46, + Tok::Use(_) if true => 47, + Tok::Where if true => 48, + Tok::LeftBrace if true => 49, + Tok::RightBrace if true => 50, + Tok::TildeTilde if true => 51, + _ => { + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: Some(___lookahead), + expected: ___expected_tokens(___state), + }; + return Err(___error); + } + }; + '___inner: loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___ACTION[___state * 52 + ___integer]; + if ___action > 0 { + let ___symbol = match ___integer { + 0 => match ___lookahead.1 { + ___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 1 => match ___lookahead.1 { + ___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 2 => match ___lookahead.1 { + ___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 3 => match ___lookahead.1 { + ___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 4 => match ___lookahead.1 { + Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 5 => match ___lookahead.1 { + ___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 6 => match ___lookahead.1 { + ___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 7 => match ___lookahead.1 { + ___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 8 => match ___lookahead.1 { + ___tok @ Tok::Star => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 9 => match ___lookahead.1 { + ___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 10 => match ___lookahead.1 { + ___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 11 => match ___lookahead.1 { + ___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 12 => match ___lookahead.1 { + ___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 13 => match ___lookahead.1 { + ___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 14 => match ___lookahead.1 { + ___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 15 => match ___lookahead.1 { + ___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 16 => match ___lookahead.1 { + ___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 17 => match ___lookahead.1 { + ___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 18 => match ___lookahead.1 { + ___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 19 => match ___lookahead.1 { + Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 20 => match ___lookahead.1 { + Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 21 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 22 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 23 => match ___lookahead.1 { + ___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 24 => match ___lookahead.1 { + ___tok @ Tok::Question => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 25 => match ___lookahead.1 { + ___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 26 => match ___lookahead.1 { + ___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 27 => match ___lookahead.1 { + Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 28 => match ___lookahead.1 { + Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 29 => match ___lookahead.1 { + Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 30 => match ___lookahead.1 { + Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 31 => match ___lookahead.1 { + Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 32 => match ___lookahead.1 { + Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 33 => match ___lookahead.1 { + Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 34 => match ___lookahead.1 { + ___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 35 => match ___lookahead.1 { + ___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 36 => match ___lookahead.1 { + ___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 37 => match ___lookahead.1 { + ___tok @ Tok::Else => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 38 => match ___lookahead.1 { + ___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 39 => match ___lookahead.1 { + ___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 40 => match ___lookahead.1 { + ___tok @ Tok::For => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 41 => match ___lookahead.1 { + ___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 42 => match ___lookahead.1 { + ___tok @ Tok::If => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 43 => match ___lookahead.1 { + ___tok @ Tok::Match => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 44 => match ___lookahead.1 { + ___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 45 => match ___lookahead.1 { + ___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 46 => match ___lookahead.1 { + ___tok @ Tok::Type => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 47 => match ___lookahead.1 { + Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 48 => match ___lookahead.1 { + ___tok @ Tok::Where => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 49 => match ___lookahead.1 { + ___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 50 => match ___lookahead.1 { + ___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 51 => match ___lookahead.1 { + ___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + _ => unreachable!(), + }; + ___states.push(___action - 1); + ___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); + continue '___shift; + } else if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + if r.is_err() { + return r; + } + return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); + } + } else { + let mut ___err_lookahead = Some(___lookahead); + let mut ___err_integer: Option = Some(___integer); + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___EOF_ACTION[___state]; + if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + return r; + } + } else { + let mut ___err_lookahead = None; + let mut ___err_integer: Option = None; + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + } + pub(crate) fn ___reduce< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> Option, tok::Error>>> + { + let (___pop_states, ___symbol, ___nonterminal) = match -___action { + 1 => { + ___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 2 => { + ___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 3 => { + ___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 4 => { + ___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 5 => { + ___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 6 => { + ___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 7 => { + ___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 8 => { + ___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 9 => { + ___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 10 => { + ___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 11 => { + ___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 12 => { + ___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 13 => { + ___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 14 => { + ___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 15 => { + ___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 16 => { + ___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 17 => { + ___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 18 => { + ___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 19 => { + ___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 20 => { + ___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 21 => { + ___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 22 => { + ___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 23 => { + ___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 24 => { + ___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 25 => { + ___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 26 => { + ___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 27 => { + ___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 28 => { + ___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 29 => { + ___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 30 => { + ___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 31 => { + ___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 32 => { + ___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 33 => { + ___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 34 => { + ___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 35 => { + ___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 36 => { + ___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 37 => { + ___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 38 => { + ___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 39 => { + ___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 40 => { + ___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 41 => { + ___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 42 => { + ___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 43 => { + ___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 44 => { + ___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 45 => { + ___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 46 => { + ___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 47 => { + ___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 48 => { + ___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 49 => { + ___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 50 => { + ___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 51 => { + ___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 52 => { + ___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 53 => { + ___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 54 => { + ___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 55 => { + ___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 56 => { + ___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 57 => { + ___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 58 => { + ___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 59 => { + ___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 60 => { + ___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 61 => { + ___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 62 => { + ___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 63 => { + ___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 64 => { + ___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 65 => { + ___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 66 => { + ___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 67 => { + ___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 68 => { + ___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 69 => { + ___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 70 => { + ___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 71 => { + ___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 72 => { + ___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 73 => { + ___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 74 => { + ___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 75 => { + ___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 76 => { + ___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 77 => { + ___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 78 => { + ___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 79 => { + ___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 80 => { + ___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 81 => { + ___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 82 => { + ___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 83 => { + ___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 84 => { + ___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 85 => { + ___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 86 => { + ___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 87 => { + ___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 88 => { + ___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 89 => { + ___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 90 => { + ___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 91 => { + ___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 92 => { + ___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 93 => { + ___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 94 => { + ___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 95 => { + ___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 96 => { + ___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 97 => { + ___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 98 => { + ___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 99 => { + ___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 100 => { + ___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 101 => { + ___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 102 => { + ___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 103 => { + ___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 104 => { + ___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 105 => { + ___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 106 => { + ___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 107 => { + ___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 108 => { + ___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 109 => { + ___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 110 => { + ___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 111 => { + ___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 112 => { + ___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 113 => { + ___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 114 => { + ___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 115 => { + ___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 116 => { + ___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 117 => { + ___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 118 => { + ___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 119 => { + ___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 120 => { + ___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 121 => { + ___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 122 => { + ___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 123 => { + ___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 124 => { + ___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 125 => { + ___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 126 => { + ___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 127 => { + ___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 128 => { + ___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 129 => { + ___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 130 => { + ___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 131 => { + ___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 132 => { + ___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 133 => { + ___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 134 => { + ___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 135 => { + ___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 136 => { + ___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 137 => { + ___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 138 => { + ___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 139 => { + ___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 140 => { + ___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 141 => { + ___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 142 => { + ___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 143 => { + ___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 144 => { + ___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 145 => { + ___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 146 => { + ___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 147 => { + ___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 148 => { + ___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 149 => { + ___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 150 => { + ___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 151 => { + ___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 152 => { + ___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 153 => { + ___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 154 => { + ___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 155 => { + ___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 156 => { + ___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 157 => { + ___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 158 => { + ___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 159 => { + ___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 160 => { + ___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 161 => { + ___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 162 => { + ___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 163 => { + ___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 164 => { + ___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 165 => { + ___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 166 => { + ___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 167 => { + ___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 168 => { + ___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 169 => { + ___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 170 => { + ___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 171 => { + ___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 172 => { + ___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 173 => { + ___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 174 => { + ___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 175 => { + ___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 176 => { + ___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 177 => { + ___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 178 => { + ___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 179 => { + ___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 180 => { + ___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 181 => { + ___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 182 => { + ___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 183 => { + ___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 184 => { + ___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 185 => { + ___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 186 => { + ___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 187 => { + ___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 188 => { + // Conversion = Terminal, "=>" => ActionFn(417); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action417::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 90) + } + 189 => { + ___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 190 => { + ___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 191 => { + ___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 192 => { + ___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 193 => { + ___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 194 => { + ___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 195 => { + ___reduce195(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 196 => { + ___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 197 => { + ___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 198 => { + ___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 199 => { + ___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 200 => { + ___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 201 => { + ___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 202 => { + ___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 203 => { + ___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 204 => { + ___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 205 => { + ___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 206 => { + ___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 207 => { + ___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 208 => { + ___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 209 => { + ___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 210 => { + ___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 211 => { + ___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 212 => { + ___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 213 => { + ___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 214 => { + ___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 215 => { + ___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 216 => { + ___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 217 => { + ___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 218 => { + ___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 219 => { + ___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 220 => { + ___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 221 => { + ___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 222 => { + ___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 223 => { + ___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 224 => { + ___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 225 => { + ___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 226 => { + ___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 227 => { + ___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 228 => { + ___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 229 => { + ___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 230 => { + ___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 231 => { + ___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 232 => { + ___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 233 => { + ___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 234 => { + ___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 235 => { + ___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 236 => { + ___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 237 => { + ___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 238 => { + ___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 239 => { + ___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 240 => { + ___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 241 => { + ___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 242 => { + ___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 243 => { + ___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 244 => { + ___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 245 => { + ___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 246 => { + ___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 247 => { + ___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 248 => { + ___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 249 => { + ___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 250 => { + ___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 251 => { + ___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 252 => { + ___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 253 => { + ___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 254 => { + ___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 255 => { + ___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 256 => { + ___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 257 => { + ___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 258 => { + ___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 259 => { + ___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 260 => { + ___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 261 => { + ___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 262 => { + ___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 263 => { + ___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 264 => { + ___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 265 => { + ___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 266 => { + ___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 267 => { + ___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 268 => { + ___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 269 => { + ___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 270 => { + ___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 271 => { + ___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 272 => { + ___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 273 => { + ___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 274 => { + ___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 275 => { + ___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 276 => { + ___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 277 => { + ___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 278 => { + ___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 279 => { + ___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 280 => { + ___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 281 => { + ___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 282 => { + ___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 283 => { + ___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 284 => { + ___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 285 => { + ___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 286 => { + ___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 287 => { + ___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 288 => { + ___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 289 => { + ___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 290 => { + ___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 291 => { + ___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 292 => { + ___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 293 => { + ___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 294 => { + ___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 295 => { + ___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 296 => { + ___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 297 => { + ___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 298 => { + ___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 299 => { + ___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 300 => { + ___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 301 => { + ___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 302 => { + ___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 303 => { + ___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 304 => { + ___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 305 => { + ___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 306 => { + ___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 307 => { + ___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 308 => { + ___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 309 => { + ___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 310 => { + ___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 311 => { + ___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 312 => { + ___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 313 => { + ___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 314 => { + ___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 315 => { + ___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 316 => { + ___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 317 => { + ___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 318 => { + ___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 319 => { + ___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 320 => { + ___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 321 => { + ___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 322 => { + ___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 323 => { + ___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 324 => { + ___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 325 => { + ___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 326 => { + ___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 327 => { + ___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 328 => { + ___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 329 => { + ___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 330 => { + ___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 331 => { + ___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 332 => { + ___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 333 => { + ___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 334 => { + ___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 335 => { + ___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 336 => { + ___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 337 => { + ___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 338 => { + ___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 339 => { + ___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 340 => { + ___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 341 => { + ___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 342 => { + ___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 343 => { + ___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 344 => { + ___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 345 => { + ___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 346 => { + ___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 347 => { + ___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 348 => { + ___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 349 => { + ___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 350 => { + ___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 351 => { + ___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 352 => { + ___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 353 => { + ___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 354 => { + ___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 355 => { + ___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 356 => { + ___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 357 => { + ___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 358 => { + ___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 359 => { + ___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 360 => { + ___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 361 => { + ___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 362 => { + ___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 363 => { + ___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 364 => { + ___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 365 => { + ___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 366 => { + ___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 367 => { + ___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 368 => { + ___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 369 => { + // MatchItem = MatchSymbol, "=>" => ActionFn(425); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action425::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 119) + } + 370 => { + ___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 371 => { + ___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 372 => { + ___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 373 => { + ___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 374 => { + ___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 375 => { + ___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 376 => { + ___reduce376(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 377 => { + ___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 378 => { + ___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 379 => { + ___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 380 => { + ___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 381 => { + ___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 382 => { + ___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 383 => { + ___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 384 => { + ___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 385 => { + ___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 386 => { + ___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 387 => { + ___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 388 => { + ___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 389 => { + ___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 390 => { + ___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 391 => { + ___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 392 => { + ___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 393 => { + ___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 394 => { + ___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 395 => { + ___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 396 => { + ___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 397 => { + ___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 398 => { + ___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 399 => { + ___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 400 => { + ___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 401 => { + ___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 402 => { + ___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 403 => { + ___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 404 => { + ___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 405 => { + ___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 406 => { + ___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 407 => { + ___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 408 => { + ___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 409 => { + ___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 410 => { + ___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 411 => { + ___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 412 => { + ___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 413 => { + ___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 414 => { + ___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 415 => { + ___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 416 => { + ___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 417 => { + ___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 418 => { + ___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 419 => { + ___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 420 => { + ___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 421 => { + ___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 422 => { + ___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 423 => { + ___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 424 => { + ___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 425 => { + ___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 426 => { + ___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 427 => { + ___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 428 => { + ___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 429 => { + ___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 430 => { + ___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 431 => { + ___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 432 => { + ___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 433 => { + ___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 434 => { + ___reduce434(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 435 => { + ___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 436 => { + ___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 437 => { + ___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 438 => { + ___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 439 => { + ___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 440 => { + ___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 441 => { + ___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 442 => { + ___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 443 => { + ___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 444 => { + ___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 445 => { + ___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 446 => { + ___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 447 => { + ___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 448 => { + ___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 449 => { + ___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 450 => { + ___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 451 => { + ___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 452 => { + ___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 453 => { + ___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 454 => { + ___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 455 => { + ___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 456 => { + ___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 457 => { + ___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 458 => { + ___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 459 => { + ___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 460 => { + ___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 461 => { + ___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 462 => { + ___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 463 => { + ___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 464 => { + ___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 465 => { + ___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 466 => { + ___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 467 => { + ___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 468 => { + ___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 469 => { + ___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 470 => { + ___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 471 => { + ___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 472 => { + ___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 473 => { + ___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 474 => { + ___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 475 => { + ___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 476 => { + ___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 477 => { + ___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 478 => { + ___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 479 => { + ___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 480 => { + ___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 481 => { + ___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 482 => { + ___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 483 => { + ___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 484 => { + ___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 485 => { + ___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 486 => { + ___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 487 => { + ___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 488 => { + ___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 489 => { + ___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 490 => { + ___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 491 => { + ___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 492 => { + ___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 493 => { + // ___Grammar = Grammar => ActionFn(0); + let ___sym0 = ___pop_Variant63(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action0::<>(text, ___sym0); + return Some(Ok(___nt)); + } + 494 => { + ___reduce494(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 495 => { + ___reduce495(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 496 => { + ___reduce496(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 497 => { + ___reduce497(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + _ => panic!("invalid action code {}", ___action) + }; + let ___states_len = ___states.len(); + ___states.truncate(___states_len - ___pop_states); + ___symbols.push(___symbol); + let ___state = *___states.last().unwrap() as usize; + let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; + ___states.push(___next_state); + None + } + fn ___pop_Variant9< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant76< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (NonterminalString, Vec), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant38< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ActionKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant10< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Alternative, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant42< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Annotation, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant44< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, AssociatedType, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant20< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Atom, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant7< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Condition, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant56< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ConditionOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant12< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Conversion, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant58< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, EnumToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant59< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ExprSymbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant14< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, FieldPattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant63< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Grammar, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant60< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, GrammarItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant71< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchContents, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant22< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant75< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant24< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, NonterminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant16< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Parameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant78< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Path, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant26< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Pattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant80< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, PatternKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant82< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, RepeatOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant83< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant28< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Symbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant86< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, SymbolKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant74< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalLiteral, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant73< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant0< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Tok<'input>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant30< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBound, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant32< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBoundParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant34< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant3< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeRef, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant41< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant49< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant46< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant50< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant51< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant47< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant52< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant53< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant81< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant5< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant54< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant55< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant48< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant90< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Visibility, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant18< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, WhereClause, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant37< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant39< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant40< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant70< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant8< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant57< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant61< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant72< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant77< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant65< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant79< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant85< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant2< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant87< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant88< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant89< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant4< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant62< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant66< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant6< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant67< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant69< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant68< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant11< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant43< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant45< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant21< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant13< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant15< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant64< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant23< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant25< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant17< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant27< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant84< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant29< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant31< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant33< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant35< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant36< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant19< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant1< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + pub(crate) fn ___reduce1< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = "::" => ActionFn(126); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action126::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 0) + } + pub(crate) fn ___reduce2< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = => ActionFn(127); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action127::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 0) + } + pub(crate) fn ___reduce3< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = "mut" => ActionFn(129); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action129::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 1) + } + pub(crate) fn ___reduce4< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = => ActionFn(130); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action130::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 1) + } + pub(crate) fn ___reduce5< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" ) = "->", TypeRef => ActionFn(156); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action156::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 2) + } + pub(crate) fn ___reduce6< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = "->", TypeRef => ActionFn(300); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action300::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 3) + } + pub(crate) fn ___reduce7< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = => ActionFn(155); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action155::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 3) + } + pub(crate) fn ___reduce8< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" ) = ":", TypeRef => ActionFn(147); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action147::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 4) + } + pub(crate) fn ___reduce9< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = ":", TypeRef => ActionFn(303); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action303::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 5) + } + pub(crate) fn ___reduce10< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = => ActionFn(146); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action146::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 5) + } + pub(crate) fn ___reduce11< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">") = "<", Comma, ">" => ActionFn(152); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action152::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (3, ___symbol, 6) + } + pub(crate) fn ___reduce12< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = "<", Comma, ">" => ActionFn(306); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action306::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (3, ___symbol, 7) + } + pub(crate) fn ___reduce13< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = => ActionFn(151); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action151::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (0, ___symbol, 7) + } + pub(crate) fn ___reduce14< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" ) = "if", Cond => ActionFn(140); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action140::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (2, ___symbol, 8) + } + pub(crate) fn ___reduce15< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = "if", Cond => ActionFn(309); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action309::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (2, ___symbol, 9) + } + pub(crate) fn ___reduce16< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = => ActionFn(139); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action139::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (0, ___symbol, 9) + } + pub(crate) fn ___reduce17< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // () = => ActionFn(148); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action148::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); + (0, ___symbol, 10) + } + pub(crate) fn ___reduce18< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Alternative, "," => ActionFn(234); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action234::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 11) + } + pub(crate) fn ___reduce19< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(232); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action232::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (0, ___symbol, 12) + } + pub(crate) fn ___reduce20< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(233); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action233::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (1, ___symbol, 12) + } + pub(crate) fn ___reduce21< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Alternative, "," => ActionFn(315); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action315::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (2, ___symbol, 13) + } + pub(crate) fn ___reduce22< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Alternative, "," => ActionFn(316); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action316::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (3, ___symbol, 13) + } + pub(crate) fn ___reduce23< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Conversion, "," => ActionFn(258); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action258::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 14) + } + pub(crate) fn ___reduce24< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(256); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action256::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (0, ___symbol, 15) + } + pub(crate) fn ___reduce25< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(257); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action257::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (1, ___symbol, 15) + } + pub(crate) fn ___reduce26< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Conversion, "," => ActionFn(319); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action319::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (2, ___symbol, 16) + } + pub(crate) fn ___reduce27< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Conversion, "," => ActionFn(320); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action320::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (3, ___symbol, 16) + } + pub(crate) fn ___reduce28< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = FieldPattern, "," => ActionFn(117); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action117::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (2, ___symbol, 17) + } + pub(crate) fn ___reduce29< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(115); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action115::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (0, ___symbol, 18) + } + pub(crate) fn ___reduce30< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(116); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action116::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (1, ___symbol, 18) + } + pub(crate) fn ___reduce31< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = FieldPattern, "," => ActionFn(323); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action323::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (2, ___symbol, 19) + } + pub(crate) fn ___reduce32< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(324); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant14(___symbols); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (3, ___symbol, 19) + } + pub(crate) fn ___reduce33< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarParameter, "," => ActionFn(224); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action224::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (2, ___symbol, 20) + } + pub(crate) fn ___reduce34< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(222); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action222::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (0, ___symbol, 21) + } + pub(crate) fn ___reduce35< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(223); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action223::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (1, ___symbol, 21) + } + pub(crate) fn ___reduce36< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarParameter, "," => ActionFn(329); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action329::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (2, ___symbol, 22) + } + pub(crate) fn ___reduce37< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(330); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action330::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (3, ___symbol, 22) + } + pub(crate) fn ___reduce38< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarWhereClause, "," => ActionFn(198); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action198::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (2, ___symbol, 23) + } + pub(crate) fn ___reduce39< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(196); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action196::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (0, ___symbol, 24) + } + pub(crate) fn ___reduce40< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(197); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action197::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (1, ___symbol, 24) + } + pub(crate) fn ___reduce41< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarWhereClause, "," => ActionFn(333); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action333::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (2, ___symbol, 25) + } + pub(crate) fn ___reduce42< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(334); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action334::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (3, ___symbol, 25) + } + pub(crate) fn ___reduce43< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::") = Id, "::" => ActionFn(125); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action125::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 26) + } + pub(crate) fn ___reduce44< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = => ActionFn(123); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action123::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 27) + } + pub(crate) fn ___reduce45< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = ( "::")+ => ActionFn(124); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action124::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 27) + } + pub(crate) fn ___reduce46< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = Id, "::" => ActionFn(337); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action337::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 28) + } + pub(crate) fn ___reduce47< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = ( "::")+, Id, "::" => ActionFn(338); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 28) + } + pub(crate) fn ___reduce48< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = Lifetime, "+" => ActionFn(201); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action201::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 29) + } + pub(crate) fn ___reduce49< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(199); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action199::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 30) + } + pub(crate) fn ___reduce50< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(200); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action200::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 30) + } + pub(crate) fn ___reduce51< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = Lifetime, "+" => ActionFn(343); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action343::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 31) + } + pub(crate) fn ___reduce52< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(344); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action344::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 31) + } + pub(crate) fn ___reduce53< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Lifetime, "," => ActionFn(204); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action204::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 32) + } + pub(crate) fn ___reduce54< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(202); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action202::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 33) + } + pub(crate) fn ___reduce55< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(203); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action203::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 33) + } + pub(crate) fn ___reduce56< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Lifetime, "," => ActionFn(347); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action347::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 34) + } + pub(crate) fn ___reduce57< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(348); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 34) + } + pub(crate) fn ___reduce58< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = MatchItem, "," => ActionFn(253); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action253::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 35) + } + pub(crate) fn ___reduce59< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(251); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action251::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (0, ___symbol, 36) + } + pub(crate) fn ___reduce60< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(252); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action252::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (1, ___symbol, 36) + } + pub(crate) fn ___reduce61< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = MatchItem, "," => ActionFn(351); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action351::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (2, ___symbol, 37) + } + pub(crate) fn ___reduce62< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(352); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (3, ___symbol, 37) + } + pub(crate) fn ___reduce63< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = NotMacroId, "," => ActionFn(229); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action229::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (2, ___symbol, 38) + } + pub(crate) fn ___reduce64< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(227); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action227::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (0, ___symbol, 39) + } + pub(crate) fn ___reduce65< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(228); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action228::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (1, ___symbol, 39) + } + pub(crate) fn ___reduce66< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = NotMacroId, "," => ActionFn(355); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action355::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (2, ___symbol, 40) + } + pub(crate) fn ___reduce67< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(356); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (3, ___symbol, 40) + } + pub(crate) fn ___reduce68< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Pattern, "," => ActionFn(263); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action263::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (2, ___symbol, 41) + } + pub(crate) fn ___reduce69< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(261); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action261::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (0, ___symbol, 42) + } + pub(crate) fn ___reduce70< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(262); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action262::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (1, ___symbol, 42) + } + pub(crate) fn ___reduce71< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Pattern, "," => ActionFn(359); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action359::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (2, ___symbol, 43) + } + pub(crate) fn ___reduce72< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(360); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (3, ___symbol, 43) + } + pub(crate) fn ___reduce73< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Symbol, "," => ActionFn(239); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action239::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 44) + } + pub(crate) fn ___reduce74< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(237); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action237::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 45) + } + pub(crate) fn ___reduce75< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(238); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action238::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 45) + } + pub(crate) fn ___reduce76< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Symbol, "," => ActionFn(363); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action363::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 46) + } + pub(crate) fn ___reduce77< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Symbol, "," => ActionFn(364); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (3, ___symbol, 46) + } + pub(crate) fn ___reduce78< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = TypeBound, "+" => ActionFn(209); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action209::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 47) + } + pub(crate) fn ___reduce79< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(207); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action207::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (0, ___symbol, 48) + } + pub(crate) fn ___reduce80< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(208); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action208::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (1, ___symbol, 48) + } + pub(crate) fn ___reduce81< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = TypeBound, "+" => ActionFn(367); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action367::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (2, ___symbol, 49) + } + pub(crate) fn ___reduce82< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(368); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (3, ___symbol, 49) + } + pub(crate) fn ___reduce83< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeBoundParameter, "," => ActionFn(219); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action219::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (2, ___symbol, 50) + } + pub(crate) fn ___reduce84< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(217); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action217::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (0, ___symbol, 51) + } + pub(crate) fn ___reduce85< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(218); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action218::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (1, ___symbol, 51) + } + pub(crate) fn ___reduce86< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeBoundParameter, "," => ActionFn(371); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action371::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (2, ___symbol, 52) + } + pub(crate) fn ___reduce87< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(372); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (3, ___symbol, 52) + } + pub(crate) fn ___reduce88< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeParameter, "," => ActionFn(193); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action193::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (2, ___symbol, 53) + } + pub(crate) fn ___reduce89< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(191); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action191::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (0, ___symbol, 54) + } + pub(crate) fn ___reduce90< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(192); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action192::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (1, ___symbol, 54) + } + pub(crate) fn ___reduce91< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeParameter, "," => ActionFn(375); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action375::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (2, ___symbol, 55) + } + pub(crate) fn ___reduce92< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(376); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (3, ___symbol, 55) + } + pub(crate) fn ___reduce93< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRef, "," => ActionFn(214); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action214::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 56) + } + pub(crate) fn ___reduce94< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(212); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action212::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 57) + } + pub(crate) fn ___reduce95< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(213); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action213::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 57) + } + pub(crate) fn ___reduce96< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRef, "," => ActionFn(379); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action379::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 58) + } + pub(crate) fn ___reduce97< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(380); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 58) + } + pub(crate) fn ___reduce98< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRefOrLifetime, "," => ActionFn(244); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action244::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 59) + } + pub(crate) fn ___reduce99< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(242); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action242::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 60) + } + pub(crate) fn ___reduce100< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(243); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action243::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 60) + } + pub(crate) fn ___reduce101< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRefOrLifetime, "," => ActionFn(383); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action383::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 61) + } + pub(crate) fn ___reduce102< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(384); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 61) + } + pub(crate) fn ___reduce103< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @L = => ActionFn(174); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action174::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 62) + } + pub(crate) fn ___reduce104< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @R = => ActionFn(173); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action173::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 63) + } + pub(crate) fn ___reduce105< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@L" => ActionFn(39); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action39::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce106< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@R" => ActionFn(40); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action40::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce107< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>" => ActionFn(41); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action41::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce108< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>?" => ActionFn(42); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action42::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce109< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = Action => ActionFn(136); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action136::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (1, ___symbol, 65) + } + pub(crate) fn ___reduce110< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = => ActionFn(137); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action137::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (0, ___symbol, 65) + } + pub(crate) fn ___reduce111< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond, Action => ActionFn(434); + let ___sym3 = ___pop_Variant38(___symbols); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action434::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (4, ___symbol, 66) + } + pub(crate) fn ___reduce112< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond => ActionFn(435); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce113< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, Action => ActionFn(436); + let ___sym1 = ___pop_Variant38(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action436::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 66) + } + pub(crate) fn ___reduce114< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+ => ActionFn(437); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action437::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce115< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = "if", Cond, Action => ActionFn(412); + let ___sym2 = ___pop_Variant38(___symbols); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action412::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce116< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Action => ActionFn(413); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action413::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce117< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = Alternative => ActionFn(230); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action230::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (1, ___symbol, 67) + } + pub(crate) fn ___reduce118< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = => ActionFn(231); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action231::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (0, ___symbol, 67) + } + pub(crate) fn ___reduce119< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = Alternative, ";" => ActionFn(35); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action35::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 68) + } + pub(crate) fn ___reduce120< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = "{", Comma, "}", ";" => ActionFn(36); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant41(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action36::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (4, ___symbol, 68) + } + pub(crate) fn ___reduce121< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation = "#", "[", Id, "]" => ActionFn(414); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action414::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); + (4, ___symbol, 69) + } + pub(crate) fn ___reduce122< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = => ActionFn(175); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action175::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (0, ___symbol, 70) + } + pub(crate) fn ___reduce123< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = Annotation+ => ActionFn(176); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action176::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 70) + } + pub(crate) fn ___reduce124< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation => ActionFn(185); + let ___sym0 = ___pop_Variant42(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action185::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 71) + } + pub(crate) fn ___reduce125< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation+, Annotation => ActionFn(186); + let ___sym1 = ___pop_Variant42(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action186::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (2, ___symbol, 71) + } + pub(crate) fn ___reduce126< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(415); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action415::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); + (5, ___symbol, 72) + } + pub(crate) fn ___reduce127< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = => ActionFn(121); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action121::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (0, ___symbol, 73) + } + pub(crate) fn ___reduce128< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = AssociatedType+ => ActionFn(122); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action122::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 73) + } + pub(crate) fn ___reduce129< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType => ActionFn(247); + let ___sym0 = ___pop_Variant44(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action247::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 74) + } + pub(crate) fn ___reduce130< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(248); + let ___sym1 = ___pop_Variant44(___symbols); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action248::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (2, ___symbol, 74) + } + pub(crate) fn ___reduce131< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Alternative => ActionFn(438); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action438::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce132< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(439); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action439::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (0, ___symbol, 75) + } + pub(crate) fn ___reduce133< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Alternative => ActionFn(440); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action440::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 75) + } + pub(crate) fn ___reduce134< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(441); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action441::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce135< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Conversion => ActionFn(454); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action454::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce136< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(455); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action455::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (0, ___symbol, 76) + } + pub(crate) fn ___reduce137< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Conversion => ActionFn(456); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action456::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (2, ___symbol, 76) + } + pub(crate) fn ___reduce138< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(457); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action457::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce139< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarParameter => ActionFn(476); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action476::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce140< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(477); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action477::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (0, ___symbol, 77) + } + pub(crate) fn ___reduce141< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarParameter => ActionFn(478); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action478::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (2, ___symbol, 77) + } + pub(crate) fn ___reduce142< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(479); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action479::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce143< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarWhereClause => ActionFn(504); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action504::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce144< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(505); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action505::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (0, ___symbol, 78) + } + pub(crate) fn ___reduce145< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarWhereClause => ActionFn(506); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action506::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 78) + } + pub(crate) fn ___reduce146< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(507); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action507::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce147< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Lifetime => ActionFn(540); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action540::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce148< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(541); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action541::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 79) + } + pub(crate) fn ___reduce149< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Lifetime => ActionFn(542); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action542::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 79) + } + pub(crate) fn ___reduce150< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(543); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action543::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce151< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = MatchItem => ActionFn(552); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action552::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce152< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(553); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action553::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (0, ___symbol, 80) + } + pub(crate) fn ___reduce153< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, MatchItem => ActionFn(554); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action554::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (2, ___symbol, 80) + } + pub(crate) fn ___reduce154< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(555); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action555::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce155< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = NotMacroId => ActionFn(556); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action556::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce156< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(557); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action557::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (0, ___symbol, 81) + } + pub(crate) fn ___reduce157< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, NotMacroId => ActionFn(558); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action558::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (2, ___symbol, 81) + } + pub(crate) fn ___reduce158< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(559); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action559::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce159< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Pattern => ActionFn(560); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action560::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce160< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(561); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action561::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (0, ___symbol, 82) + } + pub(crate) fn ___reduce161< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Pattern => ActionFn(562); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action562::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (2, ___symbol, 82) + } + pub(crate) fn ___reduce162< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(563); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action563::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce163< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Symbol => ActionFn(630); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action630::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce164< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(631); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action631::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (0, ___symbol, 83) + } + pub(crate) fn ___reduce165< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Symbol => ActionFn(632); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action632::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (2, ___symbol, 83) + } + pub(crate) fn ___reduce166< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(633); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action633::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce167< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeBoundParameter => ActionFn(638); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action638::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce168< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(639); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action639::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (0, ___symbol, 84) + } + pub(crate) fn ___reduce169< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeBoundParameter => ActionFn(640); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action640::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (2, ___symbol, 84) + } + pub(crate) fn ___reduce170< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(641); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action641::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce171< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeParameter => ActionFn(642); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action642::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce172< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(643); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action643::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (0, ___symbol, 85) + } + pub(crate) fn ___reduce173< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeParameter => ActionFn(644); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action644::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (2, ___symbol, 85) + } + pub(crate) fn ___reduce174< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(645); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action645::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce175< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRef => ActionFn(646); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action646::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce176< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(647); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action647::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 86) + } + pub(crate) fn ___reduce177< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRef => ActionFn(648); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action648::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 86) + } + pub(crate) fn ___reduce178< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(649); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action649::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce179< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRefOrLifetime => ActionFn(650); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action650::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce180< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(651); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action651::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 87) + } + pub(crate) fn ___reduce181< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRefOrLifetime => ActionFn(652); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action652::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 87) + } + pub(crate) fn ___reduce182< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(653); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action653::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce183< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Cond = NotMacroId, CondOp, StringLiteral => ActionFn(416); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant56(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action416::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (3, ___symbol, 88) + } + pub(crate) fn ___reduce184< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "==" => ActionFn(44); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action44::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce185< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!=" => ActionFn(45); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action45::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce186< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "~~" => ActionFn(46); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action46::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce187< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!~" => ActionFn(47); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action47::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce189< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = Conversion => ActionFn(254); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action254::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (1, ___symbol, 91) + } + pub(crate) fn ___reduce190< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = => ActionFn(255); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action255::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (0, ___symbol, 91) + } + pub(crate) fn ___reduce191< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(418); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant46(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action418::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); + (5, ___symbol, 92) + } + pub(crate) fn ___reduce192< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Escape = "Escape" => ActionFn(103); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action103::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 93) + } + pub(crate) fn ___reduce193< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = => ActionFn(628); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action628::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (0, ___symbol, 94) + } + pub(crate) fn ___reduce194< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = Symbol+ => ActionFn(629); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action629::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (1, ___symbol, 94) + } + pub(crate) fn ___reduce195< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, "}" => ActionFn(448); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action448::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce196< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(449); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant45(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action449::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce197< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(450); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action450::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce198< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(451); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant45(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action451::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 95) + } + pub(crate) fn ___reduce199< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", "}" => ActionFn(452); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action452::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (3, ___symbol, 95) + } + pub(crate) fn ___reduce200< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(453); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce201< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern = Id, ":", Pattern => ActionFn(421); + let ___sym2 = ___pop_Variant26(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (3, ___symbol, 96) + } + pub(crate) fn ___reduce202< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = FieldPattern => ActionFn(113); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action113::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (1, ___symbol, 97) + } + pub(crate) fn ___reduce203< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = => ActionFn(114); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action114::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (0, ___symbol, 97) + } + pub(crate) fn ___reduce204< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll = "for", "<", Comma, ">" => ActionFn(12); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action12::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (4, ___symbol, 98) + } + pub(crate) fn ___reduce205< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = ForAll => ActionFn(160); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action160::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (1, ___symbol, 99) + } + pub(crate) fn ___reduce206< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = => ActionFn(161); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action161::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (0, ___symbol, 99) + } + pub(crate) fn ___reduce207< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(654); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action654::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce208< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(655); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action655::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce209< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(656); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action656::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce210< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(657); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action657::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce211< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(658); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action658::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce212< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(659); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action659::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce213< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(660); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action660::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce214< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(661); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action661::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce215< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(662); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action662::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce216< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(663); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action663::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce217< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(664); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action664::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce218< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce219< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";" => ActionFn(666); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce220< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(667); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce221< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(668); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce222< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(669); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce223< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(670); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce224< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(671); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce225< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(672); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce226< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(673); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce227< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(674); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce228< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(675); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce229< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(676); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce230< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(677); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce231< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(678); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce232< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(679); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce233< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(680); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce234< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(681); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce235< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";" => ActionFn(682); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action682::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (2, ___symbol, 100) + } + pub(crate) fn ___reduce236< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";" => ActionFn(683); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce237< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(684); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce238< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(685); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce239< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(686); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce240< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(687); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce241< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(688); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce242< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(689); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce243< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(690); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce244< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(691); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce245< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(692); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce246< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(693); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action693::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce247< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(694); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce248< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(695); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce249< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(696); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce250< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce251< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(698); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce252< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(699); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce253< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(700); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce254< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(701); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce255< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(702); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce256< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(703); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce257< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(704); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce258< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce259< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(706); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce260< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(707); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce261< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(708); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce262< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(709); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce263< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(710); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce264< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(711); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce265< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(712); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce266< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce267< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";", GrammarItem+ => ActionFn(714); + let ___sym2 = ___pop_Variant64(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce268< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(715); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce269< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(716); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce270< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(717); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce271< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(718); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce272< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(719); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce273< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(720); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce274< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(721); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce275< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(722); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce276< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(723); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce277< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(724); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce278< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(725); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce279< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(726); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce280< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(727); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce281< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(728); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce282< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce283< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(730); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce284< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(731); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce285< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(732); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce286< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(733); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce287< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(734); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce288< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(735); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce289< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(736); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce290< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(737); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce291< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(738); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce292< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(739); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce293< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(740); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce294< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(741); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce295< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(742); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce296< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(743); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce297< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(744); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce298< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(745); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce299< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";" => ActionFn(746); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce300< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(747); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce301< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(748); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce302< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(749); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce303< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(750); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce304< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(751); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce305< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(752); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce306< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(753); + let ___sym8 = ___pop_Variant64(___symbols); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym8.2.clone(); + let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (9, ___symbol, 100) + } + pub(crate) fn ___reduce307< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(754); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce308< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(755); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce309< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(756); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce310< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(757); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce311< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(758); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce312< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(759); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce313< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(760); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce314< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce315< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(762); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce316< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(763); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce317< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(764); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce318< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(765); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce319< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(766); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce320< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(767); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce321< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(768); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce322< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce323< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(770); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce324< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(771); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce325< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(772); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce326< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(773); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce327< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(774); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce328< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(775); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce329< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(776); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce330< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce331< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(778); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce332< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(779); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce333< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(780); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce334< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(781); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce335< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Use => ActionFn(22); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action22::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce336< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = MatchToken => ActionFn(23); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action23::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce337< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = ExternToken => ActionFn(24); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action24::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce338< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Nonterminal => ActionFn(25); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action25::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce339< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = => ActionFn(165); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action165::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 102) + } + pub(crate) fn ___reduce340< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = GrammarItem+ => ActionFn(166); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action166::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 102) + } + pub(crate) fn ___reduce341< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem => ActionFn(187); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action187::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 103) + } + pub(crate) fn ___reduce342< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(188); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action188::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 103) + } + pub(crate) fn ___reduce343< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter = Id, ":", TypeRef => ActionFn(21); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (3, ___symbol, 104) + } + pub(crate) fn ___reduce344< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = GrammarParameter => ActionFn(220); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action220::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (1, ___symbol, 105) + } + pub(crate) fn ___reduce345< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = => ActionFn(221); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action221::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (0, ___symbol, 105) + } + pub(crate) fn ___reduce346< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters = "(", Comma, ")" => ActionFn(20); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (3, ___symbol, 106) + } + pub(crate) fn ___reduce347< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = GrammarParameters => ActionFn(169); + let ___sym0 = ___pop_Variant47(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action169::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (1, ___symbol, 107) + } + pub(crate) fn ___reduce348< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = => ActionFn(170); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action170::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (0, ___symbol, 107) + } + pub(crate) fn ___reduce349< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters = "<", Comma, ">" => ActionFn(6); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action6::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (3, ___symbol, 108) + } + pub(crate) fn ___reduce350< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = GrammarTypeParameters => ActionFn(171); + let ___sym0 = ___pop_Variant54(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action171::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (1, ___symbol, 109) + } + pub(crate) fn ___reduce351< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = => ActionFn(172); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action172::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (0, ___symbol, 109) + } + pub(crate) fn ___reduce352< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = Lifetime, ":", Plus => ActionFn(10); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action10::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce353< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(462); + let ___sym3 = ___pop_Variant81(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (4, ___symbol, 110) + } + pub(crate) fn ___reduce354< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(463); + let ___sym2 = ___pop_Variant81(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce355< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = GrammarWhereClause => ActionFn(194); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action194::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (1, ___symbol, 111) + } + pub(crate) fn ___reduce356< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = => ActionFn(195); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action195::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (0, ___symbol, 111) + } + pub(crate) fn ___reduce357< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses = "where", Comma => ActionFn(9); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action9::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 112) + } + pub(crate) fn ___reduce358< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = GrammarWhereClauses => ActionFn(167); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action167::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (1, ___symbol, 113) + } + pub(crate) fn ___reduce359< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = => ActionFn(168); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action168::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (0, ___symbol, 113) + } + pub(crate) fn ___reduce360< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "Id" => ActionFn(101); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action101::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce361< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "MacroId" => ActionFn(102); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action102::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce362< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime = "Lifetime" => ActionFn(104); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action104::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 115) + } + pub(crate) fn ___reduce363< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = Lifetime => ActionFn(131); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action131::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (1, ___symbol, 116) + } + pub(crate) fn ___reduce364< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = => ActionFn(132); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action132::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (0, ___symbol, 116) + } + pub(crate) fn ___reduce365< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MacroId = "MacroId" => ActionFn(99); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action99::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 117) + } + pub(crate) fn ___reduce366< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchContents = Comma => ActionFn(79); + let ___sym0 = ___pop_Variant50(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action79::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); + (1, ___symbol, 118) + } + pub(crate) fn ___reduce367< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = "_" => ActionFn(423); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action423::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce368< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = MatchSymbol => ActionFn(424); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action424::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce370< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = MatchItem => ActionFn(249); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action249::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (1, ___symbol, 120) + } + pub(crate) fn ___reduce371< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = => ActionFn(250); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action250::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (0, ___symbol, 120) + } + pub(crate) fn ___reduce372< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchMapping = Terminal => ActionFn(84); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action84::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 121) + } + pub(crate) fn ___reduce373< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchSymbol = QuotedLiteral => ActionFn(83); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action83::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 122) + } + pub(crate) fn ___reduce374< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchToken = MatchTokenInt => ActionFn(76); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action76::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 123) + } + pub(crate) fn ___reduce375< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(77); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant71(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action77::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (5, ___symbol, 124) + } + pub(crate) fn ___reduce376< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(426); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant71(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action426::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (4, ___symbol, 124) + } + pub(crate) fn ___reduce377< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(444); + let ___sym5 = ___pop_Variant41(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 125) + } + pub(crate) fn ___reduce378< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(445); + let ___sym6 = ___pop_Variant41(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant3(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action445::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (7, ___symbol, 125) + } + pub(crate) fn ___reduce379< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(446); + let ___sym3 = ___pop_Variant41(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action446::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 125) + } + pub(crate) fn ___reduce380< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(447); + let ___sym4 = ___pop_Variant41(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action447::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 125) + } + pub(crate) fn ___reduce381< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = MacroId, "<", Comma, ">" => ActionFn(32); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant51(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (4, ___symbol, 126) + } + pub(crate) fn ___reduce382< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = NotMacroId => ActionFn(33); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action33::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce383< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = "Escape" => ActionFn(34); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action34::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce384< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId = "Id" => ActionFn(100); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action100::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 127) + } + pub(crate) fn ___reduce385< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = NotMacroId => ActionFn(225); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action225::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (1, ___symbol, 128) + } + pub(crate) fn ___reduce386< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = => ActionFn(226); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action226::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (0, ___symbol, 128) + } + pub(crate) fn ___reduce387< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", Id => ActionFn(339); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action339::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce388< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", ( "::")+, Id => ActionFn(340); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant21(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action340::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (3, ___symbol, 129) + } + pub(crate) fn ___reduce389< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = Id => ActionFn(341); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action341::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (1, ___symbol, 129) + } + pub(crate) fn ___reduce390< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = ( "::")+, Id => ActionFn(342); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action342::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce391< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern = PatternKind => ActionFn(429); + let ___sym0 = ___pop_Variant80(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action429::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 130) + } + pub(crate) fn ___reduce392< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = Pattern => ActionFn(259); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action259::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (1, ___symbol, 131) + } + pub(crate) fn ___reduce393< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = => ActionFn(260); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action260::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (0, ___symbol, 131) + } + pub(crate) fn ___reduce394< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "(", Comma, ")" => ActionFn(89); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant52(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action89::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce395< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", FieldPattern, "}" => ActionFn(458); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant14(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce396< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "}" => ActionFn(459); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce397< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(460); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant14(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce398< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "}" => ActionFn(461); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce399< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "..", "}" => ActionFn(327); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action327::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce400< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(328); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce401< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "_" => ActionFn(92); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action92::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce402< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = ".." => ActionFn(93); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action93::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce403< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "<", TypeRef, ">" => ActionFn(94); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action94::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce404< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "(", Comma, ")" => ActionFn(95); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant52(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action95::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce405< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "CharLiteral" => ActionFn(96); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action96::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce406< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path => ActionFn(97); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action97::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce407< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = Lifetime => ActionFn(544); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action544::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce408< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(545); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action545::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 133) + } + pub(crate) fn ___reduce409< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, Lifetime => ActionFn(546); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action546::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 133) + } + pub(crate) fn ___reduce410< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(547); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action547::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce411< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = TypeBound => ActionFn(634); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action634::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce412< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(635); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action635::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (0, ___symbol, 134) + } + pub(crate) fn ___reduce413< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, TypeBound => ActionFn(636); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action636::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (2, ___symbol, 134) + } + pub(crate) fn ___reduce414< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(637); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action637::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce415< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = StringLiteral => ActionFn(108); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action108::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce416< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = RegexLiteral => ActionFn(109); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action109::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce417< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedTerminal = QuotedLiteral => ActionFn(107); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action107::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 136) + } + pub(crate) fn ___reduce418< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RegexLiteral = "RegexLiteral" => ActionFn(111); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action111::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 137) + } + pub(crate) fn ___reduce419< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "+" => ActionFn(54); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action54::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce420< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "*" => ActionFn(55); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action55::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce421< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "?" => ActionFn(56); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action56::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce422< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute = "#![...]" => ActionFn(112); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action112::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); + (1, ___symbol, 139) + } + pub(crate) fn ___reduce423< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = => ActionFn(179); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action179::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (0, ___symbol, 140) + } + pub(crate) fn ___reduce424< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = ShebangAttribute+ => ActionFn(180); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action180::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 140) + } + pub(crate) fn ___reduce425< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute => ActionFn(181); + let ___sym0 = ___pop_Variant83(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action181::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 141) + } + pub(crate) fn ___reduce426< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(182); + let ___sym1 = ___pop_Variant83(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action182::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (2, ___symbol, 141) + } + pub(crate) fn ___reduce427< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // StringLiteral = "StringLiteral" => ActionFn(110); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action110::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 142) + } + pub(crate) fn ___reduce428< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(430); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant28(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (5, ___symbol, 143) + } + pub(crate) fn ___reduce429< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Symbol0, ">" => ActionFn(431); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action431::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (3, ___symbol, 143) + } + pub(crate) fn ___reduce430< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = Symbol0 => ActionFn(51); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action51::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 143) + } + pub(crate) fn ___reduce431< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = => ActionFn(134); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action134::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 144) + } + pub(crate) fn ___reduce432< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = Symbol+ => ActionFn(135); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action135::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 144) + } + pub(crate) fn ___reduce433< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol => ActionFn(141); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action141::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 145) + } + pub(crate) fn ___reduce434< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol+, Symbol => ActionFn(142); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action142::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 145) + } + pub(crate) fn ___reduce435< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol1 => ActionFn(52); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action52::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 146) + } + pub(crate) fn ___reduce436< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol0, RepeatOp => ActionFn(432); + let ___sym1 = ___pop_Variant82(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action432::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 146) + } + pub(crate) fn ___reduce437< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol1 = SymbolKind1 => ActionFn(433); + let ___sym0 = ___pop_Variant86(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action433::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 147) + } + pub(crate) fn ___reduce438< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = Symbol => ActionFn(235); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action235::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (1, ___symbol, 148) + } + pub(crate) fn ___reduce439< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = => ActionFn(236); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action236::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (0, ___symbol, 148) + } + pub(crate) fn ___reduce440< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(58); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant53(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action58::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (4, ___symbol, 149) + } + pub(crate) fn ___reduce441< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = QuotedTerminal => ActionFn(59); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action59::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce442< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "Id" => ActionFn(60); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action60::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce443< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = Escape => ActionFn(61); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action61::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce444< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(62); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant59(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action62::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (3, ___symbol, 149) + } + pub(crate) fn ___reduce445< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@L" => ActionFn(63); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action63::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce446< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@R" => ActionFn(64); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action64::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce447< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "!" => ActionFn(65); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action65::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce448< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = QuotedTerminal => ActionFn(105); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action105::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce449< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = "Id" => ActionFn(106); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action106::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce450< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Lifetime => ActionFn(14); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action14::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce451< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(464); + let ___sym6 = ___pop_Variant3(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (7, ___symbol, 151) + } + pub(crate) fn ___reduce452< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(465); + let ___sym5 = ___pop_Variant3(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action465::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (6, ___symbol, 151) + } + pub(crate) fn ___reduce453< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(466); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action466::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce454< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")" => ActionFn(467); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action467::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce455< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(468); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant5(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action468::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce456< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "<", Comma, ">" => ActionFn(469); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant5(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce457< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path => ActionFn(470); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action470::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 151) + } + pub(crate) fn ___reduce458< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path => ActionFn(471); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action471::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce459< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = TypeBound => ActionFn(205); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action205::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (1, ___symbol, 152) + } + pub(crate) fn ___reduce460< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = => ActionFn(206); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action206::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (0, ___symbol, 152) + } + pub(crate) fn ___reduce461< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Lifetime => ActionFn(17); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action17::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce462< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = TypeRef => ActionFn(18); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action18::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce463< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Id, "=", TypeRef => ActionFn(19); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action19::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (3, ___symbol, 153) + } + pub(crate) fn ___reduce464< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = TypeBoundParameter => ActionFn(215); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action215::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (1, ___symbol, 154) + } + pub(crate) fn ___reduce465< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = => ActionFn(216); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action216::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (0, ___symbol, 154) + } + pub(crate) fn ___reduce466< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBounds = Plus => ActionFn(13); + let ___sym0 = ___pop_Variant81(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action13::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 155) + } + pub(crate) fn ___reduce467< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Lifetime => ActionFn(7); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action7::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce468< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Id => ActionFn(8); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action8::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce469< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = TypeParameter => ActionFn(189); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action189::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (1, ___symbol, 157) + } + pub(crate) fn ___reduce470< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = => ActionFn(190); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action190::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (0, ___symbol, 157) + } + pub(crate) fn ___reduce471< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "(", Comma, ")" => ActionFn(66); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant55(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action66::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce472< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "#", Symbol, "#" => ActionFn(67); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action67::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce473< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(548); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action548::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce474< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", "mut", TypeRef => ActionFn(549); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action549::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce475< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, TypeRef => ActionFn(550); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action550::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce476< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", TypeRef => ActionFn(551); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action551::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 158) + } + pub(crate) fn ___reduce477< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path, "<", Comma, ">" => ActionFn(69); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce478< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path => ActionFn(70); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action70::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 158) + } + pub(crate) fn ___reduce479< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = TypeRef => ActionFn(210); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action210::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 159) + } + pub(crate) fn ___reduce480< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = => ActionFn(211); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action211::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 159) + } + pub(crate) fn ___reduce481< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = TypeRef => ActionFn(71); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action71::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce482< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = Lifetime => ActionFn(72); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action72::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce483< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(240); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action240::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 161) + } + pub(crate) fn ___reduce484< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = => ActionFn(241); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action241::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 161) + } + pub(crate) fn ___reduce485< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use = "use", ";" => ActionFn(26); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action26::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (2, ___symbol, 162) + } + pub(crate) fn ___reduce486< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = => ActionFn(177); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action177::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 163) + } + pub(crate) fn ___reduce487< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = Use+ => ActionFn(178); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action178::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 163) + } + pub(crate) fn ___reduce488< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use => ActionFn(183); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action183::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 164) + } + pub(crate) fn ___reduce489< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use+, Use => ActionFn(184); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action184::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 164) + } + pub(crate) fn ___reduce490< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub", "(", Path, ")" => ActionFn(27); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant78(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action27::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (4, ___symbol, 165) + } + pub(crate) fn ___reduce491< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub" => ActionFn(28); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action28::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (1, ___symbol, 165) + } + pub(crate) fn ___reduce492< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = => ActionFn(314); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action314::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (0, ___symbol, 165) + } + pub(crate) fn ___reduce494< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___GrammarWhereClauses = GrammarWhereClauses => ActionFn(1); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action1::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 167) + } + pub(crate) fn ___reduce495< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___MatchMapping = MatchMapping => ActionFn(3); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action3::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 168) + } + pub(crate) fn ___reduce496< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Pattern = Pattern => ActionFn(4); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action4::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 169) + } + pub(crate) fn ___reduce497< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___TypeRef = TypeRef => ActionFn(2); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action2::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 170) + } +} +pub use self::___parse___Grammar::GrammarParser; + +#[cfg_attr(rustfmt, rustfmt_skip)] +mod ___parse___GrammarWhereClauses { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] + + use string_cache::DefaultAtom as Atom; + use grammar::parse_tree::*; + use grammar::pattern::*; + use std::iter::once; + use tok::{self, Tok}; + use util::strip; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as ___lalrpop_util; + use super::___ToTriple; + #[allow(dead_code)] + pub enum ___Symbol<'input> + { + Variant0(Tok<'input>), + Variant1(&'input str), + Variant2(::std::option::Option>), + Variant3(TypeRef), + Variant4(::std::option::Option), + Variant5(Vec>), + Variant6(::std::option::Option>>), + Variant7(Condition), + Variant8(::std::option::Option), + Variant9(()), + Variant10(Alternative), + Variant11(::std::vec::Vec), + Variant12(Conversion), + Variant13(::std::vec::Vec), + Variant14(FieldPattern), + Variant15(::std::vec::Vec>), + Variant16(Parameter), + Variant17(::std::vec::Vec), + Variant18(WhereClause), + Variant19(::std::vec::Vec>), + Variant20(Atom), + Variant21(::std::vec::Vec), + Variant22(MatchItem), + Variant23(::std::vec::Vec), + Variant24(NonterminalString), + Variant25(::std::vec::Vec), + Variant26(Pattern), + Variant27(::std::vec::Vec>), + Variant28(Symbol), + Variant29(::std::vec::Vec), + Variant30(TypeBound), + Variant31(::std::vec::Vec>), + Variant32(TypeBoundParameter), + Variant33(::std::vec::Vec>), + Variant34(TypeParameter), + Variant35(::std::vec::Vec), + Variant36(::std::vec::Vec), + Variant37(usize), + Variant38(ActionKind), + Variant39(::std::option::Option), + Variant40(::std::option::Option), + Variant41(Vec), + Variant42(Annotation), + Variant43(::std::vec::Vec), + Variant44(AssociatedType), + Variant45(::std::vec::Vec), + Variant46(Vec), + Variant47(Vec), + Variant48(Vec>), + Variant49(Vec), + Variant50(Vec), + Variant51(Vec), + Variant52(Vec>), + Variant53(Vec), + Variant54(Vec), + Variant55(Vec), + Variant56(ConditionOp), + Variant57(::std::option::Option), + Variant58(EnumToken), + Variant59(ExprSymbol), + Variant60(GrammarItem), + Variant61(::std::option::Option>), + Variant62(::std::option::Option>), + Variant63(Grammar), + Variant64(::std::vec::Vec), + Variant65(::std::option::Option), + Variant66(::std::option::Option>), + Variant67(::std::option::Option>), + Variant68(::std::option::Option>), + Variant69(::std::option::Option>>), + Variant70(::std::option::Option), + Variant71(MatchContents), + Variant72(::std::option::Option), + Variant73(TerminalString), + Variant74(TerminalLiteral), + Variant75(MatchToken), + Variant76((NonterminalString, Vec)), + Variant77(::std::option::Option), + Variant78(Path), + Variant79(::std::option::Option>), + Variant80(PatternKind), + Variant81(Vec>), + Variant82(RepeatOp), + Variant83(String), + Variant84(::std::vec::Vec), + Variant85(::std::option::Option), + Variant86(SymbolKind), + Variant87(::std::option::Option>), + Variant88(::std::option::Option>), + Variant89(::std::option::Option), + Variant90(Visibility), + } + const ___ACTION: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, -389, -389, 0, -389, -389, 0, 0, -389, 25, 0, -389, 0, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, -478, 0, -478, -478, 0, 0, -478, 0, 0, 27, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 13, 0, 14, 15, -176, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, -360, -360, 0, -360, -360, 0, 0, -360, -360, 0, -360, -360, 0, 0, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, -362, 0, -362, -362, 0, 0, -362, -362, 0, 0, -362, -362, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 0, 0, 0, -361, -361, 0, -361, -361, 0, 0, -361, -361, 0, -361, -361, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, -390, -390, 0, -390, -390, 0, 0, -390, 59, 0, -390, 0, 0, 0, 0, 0, 0, -390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, -41, 0, -41, -41, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, -41, -41, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + -443, 0, 0, -443, 0, 0, -443, -443, -443, -443, -443, 0, 0, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, -443, -443, -443, -443, 0, -443, -443, 0, -443, -443, -443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + -417, 0, 0, -417, 0, 0, -417, -417, -417, -417, -417, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, -417, -417, -417, -417, 0, -417, -417, 0, -417, -417, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + -441, 0, 0, -441, 0, 0, -441, -441, -441, -441, -441, 0, 0, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, -441, -441, -441, -441, 0, -441, -441, 0, -441, -441, -441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + -416, 0, 0, -416, 0, 0, -416, -416, -416, -416, -416, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, -416, -416, -416, -416, 0, -416, -416, 0, -416, -416, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + -415, 0, 0, -415, 0, 0, -415, -415, -415, -415, -415, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, -415, -415, -415, -415, 0, -415, -415, 0, -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + -430, 0, 0, -430, 0, 0, -430, -430, 79, 80, -430, 0, 0, 0, 0, 0, -430, 0, 0, 0, 0, 0, 0, -430, 81, -430, -430, 0, -430, -430, 0, -430, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + -435, 0, 0, -435, 0, 0, -435, -435, -435, -435, -435, 0, 0, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, -435, -435, -435, -435, 0, -435, -435, 0, -435, -435, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + -437, 0, 0, -437, 0, 0, -437, -437, -437, -437, -437, 0, 0, 0, 0, 0, -437, 0, 0, 0, 0, 0, 0, -437, -437, -437, -437, 0, -437, -437, 0, -437, -437, -437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + -447, 0, 0, -447, 0, 0, -447, -447, -447, -447, -447, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, -447, -447, -447, -447, 0, -447, -447, 0, -447, -447, -447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 39, 0, 0, 0, 0, 0, 40, -193, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 44, 87, 0, 88, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + -445, 0, 0, -445, 0, 0, -445, -445, -445, -445, -445, 0, 0, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, -445, -445, -445, -445, 0, -445, -445, 0, -445, -445, -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + -446, 0, 0, -446, 0, 0, -446, -446, -446, -446, -446, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, -446, -446, -446, -446, 0, -446, -446, 0, -446, -446, -446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + -192, 0, 0, -192, 0, 0, -192, -192, -192, -192, -192, 0, 0, 0, 0, 0, -192, 0, 0, 0, 0, 0, 0, -192, -192, -192, -192, 0, -192, -192, 0, -192, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + -442, 0, 0, -442, 0, 0, -442, -442, -442, -442, -442, 0, 0, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, -442, -442, -442, -442, 0, -442, -442, 0, -442, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + -418, 0, 0, -418, 0, 0, -418, -418, -418, -418, -418, 0, 0, 0, 0, 0, -418, 0, 0, 0, 0, 0, 0, -418, -418, -418, -418, 0, -418, -418, 0, -418, -418, -418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + -427, 0, 0, -427, 0, 0, -427, -427, -427, -427, -427, 0, 0, 0, 0, 0, -427, 0, 0, 0, 0, 0, 0, -427, -427, -427, -427, 0, -427, -427, 0, -427, -427, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, -476, 0, -476, -476, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 13, 0, 14, 15, -178, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 0, 0, 0, 0, -175, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, -387, -387, 0, -387, -387, 0, 0, -387, 25, 0, -387, 0, 0, 0, 0, 0, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, -42, 0, -42, -42, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, -42, -42, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, -407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -450, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 107, 0, 0, -458, -458, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, -164, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 0, 0, 0, 0, -472, 0, -472, -472, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + -436, 0, 0, -436, 0, 0, -436, -436, -436, -436, -436, 0, 0, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, -436, -436, -436, -436, 0, -436, -436, 0, -436, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + -420, 0, 0, -420, 0, 0, -420, -420, -420, -420, -420, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, -420, -420, -420, -420, 0, -420, -420, 0, -420, -420, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + -419, 0, 0, -419, 0, 0, -419, -419, -419, -419, -419, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, -419, -419, -419, -419, 0, -419, -419, 0, -419, -419, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + -421, 0, 0, -421, 0, 0, -421, -421, -421, -421, -421, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, -421, -421, -421, -421, 0, -421, -421, 0, -421, -421, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + -433, 0, 0, 0, 0, 0, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, -433, 0, -433, -433, 0, -433, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 39, 0, 0, 0, 0, 0, 40, -194, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 0, 0, 0, 0, -475, 0, -475, -475, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 0, 0, 0, 0, -474, 0, -474, -474, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 0, 0, 0, 0, -471, 0, -471, -471, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, -96, 0, -96, -96, -96, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, -388, -388, 0, -388, -388, 0, 0, -388, 59, 0, -388, 0, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 0, -477, 0, -477, -477, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 103 + 0, 0, 0, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 125, 0, 0, -457, -457, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 13, 0, 14, 15, -176, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, -81, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 109 + 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, -166, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 112 + -444, 0, 0, -444, 0, 0, -444, -444, -444, -444, -444, 0, 0, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, -444, -444, -444, -444, 0, -444, -444, 0, -444, -444, -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 113 + -434, 0, 0, 0, 0, 0, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, -434, 0, -434, -434, 0, -434, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 114 + 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + -429, 0, 0, -429, 0, 0, -429, -429, 0, 0, -429, 0, 0, 0, 0, 0, -429, 0, 0, 0, 0, 0, 0, -429, 0, -429, -429, 0, -429, -429, 0, -429, -429, -429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, -473, 0, -473, -473, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, -97, 0, -97, -97, -97, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, -204, 0, -204, -204, 0, 0, 0, 0, 0, 0, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 120 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, -82, -82, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 124 + 0, 0, 0, 13, 0, 14, 15, -176, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 125 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 126 + 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 127 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 128 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 129 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, 0, 0, 0, 25, 0, -389, 144, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 130 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 133 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 134 + -440, 0, 0, -440, 0, 0, -440, -440, -440, -440, -440, 0, 0, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, -440, -440, -440, -440, 0, -440, -440, 0, -440, -440, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 135 + -76, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, -76, -76, 0, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 136 + 0, 0, 0, 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 137 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 138 + 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 139 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 140 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -454, -454, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 142 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -456, -456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 143 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 144 + 0, 0, 0, -86, 0, -86, -86, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 145 + -77, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, -77, -77, 0, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 146 + -428, 0, 0, -428, 0, 0, -428, -428, 0, 0, -428, 0, 0, 0, 0, 0, -428, 0, 0, 0, 0, 0, 0, -428, 0, -428, -428, 0, -428, -428, 0, -428, -428, -428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 147 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -453, -453, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 148 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -455, -455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 149 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 150 + 0, 0, 0, -87, 0, -87, -87, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 151 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 152 + 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 153 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -452, -452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 154 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -451, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + const ___EOF_ACTION: &'static [i16] = &[ + // State 0 + 0, + // State 1 + -494, + // State 2 + -144, + // State 3 + -146, + // State 4 + 0, + // State 5 + -357, + // State 6 + 0, + // State 7 + -143, + // State 8 + -389, + // State 9 + 0, + // State 10 + -478, + // State 11 + 0, + // State 12 + 0, + // State 13 + 0, + // State 14 + 0, + // State 15 + 0, + // State 16 + -360, + // State 17 + -362, + // State 18 + -361, + // State 19 + 0, + // State 20 + -145, + // State 21 + -390, + // State 22 + 0, + // State 23 + -41, + // State 24 + 0, + // State 25 + -408, + // State 26 + 0, + // State 27 + -412, + // State 28 + 0, + // State 29 + 0, + // State 30 + 0, + // State 31 + 0, + // State 32 + 0, + // State 33 + 0, + // State 34 + 0, + // State 35 + 0, + // State 36 + 0, + // State 37 + 0, + // State 38 + 0, + // State 39 + 0, + // State 40 + 0, + // State 41 + 0, + // State 42 + 0, + // State 43 + 0, + // State 44 + 0, + // State 45 + 0, + // State 46 + 0, + // State 47 + 0, + // State 48 + 0, + // State 49 + -476, + // State 50 + 0, + // State 51 + 0, + // State 52 + 0, + // State 53 + 0, + // State 54 + 0, + // State 55 + -387, + // State 56 + 0, + // State 57 + -42, + // State 58 + 0, + // State 59 + -412, + // State 60 + -410, + // State 61 + -407, + // State 62 + -352, + // State 63 + 0, + // State 64 + 0, + // State 65 + 0, + // State 66 + 0, + // State 67 + 0, + // State 68 + -414, + // State 69 + 0, + // State 70 + -450, + // State 71 + -458, + // State 72 + -466, + // State 73 + -411, + // State 74 + -354, + // State 75 + 0, + // State 76 + -472, + // State 77 + 0, + // State 78 + 0, + // State 79 + 0, + // State 80 + 0, + // State 81 + 0, + // State 82 + 0, + // State 83 + 0, + // State 84 + 0, + // State 85 + 0, + // State 86 + 0, + // State 87 + 0, + // State 88 + -475, + // State 89 + 0, + // State 90 + -474, + // State 91 + 0, + // State 92 + -471, + // State 93 + 0, + // State 94 + -388, + // State 95 + 0, + // State 96 + 0, + // State 97 + 0, + // State 98 + -353, + // State 99 + -409, + // State 100 + -51, + // State 101 + 0, + // State 102 + -477, + // State 103 + 0, + // State 104 + -413, + // State 105 + -457, + // State 106 + 0, + // State 107 + 0, + // State 108 + -81, + // State 109 + 0, + // State 110 + 0, + // State 111 + 0, + // State 112 + 0, + // State 113 + 0, + // State 114 + 0, + // State 115 + 0, + // State 116 + -473, + // State 117 + 0, + // State 118 + 0, + // State 119 + 0, + // State 120 + 0, + // State 121 + -52, + // State 122 + 0, + // State 123 + -82, + // State 124 + 0, + // State 125 + 0, + // State 126 + 0, + // State 127 + 0, + // State 128 + 0, + // State 129 + 0, + // State 130 + 0, + // State 131 + 0, + // State 132 + 0, + // State 133 + 0, + // State 134 + 0, + // State 135 + 0, + // State 136 + 0, + // State 137 + 0, + // State 138 + 0, + // State 139 + 0, + // State 140 + -454, + // State 141 + 0, + // State 142 + -456, + // State 143 + 0, + // State 144 + 0, + // State 145 + 0, + // State 146 + 0, + // State 147 + -453, + // State 148 + -455, + // State 149 + 0, + // State 150 + 0, + // State 151 + 0, + // State 152 + 0, + // State 153 + -452, + // State 154 + -451, + ]; + const ___GOTO: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 35, 0, 0, 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 83, 0, 84, 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 0, 0, 0, 86, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 112, 0, 0, 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 114, 0, 0, 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 103 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 134, 0, 0, 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 112 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 113 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 114 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 34, 0, 0, 0, 137, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 120 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 124 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 125 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 126 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 127 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 128 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 129 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 130 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 133 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 134 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 135 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 136 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 137 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 138 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 139 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 140 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 142 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 144 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 145 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 146 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 147 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 148 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 149 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 150 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 151 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 152 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 153 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 154 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { + const ___TERMINAL: &'static [&'static str] = &[ + r###""!""###, + r###""!=""###, + r###""!~""###, + r###""#""###, + r###""#![...]""###, + r###""&""###, + r###""(""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""->""###, + r###""..""###, + r###"":""###, + r###""::""###, + r###"";""###, + r###""<""###, + r###""=""###, + r###""==""###, + r###""=>""###, + r###""=>?""###, + r###""=>@L""###, + r###""=>@R""###, + r###"">""###, + r###""?""###, + r###""@L""###, + r###""@R""###, + r###""CharLiteral""###, + r###""Escape""###, + r###""Id""###, + r###""Lifetime""###, + r###""MacroId""###, + r###""RegexLiteral""###, + r###""StringLiteral""###, + r###""[""###, + r###""]""###, + r###""_""###, + r###""else""###, + r###""enum""###, + r###""extern""###, + r###""for""###, + r###""grammar""###, + r###""if""###, + r###""match""###, + r###""mut""###, + r###""pub""###, + r###""type""###, + r###""use""###, + r###""where""###, + r###""{""###, + r###""}""###, + r###""~~""###, + ]; + ___ACTION[(___state * 52)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { + if state == 0 { + None + } else { + Some(terminal.to_string()) + } + }).collect() + } + pub struct GrammarWhereClausesParser { + _priv: (), + } + + impl GrammarWhereClausesParser { + pub fn new() -> GrammarWhereClausesParser { + GrammarWhereClausesParser { + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + ___TOKEN: ___ToTriple<'input, Error=tok::Error>, + ___TOKENS: IntoIterator, + >( + &self, + text: &'input str, + ___tokens0: ___TOKENS, + ) -> Result>, ___lalrpop_util::ParseError, tok::Error>> + { + let ___tokens = ___tokens0.into_iter(); + let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); + let mut ___states = vec![0_i16]; + let mut ___symbols = vec![]; + let mut ___integer; + let mut ___lookahead; + let ___last_location = &mut Default::default(); + '___shift: loop { + ___lookahead = match ___tokens.next() { + Some(Ok(v)) => v, + None => break '___shift, + Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), + }; + *___last_location = ___lookahead.2.clone(); + ___integer = match ___lookahead.1 { + Tok::Bang if true => 0, + Tok::BangEquals if true => 1, + Tok::BangTilde if true => 2, + Tok::Hash if true => 3, + Tok::ShebangAttribute(_) if true => 4, + Tok::Ampersand if true => 5, + Tok::LeftParen if true => 6, + Tok::RightParen if true => 7, + Tok::Star if true => 8, + Tok::Plus if true => 9, + Tok::Comma if true => 10, + Tok::MinusGreaterThan if true => 11, + Tok::DotDot if true => 12, + Tok::Colon if true => 13, + Tok::ColonColon if true => 14, + Tok::Semi if true => 15, + Tok::LessThan if true => 16, + Tok::Equals if true => 17, + Tok::EqualsEquals if true => 18, + Tok::EqualsGreaterThanCode(_) if true => 19, + Tok::EqualsGreaterThanQuestionCode(_) if true => 20, + Tok::EqualsGreaterThanLookahead if true => 21, + Tok::EqualsGreaterThanLookbehind if true => 22, + Tok::GreaterThan if true => 23, + Tok::Question if true => 24, + Tok::Lookahead if true => 25, + Tok::Lookbehind if true => 26, + Tok::CharLiteral(_) if true => 27, + Tok::Escape(_) if true => 28, + Tok::Id(_) if true => 29, + Tok::Lifetime(_) if true => 30, + Tok::MacroId(_) if true => 31, + Tok::RegexLiteral(_) if true => 32, + Tok::StringLiteral(_) if true => 33, + Tok::LeftBracket if true => 34, + Tok::RightBracket if true => 35, + Tok::Underscore if true => 36, + Tok::Else if true => 37, + Tok::Enum if true => 38, + Tok::Extern if true => 39, + Tok::For if true => 40, + Tok::Grammar if true => 41, + Tok::If if true => 42, + Tok::Match if true => 43, + Tok::Mut if true => 44, + Tok::Pub if true => 45, + Tok::Type if true => 46, + Tok::Use(_) if true => 47, + Tok::Where if true => 48, + Tok::LeftBrace if true => 49, + Tok::RightBrace if true => 50, + Tok::TildeTilde if true => 51, + _ => { + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: Some(___lookahead), + expected: ___expected_tokens(___state), + }; + return Err(___error); + } + }; + '___inner: loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___ACTION[___state * 52 + ___integer]; + if ___action > 0 { + let ___symbol = match ___integer { + 0 => match ___lookahead.1 { + ___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 1 => match ___lookahead.1 { + ___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 2 => match ___lookahead.1 { + ___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 3 => match ___lookahead.1 { + ___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 4 => match ___lookahead.1 { + Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 5 => match ___lookahead.1 { + ___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 6 => match ___lookahead.1 { + ___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 7 => match ___lookahead.1 { + ___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 8 => match ___lookahead.1 { + ___tok @ Tok::Star => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 9 => match ___lookahead.1 { + ___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 10 => match ___lookahead.1 { + ___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 11 => match ___lookahead.1 { + ___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 12 => match ___lookahead.1 { + ___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 13 => match ___lookahead.1 { + ___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 14 => match ___lookahead.1 { + ___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 15 => match ___lookahead.1 { + ___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 16 => match ___lookahead.1 { + ___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 17 => match ___lookahead.1 { + ___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 18 => match ___lookahead.1 { + ___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 19 => match ___lookahead.1 { + Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 20 => match ___lookahead.1 { + Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 21 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 22 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 23 => match ___lookahead.1 { + ___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 24 => match ___lookahead.1 { + ___tok @ Tok::Question => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 25 => match ___lookahead.1 { + ___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 26 => match ___lookahead.1 { + ___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 27 => match ___lookahead.1 { + Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 28 => match ___lookahead.1 { + Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 29 => match ___lookahead.1 { + Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 30 => match ___lookahead.1 { + Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 31 => match ___lookahead.1 { + Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 32 => match ___lookahead.1 { + Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 33 => match ___lookahead.1 { + Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 34 => match ___lookahead.1 { + ___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 35 => match ___lookahead.1 { + ___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 36 => match ___lookahead.1 { + ___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 37 => match ___lookahead.1 { + ___tok @ Tok::Else => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 38 => match ___lookahead.1 { + ___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 39 => match ___lookahead.1 { + ___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 40 => match ___lookahead.1 { + ___tok @ Tok::For => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 41 => match ___lookahead.1 { + ___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 42 => match ___lookahead.1 { + ___tok @ Tok::If => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 43 => match ___lookahead.1 { + ___tok @ Tok::Match => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 44 => match ___lookahead.1 { + ___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 45 => match ___lookahead.1 { + ___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 46 => match ___lookahead.1 { + ___tok @ Tok::Type => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 47 => match ___lookahead.1 { + Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 48 => match ___lookahead.1 { + ___tok @ Tok::Where => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 49 => match ___lookahead.1 { + ___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 50 => match ___lookahead.1 { + ___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 51 => match ___lookahead.1 { + ___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + _ => unreachable!(), + }; + ___states.push(___action - 1); + ___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); + continue '___shift; + } else if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + if r.is_err() { + return r; + } + return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); + } + } else { + let mut ___err_lookahead = Some(___lookahead); + let mut ___err_integer: Option = Some(___integer); + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___EOF_ACTION[___state]; + if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + return r; + } + } else { + let mut ___err_lookahead = None; + let mut ___err_integer: Option = None; + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + } + pub(crate) fn ___reduce< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> Option>,___lalrpop_util::ParseError, tok::Error>>> + { + let (___pop_states, ___symbol, ___nonterminal) = match -___action { + 1 => { + ___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 2 => { + ___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 3 => { + ___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 4 => { + ___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 5 => { + ___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 6 => { + ___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 7 => { + ___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 8 => { + ___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 9 => { + ___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 10 => { + ___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 11 => { + ___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 12 => { + ___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 13 => { + ___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 14 => { + ___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 15 => { + ___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 16 => { + ___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 17 => { + ___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 18 => { + ___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 19 => { + ___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 20 => { + ___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 21 => { + ___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 22 => { + ___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 23 => { + ___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 24 => { + ___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 25 => { + ___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 26 => { + ___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 27 => { + ___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 28 => { + ___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 29 => { + ___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 30 => { + ___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 31 => { + ___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 32 => { + ___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 33 => { + ___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 34 => { + ___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 35 => { + ___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 36 => { + ___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 37 => { + ___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 38 => { + ___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 39 => { + ___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 40 => { + ___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 41 => { + ___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 42 => { + ___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 43 => { + ___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 44 => { + ___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 45 => { + ___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 46 => { + ___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 47 => { + ___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 48 => { + ___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 49 => { + ___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 50 => { + ___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 51 => { + ___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 52 => { + ___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 53 => { + ___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 54 => { + ___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 55 => { + ___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 56 => { + ___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 57 => { + ___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 58 => { + ___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 59 => { + ___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 60 => { + ___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 61 => { + ___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 62 => { + ___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 63 => { + ___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 64 => { + ___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 65 => { + ___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 66 => { + ___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 67 => { + ___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 68 => { + ___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 69 => { + ___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 70 => { + ___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 71 => { + ___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 72 => { + ___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 73 => { + ___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 74 => { + ___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 75 => { + ___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 76 => { + ___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 77 => { + ___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 78 => { + ___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 79 => { + ___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 80 => { + ___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 81 => { + ___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 82 => { + ___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 83 => { + ___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 84 => { + ___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 85 => { + ___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 86 => { + ___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 87 => { + ___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 88 => { + ___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 89 => { + ___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 90 => { + ___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 91 => { + ___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 92 => { + ___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 93 => { + ___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 94 => { + ___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 95 => { + ___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 96 => { + ___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 97 => { + ___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 98 => { + ___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 99 => { + ___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 100 => { + ___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 101 => { + ___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 102 => { + ___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 103 => { + ___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 104 => { + ___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 105 => { + ___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 106 => { + ___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 107 => { + ___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 108 => { + ___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 109 => { + ___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 110 => { + ___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 111 => { + ___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 112 => { + ___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 113 => { + ___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 114 => { + ___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 115 => { + ___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 116 => { + ___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 117 => { + ___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 118 => { + ___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 119 => { + ___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 120 => { + ___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 121 => { + ___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 122 => { + ___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 123 => { + ___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 124 => { + ___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 125 => { + ___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 126 => { + ___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 127 => { + ___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 128 => { + ___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 129 => { + ___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 130 => { + ___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 131 => { + ___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 132 => { + ___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 133 => { + ___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 134 => { + ___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 135 => { + ___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 136 => { + ___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 137 => { + ___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 138 => { + ___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 139 => { + ___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 140 => { + ___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 141 => { + ___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 142 => { + ___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 143 => { + ___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 144 => { + ___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 145 => { + ___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 146 => { + ___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 147 => { + ___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 148 => { + ___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 149 => { + ___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 150 => { + ___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 151 => { + ___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 152 => { + ___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 153 => { + ___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 154 => { + ___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 155 => { + ___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 156 => { + ___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 157 => { + ___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 158 => { + ___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 159 => { + ___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 160 => { + ___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 161 => { + ___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 162 => { + ___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 163 => { + ___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 164 => { + ___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 165 => { + ___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 166 => { + ___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 167 => { + ___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 168 => { + ___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 169 => { + ___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 170 => { + ___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 171 => { + ___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 172 => { + ___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 173 => { + ___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 174 => { + ___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 175 => { + ___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 176 => { + ___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 177 => { + ___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 178 => { + ___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 179 => { + ___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 180 => { + ___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 181 => { + ___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 182 => { + ___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 183 => { + ___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 184 => { + ___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 185 => { + ___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 186 => { + ___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 187 => { + ___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 188 => { + // Conversion = Terminal, "=>" => ActionFn(417); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action417::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 90) + } + 189 => { + ___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 190 => { + ___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 191 => { + ___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 192 => { + ___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 193 => { + ___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 194 => { + ___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 195 => { + ___reduce195(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 196 => { + ___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 197 => { + ___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 198 => { + ___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 199 => { + ___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 200 => { + ___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 201 => { + ___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 202 => { + ___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 203 => { + ___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 204 => { + ___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 205 => { + ___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 206 => { + ___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 207 => { + ___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 208 => { + ___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 209 => { + ___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 210 => { + ___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 211 => { + ___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 212 => { + ___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 213 => { + ___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 214 => { + ___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 215 => { + ___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 216 => { + ___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 217 => { + ___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 218 => { + ___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 219 => { + ___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 220 => { + ___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 221 => { + ___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 222 => { + ___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 223 => { + ___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 224 => { + ___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 225 => { + ___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 226 => { + ___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 227 => { + ___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 228 => { + ___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 229 => { + ___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 230 => { + ___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 231 => { + ___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 232 => { + ___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 233 => { + ___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 234 => { + ___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 235 => { + ___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 236 => { + ___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 237 => { + ___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 238 => { + ___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 239 => { + ___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 240 => { + ___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 241 => { + ___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 242 => { + ___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 243 => { + ___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 244 => { + ___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 245 => { + ___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 246 => { + ___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 247 => { + ___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 248 => { + ___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 249 => { + ___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 250 => { + ___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 251 => { + ___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 252 => { + ___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 253 => { + ___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 254 => { + ___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 255 => { + ___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 256 => { + ___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 257 => { + ___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 258 => { + ___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 259 => { + ___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 260 => { + ___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 261 => { + ___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 262 => { + ___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 263 => { + ___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 264 => { + ___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 265 => { + ___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 266 => { + ___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 267 => { + ___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 268 => { + ___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 269 => { + ___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 270 => { + ___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 271 => { + ___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 272 => { + ___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 273 => { + ___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 274 => { + ___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 275 => { + ___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 276 => { + ___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 277 => { + ___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 278 => { + ___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 279 => { + ___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 280 => { + ___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 281 => { + ___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 282 => { + ___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 283 => { + ___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 284 => { + ___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 285 => { + ___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 286 => { + ___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 287 => { + ___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 288 => { + ___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 289 => { + ___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 290 => { + ___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 291 => { + ___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 292 => { + ___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 293 => { + ___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 294 => { + ___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 295 => { + ___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 296 => { + ___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 297 => { + ___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 298 => { + ___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 299 => { + ___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 300 => { + ___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 301 => { + ___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 302 => { + ___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 303 => { + ___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 304 => { + ___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 305 => { + ___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 306 => { + ___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 307 => { + ___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 308 => { + ___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 309 => { + ___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 310 => { + ___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 311 => { + ___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 312 => { + ___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 313 => { + ___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 314 => { + ___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 315 => { + ___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 316 => { + ___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 317 => { + ___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 318 => { + ___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 319 => { + ___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 320 => { + ___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 321 => { + ___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 322 => { + ___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 323 => { + ___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 324 => { + ___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 325 => { + ___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 326 => { + ___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 327 => { + ___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 328 => { + ___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 329 => { + ___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 330 => { + ___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 331 => { + ___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 332 => { + ___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 333 => { + ___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 334 => { + ___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 335 => { + ___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 336 => { + ___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 337 => { + ___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 338 => { + ___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 339 => { + ___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 340 => { + ___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 341 => { + ___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 342 => { + ___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 343 => { + ___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 344 => { + ___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 345 => { + ___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 346 => { + ___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 347 => { + ___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 348 => { + ___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 349 => { + ___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 350 => { + ___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 351 => { + ___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 352 => { + ___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 353 => { + ___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 354 => { + ___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 355 => { + ___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 356 => { + ___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 357 => { + ___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 358 => { + ___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 359 => { + ___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 360 => { + ___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 361 => { + ___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 362 => { + ___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 363 => { + ___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 364 => { + ___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 365 => { + ___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 366 => { + ___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 367 => { + ___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 368 => { + ___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 369 => { + // MatchItem = MatchSymbol, "=>" => ActionFn(425); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action425::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 119) + } + 370 => { + ___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 371 => { + ___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 372 => { + ___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 373 => { + ___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 374 => { + ___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 375 => { + ___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 376 => { + ___reduce376(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 377 => { + ___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 378 => { + ___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 379 => { + ___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 380 => { + ___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 381 => { + ___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 382 => { + ___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 383 => { + ___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 384 => { + ___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 385 => { + ___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 386 => { + ___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 387 => { + ___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 388 => { + ___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 389 => { + ___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 390 => { + ___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 391 => { + ___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 392 => { + ___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 393 => { + ___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 394 => { + ___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 395 => { + ___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 396 => { + ___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 397 => { + ___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 398 => { + ___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 399 => { + ___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 400 => { + ___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 401 => { + ___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 402 => { + ___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 403 => { + ___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 404 => { + ___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 405 => { + ___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 406 => { + ___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 407 => { + ___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 408 => { + ___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 409 => { + ___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 410 => { + ___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 411 => { + ___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 412 => { + ___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 413 => { + ___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 414 => { + ___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 415 => { + ___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 416 => { + ___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 417 => { + ___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 418 => { + ___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 419 => { + ___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 420 => { + ___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 421 => { + ___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 422 => { + ___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 423 => { + ___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 424 => { + ___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 425 => { + ___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 426 => { + ___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 427 => { + ___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 428 => { + ___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 429 => { + ___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 430 => { + ___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 431 => { + ___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 432 => { + ___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 433 => { + ___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 434 => { + ___reduce434(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 435 => { + ___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 436 => { + ___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 437 => { + ___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 438 => { + ___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 439 => { + ___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 440 => { + ___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 441 => { + ___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 442 => { + ___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 443 => { + ___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 444 => { + ___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 445 => { + ___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 446 => { + ___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 447 => { + ___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 448 => { + ___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 449 => { + ___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 450 => { + ___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 451 => { + ___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 452 => { + ___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 453 => { + ___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 454 => { + ___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 455 => { + ___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 456 => { + ___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 457 => { + ___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 458 => { + ___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 459 => { + ___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 460 => { + ___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 461 => { + ___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 462 => { + ___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 463 => { + ___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 464 => { + ___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 465 => { + ___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 466 => { + ___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 467 => { + ___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 468 => { + ___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 469 => { + ___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 470 => { + ___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 471 => { + ___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 472 => { + ___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 473 => { + ___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 474 => { + ___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 475 => { + ___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 476 => { + ___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 477 => { + ___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 478 => { + ___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 479 => { + ___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 480 => { + ___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 481 => { + ___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 482 => { + ___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 483 => { + ___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 484 => { + ___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 485 => { + ___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 486 => { + ___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 487 => { + ___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 488 => { + ___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 489 => { + ___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 490 => { + ___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 491 => { + ___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 492 => { + ___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 493 => { + ___reduce493(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 494 => { + // ___GrammarWhereClauses = GrammarWhereClauses => ActionFn(1); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action1::<>(text, ___sym0); + return Some(Ok(___nt)); + } + 495 => { + ___reduce495(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 496 => { + ___reduce496(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 497 => { + ___reduce497(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + _ => panic!("invalid action code {}", ___action) + }; + let ___states_len = ___states.len(); + ___states.truncate(___states_len - ___pop_states); + ___symbols.push(___symbol); + let ___state = *___states.last().unwrap() as usize; + let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; + ___states.push(___next_state); + None + } + fn ___pop_Variant9< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant76< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (NonterminalString, Vec), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant38< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ActionKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant10< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Alternative, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant42< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Annotation, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant44< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, AssociatedType, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant20< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Atom, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant7< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Condition, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant56< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ConditionOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant12< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Conversion, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant58< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, EnumToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant59< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ExprSymbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant14< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, FieldPattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant63< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Grammar, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant60< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, GrammarItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant71< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchContents, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant22< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant75< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant24< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, NonterminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant16< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Parameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant78< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Path, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant26< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Pattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant80< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, PatternKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant82< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, RepeatOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant83< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant28< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Symbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant86< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, SymbolKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant74< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalLiteral, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant73< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant0< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Tok<'input>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant30< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBound, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant32< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBoundParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant34< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant3< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeRef, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant41< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant49< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant46< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant50< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant51< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant47< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant52< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant53< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant81< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant5< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant54< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant55< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant48< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant90< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Visibility, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant18< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, WhereClause, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant37< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant39< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant40< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant70< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant8< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant57< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant61< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant72< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant77< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant65< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant79< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant85< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant2< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant87< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant88< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant89< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant4< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant62< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant66< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant6< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant67< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant69< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant68< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant11< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant43< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant45< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant21< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant13< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant15< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant64< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant23< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant25< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant17< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant27< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant84< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant29< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant31< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant33< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant35< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant36< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant19< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant1< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + pub(crate) fn ___reduce1< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = "::" => ActionFn(126); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action126::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 0) + } + pub(crate) fn ___reduce2< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = => ActionFn(127); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action127::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 0) + } + pub(crate) fn ___reduce3< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = "mut" => ActionFn(129); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action129::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 1) + } + pub(crate) fn ___reduce4< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = => ActionFn(130); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action130::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 1) + } + pub(crate) fn ___reduce5< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" ) = "->", TypeRef => ActionFn(156); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action156::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 2) + } + pub(crate) fn ___reduce6< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = "->", TypeRef => ActionFn(300); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action300::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 3) + } + pub(crate) fn ___reduce7< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = => ActionFn(155); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action155::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 3) + } + pub(crate) fn ___reduce8< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" ) = ":", TypeRef => ActionFn(147); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action147::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 4) + } + pub(crate) fn ___reduce9< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = ":", TypeRef => ActionFn(303); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action303::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 5) + } + pub(crate) fn ___reduce10< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = => ActionFn(146); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action146::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 5) + } + pub(crate) fn ___reduce11< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">") = "<", Comma, ">" => ActionFn(152); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action152::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (3, ___symbol, 6) + } + pub(crate) fn ___reduce12< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = "<", Comma, ">" => ActionFn(306); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action306::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (3, ___symbol, 7) + } + pub(crate) fn ___reduce13< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = => ActionFn(151); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action151::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (0, ___symbol, 7) + } + pub(crate) fn ___reduce14< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" ) = "if", Cond => ActionFn(140); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action140::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (2, ___symbol, 8) + } + pub(crate) fn ___reduce15< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = "if", Cond => ActionFn(309); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action309::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (2, ___symbol, 9) + } + pub(crate) fn ___reduce16< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = => ActionFn(139); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action139::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (0, ___symbol, 9) + } + pub(crate) fn ___reduce17< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // () = => ActionFn(148); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action148::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); + (0, ___symbol, 10) + } + pub(crate) fn ___reduce18< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Alternative, "," => ActionFn(234); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action234::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 11) + } + pub(crate) fn ___reduce19< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(232); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action232::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (0, ___symbol, 12) + } + pub(crate) fn ___reduce20< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(233); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action233::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (1, ___symbol, 12) + } + pub(crate) fn ___reduce21< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Alternative, "," => ActionFn(315); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action315::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (2, ___symbol, 13) + } + pub(crate) fn ___reduce22< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Alternative, "," => ActionFn(316); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action316::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (3, ___symbol, 13) + } + pub(crate) fn ___reduce23< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Conversion, "," => ActionFn(258); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action258::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 14) + } + pub(crate) fn ___reduce24< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(256); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action256::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (0, ___symbol, 15) + } + pub(crate) fn ___reduce25< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(257); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action257::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (1, ___symbol, 15) + } + pub(crate) fn ___reduce26< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Conversion, "," => ActionFn(319); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action319::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (2, ___symbol, 16) + } + pub(crate) fn ___reduce27< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Conversion, "," => ActionFn(320); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action320::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (3, ___symbol, 16) + } + pub(crate) fn ___reduce28< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = FieldPattern, "," => ActionFn(117); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action117::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (2, ___symbol, 17) + } + pub(crate) fn ___reduce29< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(115); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action115::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (0, ___symbol, 18) + } + pub(crate) fn ___reduce30< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(116); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action116::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (1, ___symbol, 18) + } + pub(crate) fn ___reduce31< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = FieldPattern, "," => ActionFn(323); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action323::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (2, ___symbol, 19) + } + pub(crate) fn ___reduce32< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(324); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant14(___symbols); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (3, ___symbol, 19) + } + pub(crate) fn ___reduce33< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarParameter, "," => ActionFn(224); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action224::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (2, ___symbol, 20) + } + pub(crate) fn ___reduce34< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(222); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action222::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (0, ___symbol, 21) + } + pub(crate) fn ___reduce35< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(223); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action223::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (1, ___symbol, 21) + } + pub(crate) fn ___reduce36< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarParameter, "," => ActionFn(329); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action329::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (2, ___symbol, 22) + } + pub(crate) fn ___reduce37< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(330); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action330::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (3, ___symbol, 22) + } + pub(crate) fn ___reduce38< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarWhereClause, "," => ActionFn(198); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action198::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (2, ___symbol, 23) + } + pub(crate) fn ___reduce39< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(196); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action196::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (0, ___symbol, 24) + } + pub(crate) fn ___reduce40< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(197); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action197::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (1, ___symbol, 24) + } + pub(crate) fn ___reduce41< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarWhereClause, "," => ActionFn(333); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action333::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (2, ___symbol, 25) + } + pub(crate) fn ___reduce42< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(334); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action334::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (3, ___symbol, 25) + } + pub(crate) fn ___reduce43< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::") = Id, "::" => ActionFn(125); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action125::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 26) + } + pub(crate) fn ___reduce44< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = => ActionFn(123); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action123::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 27) + } + pub(crate) fn ___reduce45< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = ( "::")+ => ActionFn(124); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action124::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 27) + } + pub(crate) fn ___reduce46< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = Id, "::" => ActionFn(337); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action337::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 28) + } + pub(crate) fn ___reduce47< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = ( "::")+, Id, "::" => ActionFn(338); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 28) + } + pub(crate) fn ___reduce48< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = Lifetime, "+" => ActionFn(201); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action201::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 29) + } + pub(crate) fn ___reduce49< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(199); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action199::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 30) + } + pub(crate) fn ___reduce50< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(200); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action200::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 30) + } + pub(crate) fn ___reduce51< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = Lifetime, "+" => ActionFn(343); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action343::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 31) + } + pub(crate) fn ___reduce52< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(344); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action344::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 31) + } + pub(crate) fn ___reduce53< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Lifetime, "," => ActionFn(204); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action204::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 32) + } + pub(crate) fn ___reduce54< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(202); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action202::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 33) + } + pub(crate) fn ___reduce55< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(203); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action203::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 33) + } + pub(crate) fn ___reduce56< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Lifetime, "," => ActionFn(347); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action347::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 34) + } + pub(crate) fn ___reduce57< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(348); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 34) + } + pub(crate) fn ___reduce58< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = MatchItem, "," => ActionFn(253); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action253::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 35) + } + pub(crate) fn ___reduce59< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(251); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action251::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (0, ___symbol, 36) + } + pub(crate) fn ___reduce60< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(252); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action252::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (1, ___symbol, 36) + } + pub(crate) fn ___reduce61< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = MatchItem, "," => ActionFn(351); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action351::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (2, ___symbol, 37) + } + pub(crate) fn ___reduce62< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(352); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (3, ___symbol, 37) + } + pub(crate) fn ___reduce63< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = NotMacroId, "," => ActionFn(229); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action229::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (2, ___symbol, 38) + } + pub(crate) fn ___reduce64< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(227); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action227::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (0, ___symbol, 39) + } + pub(crate) fn ___reduce65< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(228); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action228::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (1, ___symbol, 39) + } + pub(crate) fn ___reduce66< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = NotMacroId, "," => ActionFn(355); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action355::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (2, ___symbol, 40) + } + pub(crate) fn ___reduce67< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(356); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (3, ___symbol, 40) + } + pub(crate) fn ___reduce68< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Pattern, "," => ActionFn(263); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action263::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (2, ___symbol, 41) + } + pub(crate) fn ___reduce69< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(261); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action261::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (0, ___symbol, 42) + } + pub(crate) fn ___reduce70< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(262); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action262::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (1, ___symbol, 42) + } + pub(crate) fn ___reduce71< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Pattern, "," => ActionFn(359); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action359::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (2, ___symbol, 43) + } + pub(crate) fn ___reduce72< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(360); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (3, ___symbol, 43) + } + pub(crate) fn ___reduce73< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Symbol, "," => ActionFn(239); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action239::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 44) + } + pub(crate) fn ___reduce74< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(237); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action237::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 45) + } + pub(crate) fn ___reduce75< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(238); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action238::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 45) + } + pub(crate) fn ___reduce76< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Symbol, "," => ActionFn(363); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action363::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 46) + } + pub(crate) fn ___reduce77< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Symbol, "," => ActionFn(364); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (3, ___symbol, 46) + } + pub(crate) fn ___reduce78< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = TypeBound, "+" => ActionFn(209); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action209::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 47) + } + pub(crate) fn ___reduce79< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(207); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action207::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (0, ___symbol, 48) + } + pub(crate) fn ___reduce80< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(208); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action208::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (1, ___symbol, 48) + } + pub(crate) fn ___reduce81< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = TypeBound, "+" => ActionFn(367); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action367::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (2, ___symbol, 49) + } + pub(crate) fn ___reduce82< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(368); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (3, ___symbol, 49) + } + pub(crate) fn ___reduce83< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeBoundParameter, "," => ActionFn(219); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action219::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (2, ___symbol, 50) + } + pub(crate) fn ___reduce84< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(217); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action217::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (0, ___symbol, 51) + } + pub(crate) fn ___reduce85< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(218); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action218::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (1, ___symbol, 51) + } + pub(crate) fn ___reduce86< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeBoundParameter, "," => ActionFn(371); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action371::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (2, ___symbol, 52) + } + pub(crate) fn ___reduce87< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(372); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (3, ___symbol, 52) + } + pub(crate) fn ___reduce88< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeParameter, "," => ActionFn(193); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action193::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (2, ___symbol, 53) + } + pub(crate) fn ___reduce89< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(191); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action191::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (0, ___symbol, 54) + } + pub(crate) fn ___reduce90< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(192); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action192::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (1, ___symbol, 54) + } + pub(crate) fn ___reduce91< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeParameter, "," => ActionFn(375); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action375::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (2, ___symbol, 55) + } + pub(crate) fn ___reduce92< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(376); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (3, ___symbol, 55) + } + pub(crate) fn ___reduce93< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRef, "," => ActionFn(214); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action214::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 56) + } + pub(crate) fn ___reduce94< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(212); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action212::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 57) + } + pub(crate) fn ___reduce95< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(213); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action213::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 57) + } + pub(crate) fn ___reduce96< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRef, "," => ActionFn(379); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action379::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 58) + } + pub(crate) fn ___reduce97< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(380); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 58) + } + pub(crate) fn ___reduce98< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRefOrLifetime, "," => ActionFn(244); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action244::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 59) + } + pub(crate) fn ___reduce99< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(242); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action242::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 60) + } + pub(crate) fn ___reduce100< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(243); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action243::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 60) + } + pub(crate) fn ___reduce101< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRefOrLifetime, "," => ActionFn(383); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action383::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 61) + } + pub(crate) fn ___reduce102< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(384); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 61) + } + pub(crate) fn ___reduce103< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @L = => ActionFn(174); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action174::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 62) + } + pub(crate) fn ___reduce104< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @R = => ActionFn(173); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action173::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 63) + } + pub(crate) fn ___reduce105< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@L" => ActionFn(39); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action39::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce106< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@R" => ActionFn(40); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action40::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce107< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>" => ActionFn(41); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action41::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce108< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>?" => ActionFn(42); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action42::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce109< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = Action => ActionFn(136); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action136::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (1, ___symbol, 65) + } + pub(crate) fn ___reduce110< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = => ActionFn(137); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action137::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (0, ___symbol, 65) + } + pub(crate) fn ___reduce111< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond, Action => ActionFn(434); + let ___sym3 = ___pop_Variant38(___symbols); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action434::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (4, ___symbol, 66) + } + pub(crate) fn ___reduce112< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond => ActionFn(435); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce113< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, Action => ActionFn(436); + let ___sym1 = ___pop_Variant38(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action436::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 66) + } + pub(crate) fn ___reduce114< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+ => ActionFn(437); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action437::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce115< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = "if", Cond, Action => ActionFn(412); + let ___sym2 = ___pop_Variant38(___symbols); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action412::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce116< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Action => ActionFn(413); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action413::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce117< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = Alternative => ActionFn(230); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action230::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (1, ___symbol, 67) + } + pub(crate) fn ___reduce118< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = => ActionFn(231); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action231::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (0, ___symbol, 67) + } + pub(crate) fn ___reduce119< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = Alternative, ";" => ActionFn(35); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action35::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 68) + } + pub(crate) fn ___reduce120< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = "{", Comma, "}", ";" => ActionFn(36); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant41(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action36::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (4, ___symbol, 68) + } + pub(crate) fn ___reduce121< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation = "#", "[", Id, "]" => ActionFn(414); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action414::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); + (4, ___symbol, 69) + } + pub(crate) fn ___reduce122< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = => ActionFn(175); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action175::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (0, ___symbol, 70) + } + pub(crate) fn ___reduce123< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = Annotation+ => ActionFn(176); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action176::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 70) + } + pub(crate) fn ___reduce124< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation => ActionFn(185); + let ___sym0 = ___pop_Variant42(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action185::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 71) + } + pub(crate) fn ___reduce125< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation+, Annotation => ActionFn(186); + let ___sym1 = ___pop_Variant42(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action186::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (2, ___symbol, 71) + } + pub(crate) fn ___reduce126< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(415); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action415::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); + (5, ___symbol, 72) + } + pub(crate) fn ___reduce127< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = => ActionFn(121); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action121::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (0, ___symbol, 73) + } + pub(crate) fn ___reduce128< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = AssociatedType+ => ActionFn(122); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action122::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 73) + } + pub(crate) fn ___reduce129< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType => ActionFn(247); + let ___sym0 = ___pop_Variant44(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action247::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 74) + } + pub(crate) fn ___reduce130< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(248); + let ___sym1 = ___pop_Variant44(___symbols); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action248::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (2, ___symbol, 74) + } + pub(crate) fn ___reduce131< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Alternative => ActionFn(438); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action438::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce132< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(439); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action439::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (0, ___symbol, 75) + } + pub(crate) fn ___reduce133< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Alternative => ActionFn(440); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action440::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 75) + } + pub(crate) fn ___reduce134< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(441); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action441::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce135< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Conversion => ActionFn(454); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action454::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce136< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(455); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action455::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (0, ___symbol, 76) + } + pub(crate) fn ___reduce137< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Conversion => ActionFn(456); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action456::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (2, ___symbol, 76) + } + pub(crate) fn ___reduce138< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(457); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action457::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce139< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarParameter => ActionFn(476); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action476::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce140< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(477); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action477::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (0, ___symbol, 77) + } + pub(crate) fn ___reduce141< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarParameter => ActionFn(478); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action478::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (2, ___symbol, 77) + } + pub(crate) fn ___reduce142< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(479); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action479::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce143< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarWhereClause => ActionFn(504); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action504::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce144< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(505); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action505::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (0, ___symbol, 78) + } + pub(crate) fn ___reduce145< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarWhereClause => ActionFn(506); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action506::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 78) + } + pub(crate) fn ___reduce146< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(507); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action507::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce147< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Lifetime => ActionFn(540); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action540::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce148< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(541); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action541::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 79) + } + pub(crate) fn ___reduce149< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Lifetime => ActionFn(542); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action542::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 79) + } + pub(crate) fn ___reduce150< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(543); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action543::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce151< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = MatchItem => ActionFn(552); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action552::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce152< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(553); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action553::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (0, ___symbol, 80) + } + pub(crate) fn ___reduce153< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, MatchItem => ActionFn(554); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action554::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (2, ___symbol, 80) + } + pub(crate) fn ___reduce154< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(555); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action555::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce155< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = NotMacroId => ActionFn(556); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action556::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce156< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(557); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action557::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (0, ___symbol, 81) + } + pub(crate) fn ___reduce157< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, NotMacroId => ActionFn(558); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action558::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (2, ___symbol, 81) + } + pub(crate) fn ___reduce158< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(559); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action559::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce159< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Pattern => ActionFn(560); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action560::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce160< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(561); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action561::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (0, ___symbol, 82) + } + pub(crate) fn ___reduce161< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Pattern => ActionFn(562); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action562::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (2, ___symbol, 82) + } + pub(crate) fn ___reduce162< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(563); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action563::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce163< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Symbol => ActionFn(630); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action630::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce164< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(631); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action631::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (0, ___symbol, 83) + } + pub(crate) fn ___reduce165< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Symbol => ActionFn(632); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action632::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (2, ___symbol, 83) + } + pub(crate) fn ___reduce166< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(633); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action633::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce167< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeBoundParameter => ActionFn(638); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action638::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce168< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(639); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action639::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (0, ___symbol, 84) + } + pub(crate) fn ___reduce169< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeBoundParameter => ActionFn(640); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action640::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (2, ___symbol, 84) + } + pub(crate) fn ___reduce170< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(641); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action641::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce171< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeParameter => ActionFn(642); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action642::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce172< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(643); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action643::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (0, ___symbol, 85) + } + pub(crate) fn ___reduce173< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeParameter => ActionFn(644); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action644::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (2, ___symbol, 85) + } + pub(crate) fn ___reduce174< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(645); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action645::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce175< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRef => ActionFn(646); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action646::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce176< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(647); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action647::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 86) + } + pub(crate) fn ___reduce177< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRef => ActionFn(648); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action648::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 86) + } + pub(crate) fn ___reduce178< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(649); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action649::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce179< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRefOrLifetime => ActionFn(650); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action650::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce180< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(651); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action651::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 87) + } + pub(crate) fn ___reduce181< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRefOrLifetime => ActionFn(652); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action652::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 87) + } + pub(crate) fn ___reduce182< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(653); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action653::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce183< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Cond = NotMacroId, CondOp, StringLiteral => ActionFn(416); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant56(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action416::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (3, ___symbol, 88) + } + pub(crate) fn ___reduce184< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "==" => ActionFn(44); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action44::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce185< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!=" => ActionFn(45); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action45::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce186< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "~~" => ActionFn(46); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action46::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce187< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!~" => ActionFn(47); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action47::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce189< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = Conversion => ActionFn(254); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action254::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (1, ___symbol, 91) + } + pub(crate) fn ___reduce190< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = => ActionFn(255); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action255::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (0, ___symbol, 91) + } + pub(crate) fn ___reduce191< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(418); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant46(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action418::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); + (5, ___symbol, 92) + } + pub(crate) fn ___reduce192< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Escape = "Escape" => ActionFn(103); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action103::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 93) + } + pub(crate) fn ___reduce193< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = => ActionFn(628); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action628::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (0, ___symbol, 94) + } + pub(crate) fn ___reduce194< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = Symbol+ => ActionFn(629); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action629::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (1, ___symbol, 94) + } + pub(crate) fn ___reduce195< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, "}" => ActionFn(448); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action448::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce196< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(449); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant45(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action449::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce197< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(450); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action450::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce198< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(451); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant45(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action451::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 95) + } + pub(crate) fn ___reduce199< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", "}" => ActionFn(452); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action452::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (3, ___symbol, 95) + } + pub(crate) fn ___reduce200< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(453); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce201< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern = Id, ":", Pattern => ActionFn(421); + let ___sym2 = ___pop_Variant26(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (3, ___symbol, 96) + } + pub(crate) fn ___reduce202< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = FieldPattern => ActionFn(113); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action113::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (1, ___symbol, 97) + } + pub(crate) fn ___reduce203< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = => ActionFn(114); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action114::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (0, ___symbol, 97) + } + pub(crate) fn ___reduce204< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll = "for", "<", Comma, ">" => ActionFn(12); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action12::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (4, ___symbol, 98) + } + pub(crate) fn ___reduce205< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = ForAll => ActionFn(160); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action160::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (1, ___symbol, 99) + } + pub(crate) fn ___reduce206< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = => ActionFn(161); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action161::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (0, ___symbol, 99) + } + pub(crate) fn ___reduce207< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(654); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action654::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce208< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(655); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action655::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce209< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(656); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action656::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce210< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(657); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action657::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce211< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(658); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action658::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce212< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(659); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action659::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce213< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(660); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action660::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce214< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(661); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action661::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce215< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(662); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action662::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce216< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(663); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action663::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce217< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(664); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action664::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce218< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce219< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";" => ActionFn(666); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce220< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(667); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce221< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(668); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce222< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(669); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce223< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(670); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce224< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(671); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce225< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(672); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce226< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(673); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce227< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(674); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce228< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(675); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce229< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(676); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce230< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(677); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce231< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(678); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce232< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(679); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce233< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(680); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce234< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(681); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce235< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";" => ActionFn(682); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action682::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (2, ___symbol, 100) + } + pub(crate) fn ___reduce236< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";" => ActionFn(683); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce237< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(684); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce238< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(685); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce239< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(686); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce240< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(687); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce241< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(688); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce242< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(689); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce243< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(690); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce244< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(691); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce245< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(692); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce246< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(693); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action693::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce247< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(694); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce248< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(695); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce249< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(696); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce250< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce251< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(698); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce252< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(699); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce253< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(700); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce254< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(701); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce255< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(702); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce256< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(703); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce257< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(704); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce258< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce259< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(706); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce260< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(707); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce261< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(708); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce262< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(709); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce263< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(710); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce264< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(711); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce265< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(712); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce266< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce267< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";", GrammarItem+ => ActionFn(714); + let ___sym2 = ___pop_Variant64(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce268< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(715); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce269< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(716); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce270< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(717); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce271< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(718); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce272< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(719); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce273< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(720); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce274< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(721); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce275< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(722); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce276< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(723); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce277< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(724); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce278< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(725); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce279< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(726); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce280< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(727); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce281< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(728); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce282< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce283< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(730); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce284< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(731); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce285< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(732); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce286< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(733); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce287< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(734); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce288< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(735); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce289< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(736); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce290< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(737); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce291< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(738); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce292< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(739); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce293< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(740); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce294< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(741); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce295< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(742); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce296< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(743); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce297< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(744); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce298< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(745); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce299< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";" => ActionFn(746); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce300< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(747); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce301< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(748); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce302< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(749); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce303< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(750); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce304< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(751); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce305< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(752); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce306< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(753); + let ___sym8 = ___pop_Variant64(___symbols); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym8.2.clone(); + let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (9, ___symbol, 100) + } + pub(crate) fn ___reduce307< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(754); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce308< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(755); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce309< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(756); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce310< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(757); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce311< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(758); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce312< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(759); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce313< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(760); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce314< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce315< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(762); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce316< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(763); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce317< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(764); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce318< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(765); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce319< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(766); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce320< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(767); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce321< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(768); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce322< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce323< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(770); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce324< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(771); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce325< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(772); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce326< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(773); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce327< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(774); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce328< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(775); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce329< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(776); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce330< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce331< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(778); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce332< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(779); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce333< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(780); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce334< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(781); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce335< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Use => ActionFn(22); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action22::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce336< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = MatchToken => ActionFn(23); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action23::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce337< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = ExternToken => ActionFn(24); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action24::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce338< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Nonterminal => ActionFn(25); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action25::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce339< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = => ActionFn(165); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action165::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 102) + } + pub(crate) fn ___reduce340< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = GrammarItem+ => ActionFn(166); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action166::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 102) + } + pub(crate) fn ___reduce341< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem => ActionFn(187); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action187::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 103) + } + pub(crate) fn ___reduce342< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(188); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action188::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 103) + } + pub(crate) fn ___reduce343< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter = Id, ":", TypeRef => ActionFn(21); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (3, ___symbol, 104) + } + pub(crate) fn ___reduce344< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = GrammarParameter => ActionFn(220); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action220::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (1, ___symbol, 105) + } + pub(crate) fn ___reduce345< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = => ActionFn(221); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action221::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (0, ___symbol, 105) + } + pub(crate) fn ___reduce346< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters = "(", Comma, ")" => ActionFn(20); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (3, ___symbol, 106) + } + pub(crate) fn ___reduce347< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = GrammarParameters => ActionFn(169); + let ___sym0 = ___pop_Variant47(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action169::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (1, ___symbol, 107) + } + pub(crate) fn ___reduce348< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = => ActionFn(170); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action170::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (0, ___symbol, 107) + } + pub(crate) fn ___reduce349< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters = "<", Comma, ">" => ActionFn(6); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action6::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (3, ___symbol, 108) + } + pub(crate) fn ___reduce350< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = GrammarTypeParameters => ActionFn(171); + let ___sym0 = ___pop_Variant54(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action171::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (1, ___symbol, 109) + } + pub(crate) fn ___reduce351< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = => ActionFn(172); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action172::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (0, ___symbol, 109) + } + pub(crate) fn ___reduce352< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = Lifetime, ":", Plus => ActionFn(10); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action10::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce353< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(462); + let ___sym3 = ___pop_Variant81(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (4, ___symbol, 110) + } + pub(crate) fn ___reduce354< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(463); + let ___sym2 = ___pop_Variant81(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce355< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = GrammarWhereClause => ActionFn(194); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action194::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (1, ___symbol, 111) + } + pub(crate) fn ___reduce356< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = => ActionFn(195); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action195::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (0, ___symbol, 111) + } + pub(crate) fn ___reduce357< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses = "where", Comma => ActionFn(9); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action9::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 112) + } + pub(crate) fn ___reduce358< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = GrammarWhereClauses => ActionFn(167); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action167::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (1, ___symbol, 113) + } + pub(crate) fn ___reduce359< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = => ActionFn(168); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action168::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (0, ___symbol, 113) + } + pub(crate) fn ___reduce360< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "Id" => ActionFn(101); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action101::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce361< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "MacroId" => ActionFn(102); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action102::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce362< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime = "Lifetime" => ActionFn(104); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action104::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 115) + } + pub(crate) fn ___reduce363< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = Lifetime => ActionFn(131); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action131::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (1, ___symbol, 116) + } + pub(crate) fn ___reduce364< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = => ActionFn(132); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action132::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (0, ___symbol, 116) + } + pub(crate) fn ___reduce365< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MacroId = "MacroId" => ActionFn(99); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action99::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 117) + } + pub(crate) fn ___reduce366< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchContents = Comma => ActionFn(79); + let ___sym0 = ___pop_Variant50(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action79::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); + (1, ___symbol, 118) + } + pub(crate) fn ___reduce367< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = "_" => ActionFn(423); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action423::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce368< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = MatchSymbol => ActionFn(424); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action424::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce370< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = MatchItem => ActionFn(249); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action249::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (1, ___symbol, 120) + } + pub(crate) fn ___reduce371< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = => ActionFn(250); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action250::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (0, ___symbol, 120) + } + pub(crate) fn ___reduce372< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchMapping = Terminal => ActionFn(84); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action84::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 121) + } + pub(crate) fn ___reduce373< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchSymbol = QuotedLiteral => ActionFn(83); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action83::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 122) + } + pub(crate) fn ___reduce374< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchToken = MatchTokenInt => ActionFn(76); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action76::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 123) + } + pub(crate) fn ___reduce375< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(77); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant71(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action77::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (5, ___symbol, 124) + } + pub(crate) fn ___reduce376< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(426); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant71(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action426::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (4, ___symbol, 124) + } + pub(crate) fn ___reduce377< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(444); + let ___sym5 = ___pop_Variant41(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 125) + } + pub(crate) fn ___reduce378< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(445); + let ___sym6 = ___pop_Variant41(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant3(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action445::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (7, ___symbol, 125) + } + pub(crate) fn ___reduce379< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(446); + let ___sym3 = ___pop_Variant41(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action446::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 125) + } + pub(crate) fn ___reduce380< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(447); + let ___sym4 = ___pop_Variant41(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action447::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 125) + } + pub(crate) fn ___reduce381< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = MacroId, "<", Comma, ">" => ActionFn(32); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant51(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (4, ___symbol, 126) + } + pub(crate) fn ___reduce382< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = NotMacroId => ActionFn(33); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action33::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce383< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = "Escape" => ActionFn(34); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action34::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce384< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId = "Id" => ActionFn(100); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action100::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 127) + } + pub(crate) fn ___reduce385< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = NotMacroId => ActionFn(225); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action225::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (1, ___symbol, 128) + } + pub(crate) fn ___reduce386< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = => ActionFn(226); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action226::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (0, ___symbol, 128) + } + pub(crate) fn ___reduce387< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", Id => ActionFn(339); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action339::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce388< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", ( "::")+, Id => ActionFn(340); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant21(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action340::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (3, ___symbol, 129) + } + pub(crate) fn ___reduce389< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = Id => ActionFn(341); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action341::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (1, ___symbol, 129) + } + pub(crate) fn ___reduce390< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = ( "::")+, Id => ActionFn(342); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action342::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce391< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern = PatternKind => ActionFn(429); + let ___sym0 = ___pop_Variant80(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action429::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 130) + } + pub(crate) fn ___reduce392< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = Pattern => ActionFn(259); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action259::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (1, ___symbol, 131) + } + pub(crate) fn ___reduce393< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = => ActionFn(260); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action260::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (0, ___symbol, 131) + } + pub(crate) fn ___reduce394< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "(", Comma, ")" => ActionFn(89); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant52(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action89::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce395< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", FieldPattern, "}" => ActionFn(458); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant14(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce396< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "}" => ActionFn(459); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce397< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(460); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant14(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce398< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "}" => ActionFn(461); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce399< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "..", "}" => ActionFn(327); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action327::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce400< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(328); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce401< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "_" => ActionFn(92); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action92::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce402< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = ".." => ActionFn(93); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action93::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce403< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "<", TypeRef, ">" => ActionFn(94); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action94::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce404< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "(", Comma, ")" => ActionFn(95); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant52(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action95::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce405< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "CharLiteral" => ActionFn(96); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action96::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce406< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path => ActionFn(97); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action97::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce407< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = Lifetime => ActionFn(544); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action544::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce408< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(545); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action545::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 133) + } + pub(crate) fn ___reduce409< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, Lifetime => ActionFn(546); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action546::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 133) + } + pub(crate) fn ___reduce410< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(547); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action547::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce411< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = TypeBound => ActionFn(634); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action634::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce412< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(635); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action635::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (0, ___symbol, 134) + } + pub(crate) fn ___reduce413< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, TypeBound => ActionFn(636); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action636::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (2, ___symbol, 134) + } + pub(crate) fn ___reduce414< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(637); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action637::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce415< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = StringLiteral => ActionFn(108); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action108::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce416< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = RegexLiteral => ActionFn(109); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action109::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce417< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedTerminal = QuotedLiteral => ActionFn(107); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action107::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 136) + } + pub(crate) fn ___reduce418< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RegexLiteral = "RegexLiteral" => ActionFn(111); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action111::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 137) + } + pub(crate) fn ___reduce419< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "+" => ActionFn(54); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action54::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce420< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "*" => ActionFn(55); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action55::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce421< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "?" => ActionFn(56); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action56::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce422< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute = "#![...]" => ActionFn(112); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action112::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); + (1, ___symbol, 139) + } + pub(crate) fn ___reduce423< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = => ActionFn(179); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action179::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (0, ___symbol, 140) + } + pub(crate) fn ___reduce424< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = ShebangAttribute+ => ActionFn(180); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action180::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 140) + } + pub(crate) fn ___reduce425< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute => ActionFn(181); + let ___sym0 = ___pop_Variant83(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action181::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 141) + } + pub(crate) fn ___reduce426< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(182); + let ___sym1 = ___pop_Variant83(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action182::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (2, ___symbol, 141) + } + pub(crate) fn ___reduce427< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // StringLiteral = "StringLiteral" => ActionFn(110); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action110::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 142) + } + pub(crate) fn ___reduce428< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(430); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant28(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (5, ___symbol, 143) + } + pub(crate) fn ___reduce429< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Symbol0, ">" => ActionFn(431); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action431::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (3, ___symbol, 143) + } + pub(crate) fn ___reduce430< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = Symbol0 => ActionFn(51); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action51::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 143) + } + pub(crate) fn ___reduce431< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = => ActionFn(134); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action134::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 144) + } + pub(crate) fn ___reduce432< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = Symbol+ => ActionFn(135); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action135::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 144) + } + pub(crate) fn ___reduce433< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol => ActionFn(141); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action141::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 145) + } + pub(crate) fn ___reduce434< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol+, Symbol => ActionFn(142); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action142::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 145) + } + pub(crate) fn ___reduce435< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol1 => ActionFn(52); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action52::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 146) + } + pub(crate) fn ___reduce436< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol0, RepeatOp => ActionFn(432); + let ___sym1 = ___pop_Variant82(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action432::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 146) + } + pub(crate) fn ___reduce437< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol1 = SymbolKind1 => ActionFn(433); + let ___sym0 = ___pop_Variant86(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action433::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 147) + } + pub(crate) fn ___reduce438< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = Symbol => ActionFn(235); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action235::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (1, ___symbol, 148) + } + pub(crate) fn ___reduce439< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = => ActionFn(236); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action236::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (0, ___symbol, 148) + } + pub(crate) fn ___reduce440< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(58); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant53(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action58::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (4, ___symbol, 149) + } + pub(crate) fn ___reduce441< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = QuotedTerminal => ActionFn(59); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action59::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce442< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "Id" => ActionFn(60); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action60::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce443< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = Escape => ActionFn(61); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action61::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce444< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(62); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant59(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action62::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (3, ___symbol, 149) + } + pub(crate) fn ___reduce445< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@L" => ActionFn(63); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action63::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce446< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@R" => ActionFn(64); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action64::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce447< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "!" => ActionFn(65); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action65::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce448< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = QuotedTerminal => ActionFn(105); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action105::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce449< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = "Id" => ActionFn(106); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action106::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce450< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Lifetime => ActionFn(14); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action14::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce451< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(464); + let ___sym6 = ___pop_Variant3(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (7, ___symbol, 151) + } + pub(crate) fn ___reduce452< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(465); + let ___sym5 = ___pop_Variant3(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action465::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (6, ___symbol, 151) + } + pub(crate) fn ___reduce453< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(466); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action466::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce454< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")" => ActionFn(467); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action467::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce455< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(468); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant5(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action468::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce456< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "<", Comma, ">" => ActionFn(469); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant5(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce457< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path => ActionFn(470); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action470::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 151) + } + pub(crate) fn ___reduce458< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path => ActionFn(471); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action471::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce459< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = TypeBound => ActionFn(205); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action205::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (1, ___symbol, 152) + } + pub(crate) fn ___reduce460< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = => ActionFn(206); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action206::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (0, ___symbol, 152) + } + pub(crate) fn ___reduce461< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Lifetime => ActionFn(17); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action17::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce462< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = TypeRef => ActionFn(18); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action18::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce463< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Id, "=", TypeRef => ActionFn(19); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action19::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (3, ___symbol, 153) + } + pub(crate) fn ___reduce464< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = TypeBoundParameter => ActionFn(215); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action215::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (1, ___symbol, 154) + } + pub(crate) fn ___reduce465< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = => ActionFn(216); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action216::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (0, ___symbol, 154) + } + pub(crate) fn ___reduce466< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBounds = Plus => ActionFn(13); + let ___sym0 = ___pop_Variant81(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action13::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 155) + } + pub(crate) fn ___reduce467< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Lifetime => ActionFn(7); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action7::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce468< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Id => ActionFn(8); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action8::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce469< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = TypeParameter => ActionFn(189); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action189::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (1, ___symbol, 157) + } + pub(crate) fn ___reduce470< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = => ActionFn(190); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action190::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (0, ___symbol, 157) + } + pub(crate) fn ___reduce471< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "(", Comma, ")" => ActionFn(66); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant55(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action66::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce472< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "#", Symbol, "#" => ActionFn(67); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action67::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce473< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(548); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action548::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce474< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", "mut", TypeRef => ActionFn(549); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action549::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce475< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, TypeRef => ActionFn(550); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action550::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce476< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", TypeRef => ActionFn(551); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action551::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 158) + } + pub(crate) fn ___reduce477< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path, "<", Comma, ">" => ActionFn(69); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce478< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path => ActionFn(70); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action70::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 158) + } + pub(crate) fn ___reduce479< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = TypeRef => ActionFn(210); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action210::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 159) + } + pub(crate) fn ___reduce480< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = => ActionFn(211); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action211::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 159) + } + pub(crate) fn ___reduce481< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = TypeRef => ActionFn(71); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action71::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce482< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = Lifetime => ActionFn(72); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action72::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce483< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(240); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action240::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 161) + } + pub(crate) fn ___reduce484< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = => ActionFn(241); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action241::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 161) + } + pub(crate) fn ___reduce485< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use = "use", ";" => ActionFn(26); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action26::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (2, ___symbol, 162) + } + pub(crate) fn ___reduce486< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = => ActionFn(177); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action177::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 163) + } + pub(crate) fn ___reduce487< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = Use+ => ActionFn(178); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action178::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 163) + } + pub(crate) fn ___reduce488< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use => ActionFn(183); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action183::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 164) + } + pub(crate) fn ___reduce489< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use+, Use => ActionFn(184); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action184::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 164) + } + pub(crate) fn ___reduce490< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub", "(", Path, ")" => ActionFn(27); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant78(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action27::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (4, ___symbol, 165) + } + pub(crate) fn ___reduce491< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub" => ActionFn(28); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action28::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (1, ___symbol, 165) + } + pub(crate) fn ___reduce492< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = => ActionFn(314); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action314::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (0, ___symbol, 165) + } + pub(crate) fn ___reduce493< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Grammar = Grammar => ActionFn(0); + let ___sym0 = ___pop_Variant63(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action0::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (1, ___symbol, 166) + } + pub(crate) fn ___reduce495< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___MatchMapping = MatchMapping => ActionFn(3); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action3::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 168) + } + pub(crate) fn ___reduce496< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Pattern = Pattern => ActionFn(4); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action4::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 169) + } + pub(crate) fn ___reduce497< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___TypeRef = TypeRef => ActionFn(2); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action2::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 170) + } +} +pub use self::___parse___GrammarWhereClauses::GrammarWhereClausesParser; + +#[cfg_attr(rustfmt, rustfmt_skip)] +mod ___parse___MatchMapping { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] + + use string_cache::DefaultAtom as Atom; + use grammar::parse_tree::*; + use grammar::pattern::*; + use std::iter::once; + use tok::{self, Tok}; + use util::strip; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as ___lalrpop_util; + use super::___ToTriple; + #[allow(dead_code)] + pub enum ___Symbol<'input> + { + Variant0(Tok<'input>), + Variant1(&'input str), + Variant2(::std::option::Option>), + Variant3(TypeRef), + Variant4(::std::option::Option), + Variant5(Vec>), + Variant6(::std::option::Option>>), + Variant7(Condition), + Variant8(::std::option::Option), + Variant9(()), + Variant10(Alternative), + Variant11(::std::vec::Vec), + Variant12(Conversion), + Variant13(::std::vec::Vec), + Variant14(FieldPattern), + Variant15(::std::vec::Vec>), + Variant16(Parameter), + Variant17(::std::vec::Vec), + Variant18(WhereClause), + Variant19(::std::vec::Vec>), + Variant20(Atom), + Variant21(::std::vec::Vec), + Variant22(MatchItem), + Variant23(::std::vec::Vec), + Variant24(NonterminalString), + Variant25(::std::vec::Vec), + Variant26(Pattern), + Variant27(::std::vec::Vec>), + Variant28(Symbol), + Variant29(::std::vec::Vec), + Variant30(TypeBound), + Variant31(::std::vec::Vec>), + Variant32(TypeBoundParameter), + Variant33(::std::vec::Vec>), + Variant34(TypeParameter), + Variant35(::std::vec::Vec), + Variant36(::std::vec::Vec), + Variant37(usize), + Variant38(ActionKind), + Variant39(::std::option::Option), + Variant40(::std::option::Option), + Variant41(Vec), + Variant42(Annotation), + Variant43(::std::vec::Vec), + Variant44(AssociatedType), + Variant45(::std::vec::Vec), + Variant46(Vec), + Variant47(Vec), + Variant48(Vec>), + Variant49(Vec), + Variant50(Vec), + Variant51(Vec), + Variant52(Vec>), + Variant53(Vec), + Variant54(Vec), + Variant55(Vec), + Variant56(ConditionOp), + Variant57(::std::option::Option), + Variant58(EnumToken), + Variant59(ExprSymbol), + Variant60(GrammarItem), + Variant61(::std::option::Option>), + Variant62(::std::option::Option>), + Variant63(Grammar), + Variant64(::std::vec::Vec), + Variant65(::std::option::Option), + Variant66(::std::option::Option>), + Variant67(::std::option::Option>), + Variant68(::std::option::Option>), + Variant69(::std::option::Option>>), + Variant70(::std::option::Option), + Variant71(MatchContents), + Variant72(::std::option::Option), + Variant73(TerminalString), + Variant74(TerminalLiteral), + Variant75(MatchToken), + Variant76((NonterminalString, Vec)), + Variant77(::std::option::Option), + Variant78(Path), + Variant79(::std::option::Option>), + Variant80(PatternKind), + Variant81(Vec>), + Variant82(RepeatOp), + Variant83(String), + Variant84(::std::vec::Vec), + Variant85(::std::option::Option), + Variant86(SymbolKind), + Variant87(::std::option::Option>), + Variant88(::std::option::Option>), + Variant89(::std::option::Option), + Variant90(Visibility), + } + const ___ACTION: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + const ___EOF_ACTION: &'static [i16] = &[ + // State 0 + 0, + // State 1 + -495, + // State 2 + -417, + // State 3 + -448, + // State 4 + -416, + // State 5 + -415, + // State 6 + -372, + // State 7 + -449, + // State 8 + -418, + // State 9 + -427, + ]; + const ___GOTO: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { + const ___TERMINAL: &'static [&'static str] = &[ + r###""!""###, + r###""!=""###, + r###""!~""###, + r###""#""###, + r###""#![...]""###, + r###""&""###, + r###""(""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""->""###, + r###""..""###, + r###"":""###, + r###""::""###, + r###"";""###, + r###""<""###, + r###""=""###, + r###""==""###, + r###""=>""###, + r###""=>?""###, + r###""=>@L""###, + r###""=>@R""###, + r###"">""###, + r###""?""###, + r###""@L""###, + r###""@R""###, + r###""CharLiteral""###, + r###""Escape""###, + r###""Id""###, + r###""Lifetime""###, + r###""MacroId""###, + r###""RegexLiteral""###, + r###""StringLiteral""###, + r###""[""###, + r###""]""###, + r###""_""###, + r###""else""###, + r###""enum""###, + r###""extern""###, + r###""for""###, + r###""grammar""###, + r###""if""###, + r###""match""###, + r###""mut""###, + r###""pub""###, + r###""type""###, + r###""use""###, + r###""where""###, + r###""{""###, + r###""}""###, + r###""~~""###, + ]; + ___ACTION[(___state * 52)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { + if state == 0 { + None + } else { + Some(terminal.to_string()) + } + }).collect() + } + pub struct MatchMappingParser { + _priv: (), + } + + impl MatchMappingParser { + pub fn new() -> MatchMappingParser { + MatchMappingParser { + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + ___TOKEN: ___ToTriple<'input, Error=tok::Error>, + ___TOKENS: IntoIterator, + >( + &self, + text: &'input str, + ___tokens0: ___TOKENS, + ) -> Result, tok::Error>> + { + let ___tokens = ___tokens0.into_iter(); + let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); + let mut ___states = vec![0_i16]; + let mut ___symbols = vec![]; + let mut ___integer; + let mut ___lookahead; + let ___last_location = &mut Default::default(); + '___shift: loop { + ___lookahead = match ___tokens.next() { + Some(Ok(v)) => v, + None => break '___shift, + Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), + }; + *___last_location = ___lookahead.2.clone(); + ___integer = match ___lookahead.1 { + Tok::Bang if true => 0, + Tok::BangEquals if true => 1, + Tok::BangTilde if true => 2, + Tok::Hash if true => 3, + Tok::ShebangAttribute(_) if true => 4, + Tok::Ampersand if true => 5, + Tok::LeftParen if true => 6, + Tok::RightParen if true => 7, + Tok::Star if true => 8, + Tok::Plus if true => 9, + Tok::Comma if true => 10, + Tok::MinusGreaterThan if true => 11, + Tok::DotDot if true => 12, + Tok::Colon if true => 13, + Tok::ColonColon if true => 14, + Tok::Semi if true => 15, + Tok::LessThan if true => 16, + Tok::Equals if true => 17, + Tok::EqualsEquals if true => 18, + Tok::EqualsGreaterThanCode(_) if true => 19, + Tok::EqualsGreaterThanQuestionCode(_) if true => 20, + Tok::EqualsGreaterThanLookahead if true => 21, + Tok::EqualsGreaterThanLookbehind if true => 22, + Tok::GreaterThan if true => 23, + Tok::Question if true => 24, + Tok::Lookahead if true => 25, + Tok::Lookbehind if true => 26, + Tok::CharLiteral(_) if true => 27, + Tok::Escape(_) if true => 28, + Tok::Id(_) if true => 29, + Tok::Lifetime(_) if true => 30, + Tok::MacroId(_) if true => 31, + Tok::RegexLiteral(_) if true => 32, + Tok::StringLiteral(_) if true => 33, + Tok::LeftBracket if true => 34, + Tok::RightBracket if true => 35, + Tok::Underscore if true => 36, + Tok::Else if true => 37, + Tok::Enum if true => 38, + Tok::Extern if true => 39, + Tok::For if true => 40, + Tok::Grammar if true => 41, + Tok::If if true => 42, + Tok::Match if true => 43, + Tok::Mut if true => 44, + Tok::Pub if true => 45, + Tok::Type if true => 46, + Tok::Use(_) if true => 47, + Tok::Where if true => 48, + Tok::LeftBrace if true => 49, + Tok::RightBrace if true => 50, + Tok::TildeTilde if true => 51, + _ => { + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: Some(___lookahead), + expected: ___expected_tokens(___state), + }; + return Err(___error); + } + }; + '___inner: loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___ACTION[___state * 52 + ___integer]; + if ___action > 0 { + let ___symbol = match ___integer { + 0 => match ___lookahead.1 { + ___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 1 => match ___lookahead.1 { + ___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 2 => match ___lookahead.1 { + ___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 3 => match ___lookahead.1 { + ___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 4 => match ___lookahead.1 { + Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 5 => match ___lookahead.1 { + ___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 6 => match ___lookahead.1 { + ___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 7 => match ___lookahead.1 { + ___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 8 => match ___lookahead.1 { + ___tok @ Tok::Star => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 9 => match ___lookahead.1 { + ___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 10 => match ___lookahead.1 { + ___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 11 => match ___lookahead.1 { + ___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 12 => match ___lookahead.1 { + ___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 13 => match ___lookahead.1 { + ___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 14 => match ___lookahead.1 { + ___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 15 => match ___lookahead.1 { + ___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 16 => match ___lookahead.1 { + ___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 17 => match ___lookahead.1 { + ___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 18 => match ___lookahead.1 { + ___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 19 => match ___lookahead.1 { + Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 20 => match ___lookahead.1 { + Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 21 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 22 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 23 => match ___lookahead.1 { + ___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 24 => match ___lookahead.1 { + ___tok @ Tok::Question => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 25 => match ___lookahead.1 { + ___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 26 => match ___lookahead.1 { + ___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 27 => match ___lookahead.1 { + Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 28 => match ___lookahead.1 { + Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 29 => match ___lookahead.1 { + Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 30 => match ___lookahead.1 { + Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 31 => match ___lookahead.1 { + Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 32 => match ___lookahead.1 { + Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 33 => match ___lookahead.1 { + Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 34 => match ___lookahead.1 { + ___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 35 => match ___lookahead.1 { + ___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 36 => match ___lookahead.1 { + ___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 37 => match ___lookahead.1 { + ___tok @ Tok::Else => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 38 => match ___lookahead.1 { + ___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 39 => match ___lookahead.1 { + ___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 40 => match ___lookahead.1 { + ___tok @ Tok::For => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 41 => match ___lookahead.1 { + ___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 42 => match ___lookahead.1 { + ___tok @ Tok::If => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 43 => match ___lookahead.1 { + ___tok @ Tok::Match => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 44 => match ___lookahead.1 { + ___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 45 => match ___lookahead.1 { + ___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 46 => match ___lookahead.1 { + ___tok @ Tok::Type => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 47 => match ___lookahead.1 { + Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 48 => match ___lookahead.1 { + ___tok @ Tok::Where => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 49 => match ___lookahead.1 { + ___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 50 => match ___lookahead.1 { + ___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 51 => match ___lookahead.1 { + ___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + _ => unreachable!(), + }; + ___states.push(___action - 1); + ___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); + continue '___shift; + } else if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + if r.is_err() { + return r; + } + return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); + } + } else { + let mut ___err_lookahead = Some(___lookahead); + let mut ___err_integer: Option = Some(___integer); + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___EOF_ACTION[___state]; + if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + return r; + } + } else { + let mut ___err_lookahead = None; + let mut ___err_integer: Option = None; + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + } + pub(crate) fn ___reduce< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> Option, tok::Error>>> + { + let (___pop_states, ___symbol, ___nonterminal) = match -___action { + 1 => { + ___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 2 => { + ___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 3 => { + ___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 4 => { + ___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 5 => { + ___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 6 => { + ___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 7 => { + ___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 8 => { + ___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 9 => { + ___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 10 => { + ___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 11 => { + ___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 12 => { + ___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 13 => { + ___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 14 => { + ___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 15 => { + ___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 16 => { + ___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 17 => { + ___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 18 => { + ___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 19 => { + ___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 20 => { + ___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 21 => { + ___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 22 => { + ___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 23 => { + ___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 24 => { + ___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 25 => { + ___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 26 => { + ___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 27 => { + ___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 28 => { + ___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 29 => { + ___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 30 => { + ___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 31 => { + ___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 32 => { + ___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 33 => { + ___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 34 => { + ___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 35 => { + ___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 36 => { + ___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 37 => { + ___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 38 => { + ___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 39 => { + ___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 40 => { + ___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 41 => { + ___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 42 => { + ___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 43 => { + ___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 44 => { + ___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 45 => { + ___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 46 => { + ___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 47 => { + ___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 48 => { + ___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 49 => { + ___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 50 => { + ___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 51 => { + ___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 52 => { + ___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 53 => { + ___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 54 => { + ___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 55 => { + ___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 56 => { + ___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 57 => { + ___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 58 => { + ___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 59 => { + ___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 60 => { + ___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 61 => { + ___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 62 => { + ___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 63 => { + ___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 64 => { + ___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 65 => { + ___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 66 => { + ___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 67 => { + ___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 68 => { + ___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 69 => { + ___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 70 => { + ___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 71 => { + ___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 72 => { + ___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 73 => { + ___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 74 => { + ___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 75 => { + ___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 76 => { + ___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 77 => { + ___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 78 => { + ___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 79 => { + ___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 80 => { + ___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 81 => { + ___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 82 => { + ___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 83 => { + ___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 84 => { + ___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 85 => { + ___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 86 => { + ___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 87 => { + ___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 88 => { + ___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 89 => { + ___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 90 => { + ___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 91 => { + ___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 92 => { + ___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 93 => { + ___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 94 => { + ___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 95 => { + ___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 96 => { + ___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 97 => { + ___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 98 => { + ___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 99 => { + ___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 100 => { + ___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 101 => { + ___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 102 => { + ___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 103 => { + ___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 104 => { + ___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 105 => { + ___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 106 => { + ___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 107 => { + ___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 108 => { + ___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 109 => { + ___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 110 => { + ___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 111 => { + ___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 112 => { + ___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 113 => { + ___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 114 => { + ___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 115 => { + ___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 116 => { + ___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 117 => { + ___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 118 => { + ___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 119 => { + ___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 120 => { + ___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 121 => { + ___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 122 => { + ___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 123 => { + ___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 124 => { + ___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 125 => { + ___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 126 => { + ___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 127 => { + ___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 128 => { + ___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 129 => { + ___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 130 => { + ___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 131 => { + ___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 132 => { + ___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 133 => { + ___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 134 => { + ___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 135 => { + ___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 136 => { + ___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 137 => { + ___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 138 => { + ___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 139 => { + ___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 140 => { + ___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 141 => { + ___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 142 => { + ___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 143 => { + ___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 144 => { + ___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 145 => { + ___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 146 => { + ___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 147 => { + ___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 148 => { + ___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 149 => { + ___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 150 => { + ___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 151 => { + ___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 152 => { + ___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 153 => { + ___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 154 => { + ___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 155 => { + ___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 156 => { + ___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 157 => { + ___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 158 => { + ___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 159 => { + ___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 160 => { + ___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 161 => { + ___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 162 => { + ___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 163 => { + ___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 164 => { + ___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 165 => { + ___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 166 => { + ___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 167 => { + ___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 168 => { + ___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 169 => { + ___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 170 => { + ___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 171 => { + ___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 172 => { + ___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 173 => { + ___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 174 => { + ___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 175 => { + ___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 176 => { + ___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 177 => { + ___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 178 => { + ___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 179 => { + ___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 180 => { + ___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 181 => { + ___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 182 => { + ___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 183 => { + ___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 184 => { + ___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 185 => { + ___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 186 => { + ___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 187 => { + ___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 188 => { + // Conversion = Terminal, "=>" => ActionFn(417); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action417::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 90) + } + 189 => { + ___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 190 => { + ___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 191 => { + ___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 192 => { + ___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 193 => { + ___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 194 => { + ___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 195 => { + ___reduce195(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 196 => { + ___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 197 => { + ___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 198 => { + ___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 199 => { + ___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 200 => { + ___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 201 => { + ___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 202 => { + ___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 203 => { + ___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 204 => { + ___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 205 => { + ___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 206 => { + ___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 207 => { + ___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 208 => { + ___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 209 => { + ___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 210 => { + ___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 211 => { + ___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 212 => { + ___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 213 => { + ___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 214 => { + ___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 215 => { + ___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 216 => { + ___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 217 => { + ___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 218 => { + ___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 219 => { + ___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 220 => { + ___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 221 => { + ___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 222 => { + ___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 223 => { + ___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 224 => { + ___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 225 => { + ___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 226 => { + ___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 227 => { + ___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 228 => { + ___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 229 => { + ___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 230 => { + ___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 231 => { + ___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 232 => { + ___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 233 => { + ___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 234 => { + ___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 235 => { + ___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 236 => { + ___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 237 => { + ___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 238 => { + ___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 239 => { + ___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 240 => { + ___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 241 => { + ___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 242 => { + ___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 243 => { + ___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 244 => { + ___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 245 => { + ___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 246 => { + ___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 247 => { + ___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 248 => { + ___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 249 => { + ___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 250 => { + ___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 251 => { + ___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 252 => { + ___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 253 => { + ___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 254 => { + ___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 255 => { + ___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 256 => { + ___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 257 => { + ___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 258 => { + ___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 259 => { + ___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 260 => { + ___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 261 => { + ___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 262 => { + ___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 263 => { + ___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 264 => { + ___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 265 => { + ___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 266 => { + ___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 267 => { + ___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 268 => { + ___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 269 => { + ___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 270 => { + ___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 271 => { + ___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 272 => { + ___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 273 => { + ___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 274 => { + ___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 275 => { + ___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 276 => { + ___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 277 => { + ___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 278 => { + ___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 279 => { + ___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 280 => { + ___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 281 => { + ___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 282 => { + ___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 283 => { + ___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 284 => { + ___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 285 => { + ___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 286 => { + ___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 287 => { + ___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 288 => { + ___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 289 => { + ___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 290 => { + ___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 291 => { + ___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 292 => { + ___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 293 => { + ___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 294 => { + ___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 295 => { + ___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 296 => { + ___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 297 => { + ___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 298 => { + ___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 299 => { + ___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 300 => { + ___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 301 => { + ___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 302 => { + ___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 303 => { + ___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 304 => { + ___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 305 => { + ___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 306 => { + ___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 307 => { + ___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 308 => { + ___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 309 => { + ___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 310 => { + ___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 311 => { + ___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 312 => { + ___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 313 => { + ___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 314 => { + ___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 315 => { + ___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 316 => { + ___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 317 => { + ___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 318 => { + ___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 319 => { + ___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 320 => { + ___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 321 => { + ___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 322 => { + ___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 323 => { + ___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 324 => { + ___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 325 => { + ___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 326 => { + ___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 327 => { + ___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 328 => { + ___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 329 => { + ___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 330 => { + ___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 331 => { + ___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 332 => { + ___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 333 => { + ___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 334 => { + ___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 335 => { + ___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 336 => { + ___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 337 => { + ___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 338 => { + ___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 339 => { + ___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 340 => { + ___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 341 => { + ___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 342 => { + ___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 343 => { + ___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 344 => { + ___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 345 => { + ___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 346 => { + ___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 347 => { + ___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 348 => { + ___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 349 => { + ___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 350 => { + ___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 351 => { + ___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 352 => { + ___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 353 => { + ___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 354 => { + ___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 355 => { + ___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 356 => { + ___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 357 => { + ___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 358 => { + ___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 359 => { + ___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 360 => { + ___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 361 => { + ___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 362 => { + ___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 363 => { + ___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 364 => { + ___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 365 => { + ___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 366 => { + ___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 367 => { + ___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 368 => { + ___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 369 => { + // MatchItem = MatchSymbol, "=>" => ActionFn(425); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action425::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 119) + } + 370 => { + ___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 371 => { + ___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 372 => { + ___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 373 => { + ___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 374 => { + ___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 375 => { + ___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 376 => { + ___reduce376(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 377 => { + ___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 378 => { + ___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 379 => { + ___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 380 => { + ___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 381 => { + ___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 382 => { + ___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 383 => { + ___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 384 => { + ___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 385 => { + ___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 386 => { + ___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 387 => { + ___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 388 => { + ___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 389 => { + ___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 390 => { + ___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 391 => { + ___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 392 => { + ___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 393 => { + ___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 394 => { + ___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 395 => { + ___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 396 => { + ___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 397 => { + ___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 398 => { + ___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 399 => { + ___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 400 => { + ___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 401 => { + ___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 402 => { + ___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 403 => { + ___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 404 => { + ___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 405 => { + ___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 406 => { + ___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 407 => { + ___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 408 => { + ___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 409 => { + ___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 410 => { + ___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 411 => { + ___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 412 => { + ___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 413 => { + ___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 414 => { + ___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 415 => { + ___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 416 => { + ___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 417 => { + ___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 418 => { + ___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 419 => { + ___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 420 => { + ___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 421 => { + ___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 422 => { + ___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 423 => { + ___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 424 => { + ___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 425 => { + ___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 426 => { + ___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 427 => { + ___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 428 => { + ___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 429 => { + ___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 430 => { + ___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 431 => { + ___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 432 => { + ___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 433 => { + ___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 434 => { + ___reduce434(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 435 => { + ___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 436 => { + ___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 437 => { + ___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 438 => { + ___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 439 => { + ___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 440 => { + ___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 441 => { + ___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 442 => { + ___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 443 => { + ___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 444 => { + ___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 445 => { + ___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 446 => { + ___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 447 => { + ___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 448 => { + ___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 449 => { + ___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 450 => { + ___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 451 => { + ___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 452 => { + ___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 453 => { + ___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 454 => { + ___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 455 => { + ___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 456 => { + ___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 457 => { + ___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 458 => { + ___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 459 => { + ___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 460 => { + ___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 461 => { + ___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 462 => { + ___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 463 => { + ___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 464 => { + ___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 465 => { + ___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 466 => { + ___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 467 => { + ___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 468 => { + ___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 469 => { + ___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 470 => { + ___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 471 => { + ___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 472 => { + ___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 473 => { + ___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 474 => { + ___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 475 => { + ___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 476 => { + ___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 477 => { + ___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 478 => { + ___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 479 => { + ___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 480 => { + ___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 481 => { + ___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 482 => { + ___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 483 => { + ___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 484 => { + ___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 485 => { + ___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 486 => { + ___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 487 => { + ___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 488 => { + ___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 489 => { + ___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 490 => { + ___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 491 => { + ___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 492 => { + ___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 493 => { + ___reduce493(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 494 => { + ___reduce494(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 495 => { + // ___MatchMapping = MatchMapping => ActionFn(3); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action3::<>(text, ___sym0); + return Some(Ok(___nt)); + } + 496 => { + ___reduce496(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 497 => { + ___reduce497(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + _ => panic!("invalid action code {}", ___action) + }; + let ___states_len = ___states.len(); + ___states.truncate(___states_len - ___pop_states); + ___symbols.push(___symbol); + let ___state = *___states.last().unwrap() as usize; + let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; + ___states.push(___next_state); + None + } + fn ___pop_Variant9< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant76< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (NonterminalString, Vec), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant38< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ActionKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant10< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Alternative, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant42< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Annotation, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant44< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, AssociatedType, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant20< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Atom, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant7< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Condition, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant56< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ConditionOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant12< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Conversion, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant58< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, EnumToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant59< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ExprSymbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant14< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, FieldPattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant63< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Grammar, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant60< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, GrammarItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant71< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchContents, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant22< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant75< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant24< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, NonterminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant16< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Parameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant78< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Path, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant26< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Pattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant80< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, PatternKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant82< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, RepeatOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant83< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant28< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Symbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant86< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, SymbolKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant74< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalLiteral, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant73< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant0< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Tok<'input>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant30< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBound, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant32< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBoundParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant34< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant3< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeRef, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant41< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant49< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant46< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant50< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant51< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant47< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant52< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant53< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant81< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant5< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant54< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant55< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant48< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant90< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Visibility, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant18< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, WhereClause, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant37< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant39< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant40< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant70< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant8< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant57< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant61< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant72< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant77< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant65< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant79< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant85< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant2< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant87< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant88< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant89< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant4< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant62< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant66< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant6< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant67< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant69< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant68< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant11< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant43< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant45< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant21< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant13< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant15< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant64< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant23< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant25< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant17< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant27< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant84< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant29< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant31< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant33< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant35< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant36< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant19< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant1< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + pub(crate) fn ___reduce1< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = "::" => ActionFn(126); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action126::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 0) + } + pub(crate) fn ___reduce2< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = => ActionFn(127); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action127::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 0) + } + pub(crate) fn ___reduce3< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = "mut" => ActionFn(129); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action129::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 1) + } + pub(crate) fn ___reduce4< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = => ActionFn(130); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action130::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 1) + } + pub(crate) fn ___reduce5< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" ) = "->", TypeRef => ActionFn(156); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action156::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 2) + } + pub(crate) fn ___reduce6< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = "->", TypeRef => ActionFn(300); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action300::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 3) + } + pub(crate) fn ___reduce7< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = => ActionFn(155); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action155::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 3) + } + pub(crate) fn ___reduce8< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" ) = ":", TypeRef => ActionFn(147); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action147::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 4) + } + pub(crate) fn ___reduce9< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = ":", TypeRef => ActionFn(303); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action303::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 5) + } + pub(crate) fn ___reduce10< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = => ActionFn(146); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action146::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 5) + } + pub(crate) fn ___reduce11< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">") = "<", Comma, ">" => ActionFn(152); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action152::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (3, ___symbol, 6) + } + pub(crate) fn ___reduce12< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = "<", Comma, ">" => ActionFn(306); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action306::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (3, ___symbol, 7) + } + pub(crate) fn ___reduce13< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = => ActionFn(151); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action151::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (0, ___symbol, 7) + } + pub(crate) fn ___reduce14< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" ) = "if", Cond => ActionFn(140); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action140::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (2, ___symbol, 8) + } + pub(crate) fn ___reduce15< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = "if", Cond => ActionFn(309); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action309::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (2, ___symbol, 9) + } + pub(crate) fn ___reduce16< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = => ActionFn(139); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action139::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (0, ___symbol, 9) + } + pub(crate) fn ___reduce17< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // () = => ActionFn(148); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action148::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); + (0, ___symbol, 10) + } + pub(crate) fn ___reduce18< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Alternative, "," => ActionFn(234); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action234::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 11) + } + pub(crate) fn ___reduce19< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(232); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action232::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (0, ___symbol, 12) + } + pub(crate) fn ___reduce20< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(233); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action233::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (1, ___symbol, 12) + } + pub(crate) fn ___reduce21< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Alternative, "," => ActionFn(315); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action315::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (2, ___symbol, 13) + } + pub(crate) fn ___reduce22< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Alternative, "," => ActionFn(316); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action316::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (3, ___symbol, 13) + } + pub(crate) fn ___reduce23< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Conversion, "," => ActionFn(258); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action258::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 14) + } + pub(crate) fn ___reduce24< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(256); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action256::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (0, ___symbol, 15) + } + pub(crate) fn ___reduce25< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(257); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action257::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (1, ___symbol, 15) + } + pub(crate) fn ___reduce26< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Conversion, "," => ActionFn(319); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action319::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (2, ___symbol, 16) + } + pub(crate) fn ___reduce27< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Conversion, "," => ActionFn(320); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action320::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (3, ___symbol, 16) + } + pub(crate) fn ___reduce28< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = FieldPattern, "," => ActionFn(117); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action117::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (2, ___symbol, 17) + } + pub(crate) fn ___reduce29< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(115); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action115::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (0, ___symbol, 18) + } + pub(crate) fn ___reduce30< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(116); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action116::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (1, ___symbol, 18) + } + pub(crate) fn ___reduce31< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = FieldPattern, "," => ActionFn(323); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action323::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (2, ___symbol, 19) + } + pub(crate) fn ___reduce32< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(324); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant14(___symbols); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (3, ___symbol, 19) + } + pub(crate) fn ___reduce33< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarParameter, "," => ActionFn(224); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action224::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (2, ___symbol, 20) + } + pub(crate) fn ___reduce34< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(222); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action222::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (0, ___symbol, 21) + } + pub(crate) fn ___reduce35< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(223); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action223::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (1, ___symbol, 21) + } + pub(crate) fn ___reduce36< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarParameter, "," => ActionFn(329); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action329::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (2, ___symbol, 22) + } + pub(crate) fn ___reduce37< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(330); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action330::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (3, ___symbol, 22) + } + pub(crate) fn ___reduce38< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarWhereClause, "," => ActionFn(198); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action198::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (2, ___symbol, 23) + } + pub(crate) fn ___reduce39< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(196); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action196::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (0, ___symbol, 24) + } + pub(crate) fn ___reduce40< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(197); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action197::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (1, ___symbol, 24) + } + pub(crate) fn ___reduce41< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarWhereClause, "," => ActionFn(333); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action333::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (2, ___symbol, 25) + } + pub(crate) fn ___reduce42< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(334); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action334::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (3, ___symbol, 25) + } + pub(crate) fn ___reduce43< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::") = Id, "::" => ActionFn(125); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action125::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 26) + } + pub(crate) fn ___reduce44< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = => ActionFn(123); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action123::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 27) + } + pub(crate) fn ___reduce45< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = ( "::")+ => ActionFn(124); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action124::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 27) + } + pub(crate) fn ___reduce46< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = Id, "::" => ActionFn(337); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action337::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 28) + } + pub(crate) fn ___reduce47< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = ( "::")+, Id, "::" => ActionFn(338); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 28) + } + pub(crate) fn ___reduce48< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = Lifetime, "+" => ActionFn(201); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action201::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 29) + } + pub(crate) fn ___reduce49< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(199); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action199::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 30) + } + pub(crate) fn ___reduce50< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(200); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action200::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 30) + } + pub(crate) fn ___reduce51< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = Lifetime, "+" => ActionFn(343); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action343::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 31) + } + pub(crate) fn ___reduce52< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(344); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action344::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 31) + } + pub(crate) fn ___reduce53< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Lifetime, "," => ActionFn(204); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action204::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 32) + } + pub(crate) fn ___reduce54< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(202); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action202::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 33) + } + pub(crate) fn ___reduce55< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(203); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action203::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 33) + } + pub(crate) fn ___reduce56< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Lifetime, "," => ActionFn(347); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action347::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 34) + } + pub(crate) fn ___reduce57< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(348); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 34) + } + pub(crate) fn ___reduce58< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = MatchItem, "," => ActionFn(253); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action253::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 35) + } + pub(crate) fn ___reduce59< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(251); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action251::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (0, ___symbol, 36) + } + pub(crate) fn ___reduce60< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(252); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action252::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (1, ___symbol, 36) + } + pub(crate) fn ___reduce61< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = MatchItem, "," => ActionFn(351); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action351::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (2, ___symbol, 37) + } + pub(crate) fn ___reduce62< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(352); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (3, ___symbol, 37) + } + pub(crate) fn ___reduce63< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = NotMacroId, "," => ActionFn(229); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action229::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (2, ___symbol, 38) + } + pub(crate) fn ___reduce64< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(227); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action227::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (0, ___symbol, 39) + } + pub(crate) fn ___reduce65< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(228); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action228::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (1, ___symbol, 39) + } + pub(crate) fn ___reduce66< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = NotMacroId, "," => ActionFn(355); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action355::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (2, ___symbol, 40) + } + pub(crate) fn ___reduce67< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(356); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (3, ___symbol, 40) + } + pub(crate) fn ___reduce68< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Pattern, "," => ActionFn(263); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action263::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (2, ___symbol, 41) + } + pub(crate) fn ___reduce69< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(261); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action261::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (0, ___symbol, 42) + } + pub(crate) fn ___reduce70< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(262); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action262::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (1, ___symbol, 42) + } + pub(crate) fn ___reduce71< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Pattern, "," => ActionFn(359); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action359::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (2, ___symbol, 43) + } + pub(crate) fn ___reduce72< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(360); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (3, ___symbol, 43) + } + pub(crate) fn ___reduce73< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Symbol, "," => ActionFn(239); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action239::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 44) + } + pub(crate) fn ___reduce74< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(237); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action237::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 45) + } + pub(crate) fn ___reduce75< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(238); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action238::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 45) + } + pub(crate) fn ___reduce76< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Symbol, "," => ActionFn(363); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action363::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 46) + } + pub(crate) fn ___reduce77< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Symbol, "," => ActionFn(364); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (3, ___symbol, 46) + } + pub(crate) fn ___reduce78< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = TypeBound, "+" => ActionFn(209); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action209::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 47) + } + pub(crate) fn ___reduce79< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(207); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action207::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (0, ___symbol, 48) + } + pub(crate) fn ___reduce80< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(208); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action208::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (1, ___symbol, 48) + } + pub(crate) fn ___reduce81< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = TypeBound, "+" => ActionFn(367); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action367::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (2, ___symbol, 49) + } + pub(crate) fn ___reduce82< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(368); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (3, ___symbol, 49) + } + pub(crate) fn ___reduce83< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeBoundParameter, "," => ActionFn(219); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action219::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (2, ___symbol, 50) + } + pub(crate) fn ___reduce84< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(217); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action217::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (0, ___symbol, 51) + } + pub(crate) fn ___reduce85< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(218); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action218::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (1, ___symbol, 51) + } + pub(crate) fn ___reduce86< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeBoundParameter, "," => ActionFn(371); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action371::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (2, ___symbol, 52) + } + pub(crate) fn ___reduce87< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(372); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (3, ___symbol, 52) + } + pub(crate) fn ___reduce88< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeParameter, "," => ActionFn(193); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action193::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (2, ___symbol, 53) + } + pub(crate) fn ___reduce89< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(191); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action191::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (0, ___symbol, 54) + } + pub(crate) fn ___reduce90< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(192); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action192::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (1, ___symbol, 54) + } + pub(crate) fn ___reduce91< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeParameter, "," => ActionFn(375); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action375::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (2, ___symbol, 55) + } + pub(crate) fn ___reduce92< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(376); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (3, ___symbol, 55) + } + pub(crate) fn ___reduce93< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRef, "," => ActionFn(214); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action214::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 56) + } + pub(crate) fn ___reduce94< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(212); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action212::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 57) + } + pub(crate) fn ___reduce95< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(213); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action213::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 57) + } + pub(crate) fn ___reduce96< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRef, "," => ActionFn(379); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action379::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 58) + } + pub(crate) fn ___reduce97< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(380); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 58) + } + pub(crate) fn ___reduce98< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRefOrLifetime, "," => ActionFn(244); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action244::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 59) + } + pub(crate) fn ___reduce99< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(242); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action242::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 60) + } + pub(crate) fn ___reduce100< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(243); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action243::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 60) + } + pub(crate) fn ___reduce101< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRefOrLifetime, "," => ActionFn(383); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action383::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 61) + } + pub(crate) fn ___reduce102< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(384); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 61) + } + pub(crate) fn ___reduce103< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @L = => ActionFn(174); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action174::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 62) + } + pub(crate) fn ___reduce104< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @R = => ActionFn(173); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action173::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 63) + } + pub(crate) fn ___reduce105< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@L" => ActionFn(39); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action39::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce106< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@R" => ActionFn(40); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action40::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce107< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>" => ActionFn(41); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action41::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce108< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>?" => ActionFn(42); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action42::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce109< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = Action => ActionFn(136); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action136::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (1, ___symbol, 65) + } + pub(crate) fn ___reduce110< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = => ActionFn(137); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action137::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (0, ___symbol, 65) + } + pub(crate) fn ___reduce111< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond, Action => ActionFn(434); + let ___sym3 = ___pop_Variant38(___symbols); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action434::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (4, ___symbol, 66) + } + pub(crate) fn ___reduce112< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond => ActionFn(435); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce113< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, Action => ActionFn(436); + let ___sym1 = ___pop_Variant38(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action436::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 66) + } + pub(crate) fn ___reduce114< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+ => ActionFn(437); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action437::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce115< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = "if", Cond, Action => ActionFn(412); + let ___sym2 = ___pop_Variant38(___symbols); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action412::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce116< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Action => ActionFn(413); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action413::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce117< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = Alternative => ActionFn(230); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action230::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (1, ___symbol, 67) + } + pub(crate) fn ___reduce118< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = => ActionFn(231); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action231::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (0, ___symbol, 67) + } + pub(crate) fn ___reduce119< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = Alternative, ";" => ActionFn(35); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action35::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 68) + } + pub(crate) fn ___reduce120< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = "{", Comma, "}", ";" => ActionFn(36); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant41(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action36::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (4, ___symbol, 68) + } + pub(crate) fn ___reduce121< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation = "#", "[", Id, "]" => ActionFn(414); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action414::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); + (4, ___symbol, 69) + } + pub(crate) fn ___reduce122< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = => ActionFn(175); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action175::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (0, ___symbol, 70) + } + pub(crate) fn ___reduce123< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = Annotation+ => ActionFn(176); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action176::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 70) + } + pub(crate) fn ___reduce124< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation => ActionFn(185); + let ___sym0 = ___pop_Variant42(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action185::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 71) + } + pub(crate) fn ___reduce125< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation+, Annotation => ActionFn(186); + let ___sym1 = ___pop_Variant42(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action186::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (2, ___symbol, 71) + } + pub(crate) fn ___reduce126< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(415); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action415::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); + (5, ___symbol, 72) + } + pub(crate) fn ___reduce127< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = => ActionFn(121); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action121::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (0, ___symbol, 73) + } + pub(crate) fn ___reduce128< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = AssociatedType+ => ActionFn(122); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action122::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 73) + } + pub(crate) fn ___reduce129< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType => ActionFn(247); + let ___sym0 = ___pop_Variant44(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action247::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 74) + } + pub(crate) fn ___reduce130< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(248); + let ___sym1 = ___pop_Variant44(___symbols); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action248::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (2, ___symbol, 74) + } + pub(crate) fn ___reduce131< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Alternative => ActionFn(438); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action438::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce132< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(439); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action439::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (0, ___symbol, 75) + } + pub(crate) fn ___reduce133< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Alternative => ActionFn(440); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action440::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 75) + } + pub(crate) fn ___reduce134< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(441); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action441::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce135< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Conversion => ActionFn(454); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action454::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce136< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(455); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action455::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (0, ___symbol, 76) + } + pub(crate) fn ___reduce137< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Conversion => ActionFn(456); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action456::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (2, ___symbol, 76) + } + pub(crate) fn ___reduce138< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(457); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action457::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce139< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarParameter => ActionFn(476); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action476::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce140< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(477); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action477::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (0, ___symbol, 77) + } + pub(crate) fn ___reduce141< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarParameter => ActionFn(478); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action478::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (2, ___symbol, 77) + } + pub(crate) fn ___reduce142< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(479); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action479::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce143< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarWhereClause => ActionFn(504); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action504::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce144< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(505); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action505::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (0, ___symbol, 78) + } + pub(crate) fn ___reduce145< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarWhereClause => ActionFn(506); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action506::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 78) + } + pub(crate) fn ___reduce146< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(507); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action507::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce147< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Lifetime => ActionFn(540); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action540::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce148< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(541); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action541::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 79) + } + pub(crate) fn ___reduce149< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Lifetime => ActionFn(542); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action542::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 79) + } + pub(crate) fn ___reduce150< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(543); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action543::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce151< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = MatchItem => ActionFn(552); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action552::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce152< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(553); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action553::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (0, ___symbol, 80) + } + pub(crate) fn ___reduce153< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, MatchItem => ActionFn(554); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action554::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (2, ___symbol, 80) + } + pub(crate) fn ___reduce154< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(555); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action555::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce155< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = NotMacroId => ActionFn(556); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action556::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce156< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(557); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action557::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (0, ___symbol, 81) + } + pub(crate) fn ___reduce157< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, NotMacroId => ActionFn(558); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action558::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (2, ___symbol, 81) + } + pub(crate) fn ___reduce158< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(559); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action559::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce159< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Pattern => ActionFn(560); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action560::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce160< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(561); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action561::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (0, ___symbol, 82) + } + pub(crate) fn ___reduce161< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Pattern => ActionFn(562); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action562::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (2, ___symbol, 82) + } + pub(crate) fn ___reduce162< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(563); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action563::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce163< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Symbol => ActionFn(630); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action630::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce164< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(631); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action631::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (0, ___symbol, 83) + } + pub(crate) fn ___reduce165< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Symbol => ActionFn(632); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action632::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (2, ___symbol, 83) + } + pub(crate) fn ___reduce166< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(633); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action633::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce167< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeBoundParameter => ActionFn(638); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action638::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce168< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(639); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action639::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (0, ___symbol, 84) + } + pub(crate) fn ___reduce169< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeBoundParameter => ActionFn(640); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action640::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (2, ___symbol, 84) + } + pub(crate) fn ___reduce170< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(641); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action641::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce171< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeParameter => ActionFn(642); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action642::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce172< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(643); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action643::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (0, ___symbol, 85) + } + pub(crate) fn ___reduce173< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeParameter => ActionFn(644); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action644::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (2, ___symbol, 85) + } + pub(crate) fn ___reduce174< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(645); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action645::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce175< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRef => ActionFn(646); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action646::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce176< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(647); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action647::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 86) + } + pub(crate) fn ___reduce177< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRef => ActionFn(648); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action648::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 86) + } + pub(crate) fn ___reduce178< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(649); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action649::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce179< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRefOrLifetime => ActionFn(650); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action650::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce180< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(651); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action651::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 87) + } + pub(crate) fn ___reduce181< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRefOrLifetime => ActionFn(652); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action652::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 87) + } + pub(crate) fn ___reduce182< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(653); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action653::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce183< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Cond = NotMacroId, CondOp, StringLiteral => ActionFn(416); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant56(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action416::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (3, ___symbol, 88) + } + pub(crate) fn ___reduce184< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "==" => ActionFn(44); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action44::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce185< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!=" => ActionFn(45); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action45::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce186< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "~~" => ActionFn(46); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action46::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce187< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!~" => ActionFn(47); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action47::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce189< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = Conversion => ActionFn(254); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action254::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (1, ___symbol, 91) + } + pub(crate) fn ___reduce190< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = => ActionFn(255); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action255::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (0, ___symbol, 91) + } + pub(crate) fn ___reduce191< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(418); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant46(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action418::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); + (5, ___symbol, 92) + } + pub(crate) fn ___reduce192< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Escape = "Escape" => ActionFn(103); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action103::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 93) + } + pub(crate) fn ___reduce193< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = => ActionFn(628); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action628::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (0, ___symbol, 94) + } + pub(crate) fn ___reduce194< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = Symbol+ => ActionFn(629); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action629::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (1, ___symbol, 94) + } + pub(crate) fn ___reduce195< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, "}" => ActionFn(448); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action448::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce196< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(449); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant45(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action449::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce197< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(450); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action450::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce198< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(451); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant45(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action451::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 95) + } + pub(crate) fn ___reduce199< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", "}" => ActionFn(452); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action452::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (3, ___symbol, 95) + } + pub(crate) fn ___reduce200< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(453); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce201< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern = Id, ":", Pattern => ActionFn(421); + let ___sym2 = ___pop_Variant26(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (3, ___symbol, 96) + } + pub(crate) fn ___reduce202< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = FieldPattern => ActionFn(113); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action113::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (1, ___symbol, 97) + } + pub(crate) fn ___reduce203< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = => ActionFn(114); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action114::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (0, ___symbol, 97) + } + pub(crate) fn ___reduce204< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll = "for", "<", Comma, ">" => ActionFn(12); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action12::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (4, ___symbol, 98) + } + pub(crate) fn ___reduce205< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = ForAll => ActionFn(160); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action160::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (1, ___symbol, 99) + } + pub(crate) fn ___reduce206< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = => ActionFn(161); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action161::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (0, ___symbol, 99) + } + pub(crate) fn ___reduce207< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(654); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action654::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce208< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(655); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action655::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce209< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(656); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action656::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce210< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(657); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action657::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce211< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(658); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action658::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce212< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(659); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action659::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce213< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(660); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action660::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce214< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(661); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action661::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce215< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(662); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action662::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce216< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(663); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action663::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce217< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(664); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action664::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce218< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce219< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";" => ActionFn(666); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce220< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(667); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce221< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(668); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce222< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(669); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce223< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(670); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce224< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(671); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce225< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(672); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce226< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(673); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce227< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(674); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce228< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(675); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce229< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(676); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce230< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(677); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce231< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(678); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce232< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(679); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce233< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(680); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce234< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(681); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce235< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";" => ActionFn(682); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action682::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (2, ___symbol, 100) + } + pub(crate) fn ___reduce236< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";" => ActionFn(683); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce237< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(684); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce238< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(685); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce239< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(686); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce240< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(687); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce241< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(688); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce242< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(689); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce243< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(690); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce244< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(691); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce245< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(692); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce246< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(693); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action693::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce247< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(694); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce248< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(695); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce249< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(696); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce250< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce251< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(698); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce252< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(699); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce253< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(700); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce254< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(701); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce255< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(702); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce256< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(703); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce257< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(704); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce258< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce259< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(706); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce260< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(707); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce261< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(708); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce262< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(709); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce263< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(710); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce264< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(711); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce265< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(712); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce266< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce267< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";", GrammarItem+ => ActionFn(714); + let ___sym2 = ___pop_Variant64(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce268< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(715); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce269< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(716); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce270< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(717); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce271< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(718); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce272< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(719); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce273< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(720); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce274< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(721); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce275< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(722); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce276< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(723); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce277< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(724); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce278< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(725); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce279< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(726); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce280< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(727); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce281< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(728); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce282< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce283< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(730); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce284< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(731); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce285< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(732); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce286< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(733); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce287< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(734); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce288< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(735); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce289< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(736); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce290< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(737); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce291< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(738); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce292< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(739); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce293< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(740); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce294< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(741); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce295< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(742); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce296< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(743); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce297< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(744); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce298< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(745); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce299< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";" => ActionFn(746); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce300< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(747); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce301< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(748); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce302< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(749); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce303< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(750); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce304< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(751); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce305< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(752); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce306< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(753); + let ___sym8 = ___pop_Variant64(___symbols); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym8.2.clone(); + let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (9, ___symbol, 100) + } + pub(crate) fn ___reduce307< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(754); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce308< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(755); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce309< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(756); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce310< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(757); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce311< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(758); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce312< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(759); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce313< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(760); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce314< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce315< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(762); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce316< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(763); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce317< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(764); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce318< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(765); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce319< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(766); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce320< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(767); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce321< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(768); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce322< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce323< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(770); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce324< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(771); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce325< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(772); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce326< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(773); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce327< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(774); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce328< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(775); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce329< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(776); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce330< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce331< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(778); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce332< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(779); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce333< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(780); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce334< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(781); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce335< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Use => ActionFn(22); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action22::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce336< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = MatchToken => ActionFn(23); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action23::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce337< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = ExternToken => ActionFn(24); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action24::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce338< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Nonterminal => ActionFn(25); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action25::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce339< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = => ActionFn(165); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action165::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 102) + } + pub(crate) fn ___reduce340< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = GrammarItem+ => ActionFn(166); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action166::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 102) + } + pub(crate) fn ___reduce341< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem => ActionFn(187); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action187::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 103) + } + pub(crate) fn ___reduce342< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(188); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action188::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 103) + } + pub(crate) fn ___reduce343< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter = Id, ":", TypeRef => ActionFn(21); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (3, ___symbol, 104) + } + pub(crate) fn ___reduce344< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = GrammarParameter => ActionFn(220); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action220::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (1, ___symbol, 105) + } + pub(crate) fn ___reduce345< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = => ActionFn(221); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action221::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (0, ___symbol, 105) + } + pub(crate) fn ___reduce346< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters = "(", Comma, ")" => ActionFn(20); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (3, ___symbol, 106) + } + pub(crate) fn ___reduce347< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = GrammarParameters => ActionFn(169); + let ___sym0 = ___pop_Variant47(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action169::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (1, ___symbol, 107) + } + pub(crate) fn ___reduce348< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = => ActionFn(170); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action170::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (0, ___symbol, 107) + } + pub(crate) fn ___reduce349< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters = "<", Comma, ">" => ActionFn(6); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action6::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (3, ___symbol, 108) + } + pub(crate) fn ___reduce350< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = GrammarTypeParameters => ActionFn(171); + let ___sym0 = ___pop_Variant54(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action171::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (1, ___symbol, 109) + } + pub(crate) fn ___reduce351< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = => ActionFn(172); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action172::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (0, ___symbol, 109) + } + pub(crate) fn ___reduce352< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = Lifetime, ":", Plus => ActionFn(10); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action10::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce353< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(462); + let ___sym3 = ___pop_Variant81(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (4, ___symbol, 110) + } + pub(crate) fn ___reduce354< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(463); + let ___sym2 = ___pop_Variant81(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce355< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = GrammarWhereClause => ActionFn(194); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action194::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (1, ___symbol, 111) + } + pub(crate) fn ___reduce356< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = => ActionFn(195); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action195::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (0, ___symbol, 111) + } + pub(crate) fn ___reduce357< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses = "where", Comma => ActionFn(9); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action9::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 112) + } + pub(crate) fn ___reduce358< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = GrammarWhereClauses => ActionFn(167); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action167::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (1, ___symbol, 113) + } + pub(crate) fn ___reduce359< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = => ActionFn(168); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action168::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (0, ___symbol, 113) + } + pub(crate) fn ___reduce360< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "Id" => ActionFn(101); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action101::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce361< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "MacroId" => ActionFn(102); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action102::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce362< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime = "Lifetime" => ActionFn(104); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action104::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 115) + } + pub(crate) fn ___reduce363< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = Lifetime => ActionFn(131); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action131::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (1, ___symbol, 116) + } + pub(crate) fn ___reduce364< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = => ActionFn(132); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action132::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (0, ___symbol, 116) + } + pub(crate) fn ___reduce365< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MacroId = "MacroId" => ActionFn(99); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action99::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 117) + } + pub(crate) fn ___reduce366< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchContents = Comma => ActionFn(79); + let ___sym0 = ___pop_Variant50(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action79::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); + (1, ___symbol, 118) + } + pub(crate) fn ___reduce367< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = "_" => ActionFn(423); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action423::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce368< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = MatchSymbol => ActionFn(424); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action424::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce370< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = MatchItem => ActionFn(249); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action249::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (1, ___symbol, 120) + } + pub(crate) fn ___reduce371< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = => ActionFn(250); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action250::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (0, ___symbol, 120) + } + pub(crate) fn ___reduce372< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchMapping = Terminal => ActionFn(84); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action84::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 121) + } + pub(crate) fn ___reduce373< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchSymbol = QuotedLiteral => ActionFn(83); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action83::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 122) + } + pub(crate) fn ___reduce374< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchToken = MatchTokenInt => ActionFn(76); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action76::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 123) + } + pub(crate) fn ___reduce375< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(77); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant71(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action77::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (5, ___symbol, 124) + } + pub(crate) fn ___reduce376< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(426); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant71(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action426::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (4, ___symbol, 124) + } + pub(crate) fn ___reduce377< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(444); + let ___sym5 = ___pop_Variant41(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 125) + } + pub(crate) fn ___reduce378< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(445); + let ___sym6 = ___pop_Variant41(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant3(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action445::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (7, ___symbol, 125) + } + pub(crate) fn ___reduce379< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(446); + let ___sym3 = ___pop_Variant41(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action446::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 125) + } + pub(crate) fn ___reduce380< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(447); + let ___sym4 = ___pop_Variant41(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action447::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 125) + } + pub(crate) fn ___reduce381< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = MacroId, "<", Comma, ">" => ActionFn(32); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant51(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (4, ___symbol, 126) + } + pub(crate) fn ___reduce382< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = NotMacroId => ActionFn(33); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action33::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce383< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = "Escape" => ActionFn(34); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action34::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce384< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId = "Id" => ActionFn(100); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action100::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 127) + } + pub(crate) fn ___reduce385< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = NotMacroId => ActionFn(225); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action225::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (1, ___symbol, 128) + } + pub(crate) fn ___reduce386< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = => ActionFn(226); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action226::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (0, ___symbol, 128) + } + pub(crate) fn ___reduce387< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", Id => ActionFn(339); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action339::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce388< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", ( "::")+, Id => ActionFn(340); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant21(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action340::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (3, ___symbol, 129) + } + pub(crate) fn ___reduce389< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = Id => ActionFn(341); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action341::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (1, ___symbol, 129) + } + pub(crate) fn ___reduce390< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = ( "::")+, Id => ActionFn(342); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action342::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce391< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern = PatternKind => ActionFn(429); + let ___sym0 = ___pop_Variant80(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action429::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 130) + } + pub(crate) fn ___reduce392< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = Pattern => ActionFn(259); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action259::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (1, ___symbol, 131) + } + pub(crate) fn ___reduce393< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = => ActionFn(260); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action260::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (0, ___symbol, 131) + } + pub(crate) fn ___reduce394< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "(", Comma, ")" => ActionFn(89); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant52(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action89::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce395< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", FieldPattern, "}" => ActionFn(458); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant14(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce396< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "}" => ActionFn(459); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce397< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(460); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant14(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce398< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "}" => ActionFn(461); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce399< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "..", "}" => ActionFn(327); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action327::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce400< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(328); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce401< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "_" => ActionFn(92); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action92::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce402< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = ".." => ActionFn(93); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action93::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce403< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "<", TypeRef, ">" => ActionFn(94); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action94::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce404< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "(", Comma, ")" => ActionFn(95); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant52(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action95::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce405< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "CharLiteral" => ActionFn(96); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action96::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce406< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path => ActionFn(97); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action97::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce407< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = Lifetime => ActionFn(544); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action544::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce408< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(545); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action545::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 133) + } + pub(crate) fn ___reduce409< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, Lifetime => ActionFn(546); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action546::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 133) + } + pub(crate) fn ___reduce410< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(547); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action547::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce411< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = TypeBound => ActionFn(634); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action634::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce412< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(635); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action635::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (0, ___symbol, 134) + } + pub(crate) fn ___reduce413< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, TypeBound => ActionFn(636); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action636::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (2, ___symbol, 134) + } + pub(crate) fn ___reduce414< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(637); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action637::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce415< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = StringLiteral => ActionFn(108); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action108::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce416< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = RegexLiteral => ActionFn(109); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action109::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce417< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedTerminal = QuotedLiteral => ActionFn(107); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action107::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 136) + } + pub(crate) fn ___reduce418< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RegexLiteral = "RegexLiteral" => ActionFn(111); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action111::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 137) + } + pub(crate) fn ___reduce419< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "+" => ActionFn(54); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action54::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce420< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "*" => ActionFn(55); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action55::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce421< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "?" => ActionFn(56); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action56::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce422< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute = "#![...]" => ActionFn(112); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action112::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); + (1, ___symbol, 139) + } + pub(crate) fn ___reduce423< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = => ActionFn(179); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action179::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (0, ___symbol, 140) + } + pub(crate) fn ___reduce424< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = ShebangAttribute+ => ActionFn(180); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action180::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 140) + } + pub(crate) fn ___reduce425< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute => ActionFn(181); + let ___sym0 = ___pop_Variant83(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action181::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 141) + } + pub(crate) fn ___reduce426< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(182); + let ___sym1 = ___pop_Variant83(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action182::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (2, ___symbol, 141) + } + pub(crate) fn ___reduce427< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // StringLiteral = "StringLiteral" => ActionFn(110); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action110::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 142) + } + pub(crate) fn ___reduce428< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(430); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant28(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (5, ___symbol, 143) + } + pub(crate) fn ___reduce429< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Symbol0, ">" => ActionFn(431); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action431::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (3, ___symbol, 143) + } + pub(crate) fn ___reduce430< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = Symbol0 => ActionFn(51); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action51::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 143) + } + pub(crate) fn ___reduce431< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = => ActionFn(134); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action134::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 144) + } + pub(crate) fn ___reduce432< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = Symbol+ => ActionFn(135); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action135::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 144) + } + pub(crate) fn ___reduce433< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol => ActionFn(141); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action141::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 145) + } + pub(crate) fn ___reduce434< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol+, Symbol => ActionFn(142); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action142::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 145) + } + pub(crate) fn ___reduce435< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol1 => ActionFn(52); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action52::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 146) + } + pub(crate) fn ___reduce436< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol0, RepeatOp => ActionFn(432); + let ___sym1 = ___pop_Variant82(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action432::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 146) + } + pub(crate) fn ___reduce437< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol1 = SymbolKind1 => ActionFn(433); + let ___sym0 = ___pop_Variant86(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action433::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 147) + } + pub(crate) fn ___reduce438< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = Symbol => ActionFn(235); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action235::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (1, ___symbol, 148) + } + pub(crate) fn ___reduce439< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = => ActionFn(236); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action236::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (0, ___symbol, 148) + } + pub(crate) fn ___reduce440< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(58); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant53(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action58::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (4, ___symbol, 149) + } + pub(crate) fn ___reduce441< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = QuotedTerminal => ActionFn(59); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action59::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce442< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "Id" => ActionFn(60); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action60::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce443< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = Escape => ActionFn(61); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action61::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce444< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(62); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant59(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action62::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (3, ___symbol, 149) + } + pub(crate) fn ___reduce445< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@L" => ActionFn(63); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action63::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce446< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@R" => ActionFn(64); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action64::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce447< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "!" => ActionFn(65); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action65::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce448< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = QuotedTerminal => ActionFn(105); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action105::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce449< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = "Id" => ActionFn(106); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action106::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce450< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Lifetime => ActionFn(14); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action14::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce451< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(464); + let ___sym6 = ___pop_Variant3(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (7, ___symbol, 151) + } + pub(crate) fn ___reduce452< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(465); + let ___sym5 = ___pop_Variant3(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action465::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (6, ___symbol, 151) + } + pub(crate) fn ___reduce453< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(466); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action466::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce454< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")" => ActionFn(467); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action467::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce455< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(468); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant5(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action468::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce456< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "<", Comma, ">" => ActionFn(469); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant5(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce457< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path => ActionFn(470); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action470::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 151) + } + pub(crate) fn ___reduce458< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path => ActionFn(471); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action471::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce459< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = TypeBound => ActionFn(205); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action205::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (1, ___symbol, 152) + } + pub(crate) fn ___reduce460< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = => ActionFn(206); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action206::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (0, ___symbol, 152) + } + pub(crate) fn ___reduce461< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Lifetime => ActionFn(17); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action17::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce462< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = TypeRef => ActionFn(18); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action18::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce463< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Id, "=", TypeRef => ActionFn(19); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action19::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (3, ___symbol, 153) + } + pub(crate) fn ___reduce464< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = TypeBoundParameter => ActionFn(215); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action215::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (1, ___symbol, 154) + } + pub(crate) fn ___reduce465< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = => ActionFn(216); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action216::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (0, ___symbol, 154) + } + pub(crate) fn ___reduce466< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBounds = Plus => ActionFn(13); + let ___sym0 = ___pop_Variant81(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action13::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 155) + } + pub(crate) fn ___reduce467< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Lifetime => ActionFn(7); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action7::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce468< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Id => ActionFn(8); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action8::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce469< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = TypeParameter => ActionFn(189); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action189::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (1, ___symbol, 157) + } + pub(crate) fn ___reduce470< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = => ActionFn(190); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action190::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (0, ___symbol, 157) + } + pub(crate) fn ___reduce471< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "(", Comma, ")" => ActionFn(66); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant55(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action66::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce472< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "#", Symbol, "#" => ActionFn(67); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action67::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce473< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(548); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action548::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce474< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", "mut", TypeRef => ActionFn(549); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action549::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce475< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, TypeRef => ActionFn(550); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action550::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce476< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", TypeRef => ActionFn(551); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action551::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 158) + } + pub(crate) fn ___reduce477< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path, "<", Comma, ">" => ActionFn(69); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce478< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path => ActionFn(70); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action70::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 158) + } + pub(crate) fn ___reduce479< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = TypeRef => ActionFn(210); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action210::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 159) + } + pub(crate) fn ___reduce480< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = => ActionFn(211); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action211::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 159) + } + pub(crate) fn ___reduce481< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = TypeRef => ActionFn(71); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action71::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce482< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = Lifetime => ActionFn(72); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action72::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce483< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(240); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action240::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 161) + } + pub(crate) fn ___reduce484< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = => ActionFn(241); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action241::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 161) + } + pub(crate) fn ___reduce485< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use = "use", ";" => ActionFn(26); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action26::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (2, ___symbol, 162) + } + pub(crate) fn ___reduce486< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = => ActionFn(177); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action177::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 163) + } + pub(crate) fn ___reduce487< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = Use+ => ActionFn(178); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action178::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 163) + } + pub(crate) fn ___reduce488< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use => ActionFn(183); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action183::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 164) + } + pub(crate) fn ___reduce489< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use+, Use => ActionFn(184); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action184::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 164) + } + pub(crate) fn ___reduce490< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub", "(", Path, ")" => ActionFn(27); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant78(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action27::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (4, ___symbol, 165) + } + pub(crate) fn ___reduce491< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub" => ActionFn(28); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action28::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (1, ___symbol, 165) + } + pub(crate) fn ___reduce492< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = => ActionFn(314); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action314::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (0, ___symbol, 165) + } + pub(crate) fn ___reduce493< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Grammar = Grammar => ActionFn(0); + let ___sym0 = ___pop_Variant63(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action0::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (1, ___symbol, 166) + } + pub(crate) fn ___reduce494< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___GrammarWhereClauses = GrammarWhereClauses => ActionFn(1); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action1::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 167) + } + pub(crate) fn ___reduce496< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Pattern = Pattern => ActionFn(4); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action4::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 169) + } + pub(crate) fn ___reduce497< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___TypeRef = TypeRef => ActionFn(2); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action2::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 170) + } +} +pub use self::___parse___MatchMapping::MatchMappingParser; + +#[cfg_attr(rustfmt, rustfmt_skip)] +mod ___parse___Pattern { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] + + use string_cache::DefaultAtom as Atom; + use grammar::parse_tree::*; + use grammar::pattern::*; + use std::iter::once; + use tok::{self, Tok}; + use util::strip; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as ___lalrpop_util; + use super::___ToTriple; + #[allow(dead_code)] + pub enum ___Symbol<'input> + { + Variant0(Tok<'input>), + Variant1(&'input str), + Variant2(::std::option::Option>), + Variant3(TypeRef), + Variant4(::std::option::Option), + Variant5(Vec>), + Variant6(::std::option::Option>>), + Variant7(Condition), + Variant8(::std::option::Option), + Variant9(()), + Variant10(Alternative), + Variant11(::std::vec::Vec), + Variant12(Conversion), + Variant13(::std::vec::Vec), + Variant14(FieldPattern), + Variant15(::std::vec::Vec>), + Variant16(Parameter), + Variant17(::std::vec::Vec), + Variant18(WhereClause), + Variant19(::std::vec::Vec>), + Variant20(Atom), + Variant21(::std::vec::Vec), + Variant22(MatchItem), + Variant23(::std::vec::Vec), + Variant24(NonterminalString), + Variant25(::std::vec::Vec), + Variant26(Pattern), + Variant27(::std::vec::Vec>), + Variant28(Symbol), + Variant29(::std::vec::Vec), + Variant30(TypeBound), + Variant31(::std::vec::Vec>), + Variant32(TypeBoundParameter), + Variant33(::std::vec::Vec>), + Variant34(TypeParameter), + Variant35(::std::vec::Vec), + Variant36(::std::vec::Vec), + Variant37(usize), + Variant38(ActionKind), + Variant39(::std::option::Option), + Variant40(::std::option::Option), + Variant41(Vec), + Variant42(Annotation), + Variant43(::std::vec::Vec), + Variant44(AssociatedType), + Variant45(::std::vec::Vec), + Variant46(Vec), + Variant47(Vec), + Variant48(Vec>), + Variant49(Vec), + Variant50(Vec), + Variant51(Vec), + Variant52(Vec>), + Variant53(Vec), + Variant54(Vec), + Variant55(Vec), + Variant56(ConditionOp), + Variant57(::std::option::Option), + Variant58(EnumToken), + Variant59(ExprSymbol), + Variant60(GrammarItem), + Variant61(::std::option::Option>), + Variant62(::std::option::Option>), + Variant63(Grammar), + Variant64(::std::vec::Vec), + Variant65(::std::option::Option), + Variant66(::std::option::Option>), + Variant67(::std::option::Option>), + Variant68(::std::option::Option>), + Variant69(::std::option::Option>>), + Variant70(::std::option::Option), + Variant71(MatchContents), + Variant72(::std::option::Option), + Variant73(TerminalString), + Variant74(TerminalLiteral), + Variant75(MatchToken), + Variant76((NonterminalString, Vec)), + Variant77(::std::option::Option), + Variant78(Path), + Variant79(::std::option::Option>), + Variant80(PatternKind), + Variant81(Vec>), + Variant82(RepeatOp), + Variant83(String), + Variant84(::std::vec::Vec), + Variant85(::std::option::Option), + Variant86(SymbolKind), + Variant87(::std::option::Option>), + Variant88(::std::option::Option>), + Variant89(::std::option::Option), + Variant90(Visibility), + } + const ___ACTION: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, -389, -389, 0, 0, -389, 0, 0, 0, 16, 0, -389, 0, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, -389, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 17, -406, 0, 0, -406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, -406, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, -391, 0, 0, -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -391, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 7, -160, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, -402, 0, 0, -402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -402, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, -405, 0, 0, -405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -405, 0, + // State 11 + 0, 0, 0, 0, 0, 0, -360, -360, 0, 0, -360, 0, 0, -360, -360, 0, -360, 0, 0, 0, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -360, -360, 0, + // State 12 + 0, 0, 0, 0, 0, 0, -361, -361, 0, 0, -361, 0, 0, -361, -361, 0, -361, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, -361, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 0, -401, 0, 0, -401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -401, 0, + // State 14 + 0, 0, 0, 0, 0, 0, -390, -390, 0, 0, -390, 0, 0, 0, 29, 0, -390, 0, 0, 0, 0, 0, 0, -390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -390, -390, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, 7, -160, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, + // State 18 + 0, 0, 0, 0, 0, 0, 7, -162, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, -387, -387, 0, 0, -387, 0, 0, 0, 16, 0, -387, 0, 0, 0, 0, 0, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -387, -387, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, -478, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 64, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 26, 0, 27, 28, -176, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 0, -396, 0, 0, -396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -396, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 0, -404, 0, 0, -404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -404, 0, + // State 37 + 0, 0, 0, 0, 0, 0, -71, -71, 0, 0, 0, 0, -71, 0, -71, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, 0, -71, 0, -71, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, -388, -388, 0, 0, -388, 0, 0, 0, 29, 0, -388, 0, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -388, -388, 0, + // State 39 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 12, 64, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, -403, 0, 0, -403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -403, 0, + // State 41 + -443, 0, 0, -443, 0, 0, -443, -443, -443, -443, -443, 0, 0, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, -443, -443, -443, -443, 0, -443, -443, 0, -443, -443, -443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + -417, 0, 0, -417, 0, 0, -417, -417, -417, -417, -417, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, -417, -417, -417, -417, 0, -417, -417, 0, -417, -417, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + -441, 0, 0, -441, 0, 0, -441, -441, -441, -441, -441, 0, 0, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, -441, -441, -441, -441, 0, -441, -441, 0, -441, -441, -441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + -416, 0, 0, -416, 0, 0, -416, -416, -416, -416, -416, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, -416, -416, -416, -416, 0, -416, -416, 0, -416, -416, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + -415, 0, 0, -415, 0, 0, -415, -415, -415, -415, -415, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, -415, -415, -415, -415, 0, -415, -415, 0, -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + -430, 0, 0, -430, 0, 0, -430, -430, 86, 87, -430, 0, 0, 0, 0, 0, -430, 0, 0, 0, 0, 0, 0, -430, 88, -430, -430, 0, -430, -430, 0, -430, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + -435, 0, 0, -435, 0, 0, -435, -435, -435, -435, -435, 0, 0, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, -435, -435, -435, -435, 0, -435, -435, 0, -435, -435, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + -437, 0, 0, -437, 0, 0, -437, -437, -437, -437, -437, 0, 0, 0, 0, 0, -437, 0, 0, 0, 0, 0, 0, -437, -437, -437, -437, 0, -437, -437, 0, -437, -437, -437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + -447, 0, 0, -447, 0, 0, -447, -447, -447, -447, -447, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, -447, -447, -447, -447, 0, -447, -447, 0, -447, -447, -447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 52, 0, 0, 0, 0, 0, 53, -193, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 94, 0, 95, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + -445, 0, 0, -445, 0, 0, -445, -445, -445, -445, -445, 0, 0, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, -445, -445, -445, -445, 0, -445, -445, 0, -445, -445, -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + -446, 0, 0, -446, 0, 0, -446, -446, -446, -446, -446, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, -446, -446, -446, -446, 0, -446, -446, 0, -446, -446, -446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + -192, 0, 0, -192, 0, 0, -192, -192, -192, -192, -192, 0, 0, 0, 0, 0, -192, 0, 0, 0, 0, 0, 0, -192, -192, -192, -192, 0, -192, -192, 0, -192, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + -442, 0, 0, -442, 0, 0, -442, -442, -442, -442, -442, 0, 0, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, -442, -442, -442, -442, 0, -442, -442, 0, -442, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + -418, 0, 0, -418, 0, 0, -418, -418, -418, -418, -418, 0, 0, 0, 0, 0, -418, 0, 0, 0, 0, 0, 0, -418, -418, -418, -418, 0, -418, -418, 0, -418, -418, -418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + -427, 0, 0, -427, 0, 0, -427, -427, -427, -427, -427, 0, 0, 0, 0, 0, -427, 0, 0, 0, 0, 0, 0, -427, -427, -427, -427, 0, -427, -427, 0, -427, -427, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, -362, 0, -362, -362, 0, 0, 0, -362, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 26, 0, 27, 28, -178, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, -175, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, -394, 0, 0, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -394, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, -398, 0, 0, -398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -398, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, -395, 0, 0, -395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -395, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, -399, 0, 0, -399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -399, 0, + // State 76 + 0, 0, 0, 0, 0, 0, -72, -72, 0, 0, 0, 0, -72, 0, -72, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 0, -72, 0, -72, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 12, 64, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, -164, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + -436, 0, 0, -436, 0, 0, -436, -436, -436, -436, -436, 0, 0, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, -436, -436, -436, -436, 0, -436, -436, 0, -436, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + -420, 0, 0, -420, 0, 0, -420, -420, -420, -420, -420, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, -420, -420, -420, -420, 0, -420, -420, 0, -420, -420, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + -419, 0, 0, -419, 0, 0, -419, -419, -419, -419, -419, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, -419, -419, -419, -419, 0, -419, -419, 0, -419, -419, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + -421, 0, 0, -421, 0, 0, -421, -421, -421, -421, -421, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, -421, -421, -421, -421, 0, -421, -421, 0, -421, -421, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + -433, 0, 0, 0, 0, 0, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, -433, 0, -433, -433, 0, -433, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 52, 0, 0, 0, 0, 0, 53, -194, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 0, 0, 0, 0, 0, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, -96, 0, -96, -96, -96, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 0, -397, 0, 0, -397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -397, 0, + // State 103 + 0, 0, 0, 0, 0, 0, 0, -400, 0, 0, -400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -400, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, -166, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + -444, 0, 0, -444, 0, 0, -444, -444, -444, -444, -444, 0, 0, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, -444, -444, -444, -444, 0, -444, -444, 0, -444, -444, -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 112 + -434, 0, 0, 0, 0, 0, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, -434, 0, -434, -434, 0, -434, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 113 + 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 114 + -429, 0, 0, -429, 0, 0, -429, -429, 0, 0, -429, 0, 0, 0, 0, 0, -429, 0, 0, 0, 0, 0, 0, -429, 0, -429, -429, 0, -429, -429, 0, -429, -429, -429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, -97, 0, -97, -97, -97, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + -440, 0, 0, -440, 0, 0, -440, -440, -440, -440, -440, 0, 0, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, -440, -440, -440, -440, 0, -440, -440, 0, -440, -440, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 120 + -76, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, -76, -76, 0, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + -77, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, -77, -77, 0, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 123 + -428, 0, 0, -428, 0, 0, -428, -428, 0, 0, -428, 0, 0, 0, 0, 0, -428, 0, 0, 0, 0, 0, 0, -428, 0, -428, -428, 0, -428, -428, 0, -428, -428, -428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + const ___EOF_ACTION: &'static [i16] = &[ + // State 0 + 0, + // State 1 + 0, + // State 2 + -389, + // State 3 + -406, + // State 4 + -496, + // State 5 + -391, + // State 6 + 0, + // State 7 + -402, + // State 8 + 0, + // State 9 + 0, + // State 10 + -405, + // State 11 + -360, + // State 12 + -361, + // State 13 + -401, + // State 14 + -390, + // State 15 + 0, + // State 16 + 0, + // State 17 + 0, + // State 18 + 0, + // State 19 + 0, + // State 20 + 0, + // State 21 + 0, + // State 22 + -387, + // State 23 + 0, + // State 24 + 0, + // State 25 + 0, + // State 26 + 0, + // State 27 + 0, + // State 28 + 0, + // State 29 + 0, + // State 30 + 0, + // State 31 + 0, + // State 32 + 0, + // State 33 + 0, + // State 34 + -396, + // State 35 + 0, + // State 36 + -404, + // State 37 + 0, + // State 38 + -388, + // State 39 + 0, + // State 40 + -403, + // State 41 + 0, + // State 42 + 0, + // State 43 + 0, + // State 44 + 0, + // State 45 + 0, + // State 46 + 0, + // State 47 + 0, + // State 48 + 0, + // State 49 + 0, + // State 50 + 0, + // State 51 + 0, + // State 52 + 0, + // State 53 + 0, + // State 54 + 0, + // State 55 + 0, + // State 56 + 0, + // State 57 + 0, + // State 58 + 0, + // State 59 + 0, + // State 60 + 0, + // State 61 + 0, + // State 62 + 0, + // State 63 + 0, + // State 64 + 0, + // State 65 + 0, + // State 66 + 0, + // State 67 + 0, + // State 68 + -394, + // State 69 + 0, + // State 70 + 0, + // State 71 + -398, + // State 72 + 0, + // State 73 + -395, + // State 74 + 0, + // State 75 + -399, + // State 76 + 0, + // State 77 + 0, + // State 78 + 0, + // State 79 + 0, + // State 80 + 0, + // State 81 + 0, + // State 82 + 0, + // State 83 + 0, + // State 84 + 0, + // State 85 + 0, + // State 86 + 0, + // State 87 + 0, + // State 88 + 0, + // State 89 + 0, + // State 90 + 0, + // State 91 + 0, + // State 92 + 0, + // State 93 + 0, + // State 94 + 0, + // State 95 + 0, + // State 96 + 0, + // State 97 + 0, + // State 98 + 0, + // State 99 + 0, + // State 100 + 0, + // State 101 + 0, + // State 102 + -397, + // State 103 + -400, + // State 104 + 0, + // State 105 + 0, + // State 106 + 0, + // State 107 + 0, + // State 108 + 0, + // State 109 + 0, + // State 110 + 0, + // State 111 + 0, + // State 112 + 0, + // State 113 + 0, + // State 114 + 0, + // State 115 + 0, + // State 116 + 0, + // State 117 + 0, + // State 118 + 0, + // State 119 + 0, + // State 120 + 0, + // State 121 + 0, + // State 122 + 0, + // State 123 + 0, + ]; + const ___GOTO: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 21, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 21, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 36, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 48, 0, 0, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 90, 0, 91, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 0, 0, 0, 93, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 105, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 111, 0, 0, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 88 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 89 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 113, 0, 0, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 91 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 92 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 93 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 94 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 95 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 99 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 101 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 102 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 103 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 104 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 105 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 106 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 107 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 108 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 119, 0, 0, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 109 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 110 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 112 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 113 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, 0, 0, 0, 122, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 114 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 115 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 116 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 117 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 118 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 119 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 120 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 121 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 122 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 123 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { + const ___TERMINAL: &'static [&'static str] = &[ + r###""!""###, + r###""!=""###, + r###""!~""###, + r###""#""###, + r###""#![...]""###, + r###""&""###, + r###""(""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""->""###, + r###""..""###, + r###"":""###, + r###""::""###, + r###"";""###, + r###""<""###, + r###""=""###, + r###""==""###, + r###""=>""###, + r###""=>?""###, + r###""=>@L""###, + r###""=>@R""###, + r###"">""###, + r###""?""###, + r###""@L""###, + r###""@R""###, + r###""CharLiteral""###, + r###""Escape""###, + r###""Id""###, + r###""Lifetime""###, + r###""MacroId""###, + r###""RegexLiteral""###, + r###""StringLiteral""###, + r###""[""###, + r###""]""###, + r###""_""###, + r###""else""###, + r###""enum""###, + r###""extern""###, + r###""for""###, + r###""grammar""###, + r###""if""###, + r###""match""###, + r###""mut""###, + r###""pub""###, + r###""type""###, + r###""use""###, + r###""where""###, + r###""{""###, + r###""}""###, + r###""~~""###, + ]; + ___ACTION[(___state * 52)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { + if state == 0 { + None + } else { + Some(terminal.to_string()) + } + }).collect() + } + pub struct PatternParser { + _priv: (), + } + + impl PatternParser { + pub fn new() -> PatternParser { + PatternParser { + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + ___TOKEN: ___ToTriple<'input, Error=tok::Error>, + ___TOKENS: IntoIterator, + >( + &self, + text: &'input str, + ___tokens0: ___TOKENS, + ) -> Result, ___lalrpop_util::ParseError, tok::Error>> + { + let ___tokens = ___tokens0.into_iter(); + let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); + let mut ___states = vec![0_i16]; + let mut ___symbols = vec![]; + let mut ___integer; + let mut ___lookahead; + let ___last_location = &mut Default::default(); + '___shift: loop { + ___lookahead = match ___tokens.next() { + Some(Ok(v)) => v, + None => break '___shift, + Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), + }; + *___last_location = ___lookahead.2.clone(); + ___integer = match ___lookahead.1 { + Tok::Bang if true => 0, + Tok::BangEquals if true => 1, + Tok::BangTilde if true => 2, + Tok::Hash if true => 3, + Tok::ShebangAttribute(_) if true => 4, + Tok::Ampersand if true => 5, + Tok::LeftParen if true => 6, + Tok::RightParen if true => 7, + Tok::Star if true => 8, + Tok::Plus if true => 9, + Tok::Comma if true => 10, + Tok::MinusGreaterThan if true => 11, + Tok::DotDot if true => 12, + Tok::Colon if true => 13, + Tok::ColonColon if true => 14, + Tok::Semi if true => 15, + Tok::LessThan if true => 16, + Tok::Equals if true => 17, + Tok::EqualsEquals if true => 18, + Tok::EqualsGreaterThanCode(_) if true => 19, + Tok::EqualsGreaterThanQuestionCode(_) if true => 20, + Tok::EqualsGreaterThanLookahead if true => 21, + Tok::EqualsGreaterThanLookbehind if true => 22, + Tok::GreaterThan if true => 23, + Tok::Question if true => 24, + Tok::Lookahead if true => 25, + Tok::Lookbehind if true => 26, + Tok::CharLiteral(_) if true => 27, + Tok::Escape(_) if true => 28, + Tok::Id(_) if true => 29, + Tok::Lifetime(_) if true => 30, + Tok::MacroId(_) if true => 31, + Tok::RegexLiteral(_) if true => 32, + Tok::StringLiteral(_) if true => 33, + Tok::LeftBracket if true => 34, + Tok::RightBracket if true => 35, + Tok::Underscore if true => 36, + Tok::Else if true => 37, + Tok::Enum if true => 38, + Tok::Extern if true => 39, + Tok::For if true => 40, + Tok::Grammar if true => 41, + Tok::If if true => 42, + Tok::Match if true => 43, + Tok::Mut if true => 44, + Tok::Pub if true => 45, + Tok::Type if true => 46, + Tok::Use(_) if true => 47, + Tok::Where if true => 48, + Tok::LeftBrace if true => 49, + Tok::RightBrace if true => 50, + Tok::TildeTilde if true => 51, + _ => { + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: Some(___lookahead), + expected: ___expected_tokens(___state), + }; + return Err(___error); + } + }; + '___inner: loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___ACTION[___state * 52 + ___integer]; + if ___action > 0 { + let ___symbol = match ___integer { + 0 => match ___lookahead.1 { + ___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 1 => match ___lookahead.1 { + ___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 2 => match ___lookahead.1 { + ___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 3 => match ___lookahead.1 { + ___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 4 => match ___lookahead.1 { + Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 5 => match ___lookahead.1 { + ___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 6 => match ___lookahead.1 { + ___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 7 => match ___lookahead.1 { + ___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 8 => match ___lookahead.1 { + ___tok @ Tok::Star => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 9 => match ___lookahead.1 { + ___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 10 => match ___lookahead.1 { + ___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 11 => match ___lookahead.1 { + ___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 12 => match ___lookahead.1 { + ___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 13 => match ___lookahead.1 { + ___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 14 => match ___lookahead.1 { + ___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 15 => match ___lookahead.1 { + ___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 16 => match ___lookahead.1 { + ___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 17 => match ___lookahead.1 { + ___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 18 => match ___lookahead.1 { + ___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 19 => match ___lookahead.1 { + Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 20 => match ___lookahead.1 { + Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 21 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 22 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 23 => match ___lookahead.1 { + ___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 24 => match ___lookahead.1 { + ___tok @ Tok::Question => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 25 => match ___lookahead.1 { + ___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 26 => match ___lookahead.1 { + ___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 27 => match ___lookahead.1 { + Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 28 => match ___lookahead.1 { + Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 29 => match ___lookahead.1 { + Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 30 => match ___lookahead.1 { + Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 31 => match ___lookahead.1 { + Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 32 => match ___lookahead.1 { + Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 33 => match ___lookahead.1 { + Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 34 => match ___lookahead.1 { + ___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 35 => match ___lookahead.1 { + ___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 36 => match ___lookahead.1 { + ___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 37 => match ___lookahead.1 { + ___tok @ Tok::Else => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 38 => match ___lookahead.1 { + ___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 39 => match ___lookahead.1 { + ___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 40 => match ___lookahead.1 { + ___tok @ Tok::For => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 41 => match ___lookahead.1 { + ___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 42 => match ___lookahead.1 { + ___tok @ Tok::If => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 43 => match ___lookahead.1 { + ___tok @ Tok::Match => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 44 => match ___lookahead.1 { + ___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 45 => match ___lookahead.1 { + ___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 46 => match ___lookahead.1 { + ___tok @ Tok::Type => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 47 => match ___lookahead.1 { + Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 48 => match ___lookahead.1 { + ___tok @ Tok::Where => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 49 => match ___lookahead.1 { + ___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 50 => match ___lookahead.1 { + ___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 51 => match ___lookahead.1 { + ___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + _ => unreachable!(), + }; + ___states.push(___action - 1); + ___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); + continue '___shift; + } else if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + if r.is_err() { + return r; + } + return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); + } + } else { + let mut ___err_lookahead = Some(___lookahead); + let mut ___err_integer: Option = Some(___integer); + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___EOF_ACTION[___state]; + if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + return r; + } + } else { + let mut ___err_lookahead = None; + let mut ___err_integer: Option = None; + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + } + pub(crate) fn ___reduce< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> Option,___lalrpop_util::ParseError, tok::Error>>> + { + let (___pop_states, ___symbol, ___nonterminal) = match -___action { + 1 => { + ___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 2 => { + ___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 3 => { + ___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 4 => { + ___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 5 => { + ___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 6 => { + ___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 7 => { + ___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 8 => { + ___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 9 => { + ___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 10 => { + ___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 11 => { + ___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 12 => { + ___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 13 => { + ___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 14 => { + ___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 15 => { + ___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 16 => { + ___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 17 => { + ___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 18 => { + ___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 19 => { + ___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 20 => { + ___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 21 => { + ___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 22 => { + ___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 23 => { + ___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 24 => { + ___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 25 => { + ___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 26 => { + ___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 27 => { + ___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 28 => { + ___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 29 => { + ___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 30 => { + ___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 31 => { + ___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 32 => { + ___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 33 => { + ___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 34 => { + ___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 35 => { + ___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 36 => { + ___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 37 => { + ___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 38 => { + ___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 39 => { + ___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 40 => { + ___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 41 => { + ___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 42 => { + ___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 43 => { + ___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 44 => { + ___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 45 => { + ___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 46 => { + ___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 47 => { + ___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 48 => { + ___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 49 => { + ___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 50 => { + ___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 51 => { + ___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 52 => { + ___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 53 => { + ___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 54 => { + ___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 55 => { + ___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 56 => { + ___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 57 => { + ___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 58 => { + ___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 59 => { + ___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 60 => { + ___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 61 => { + ___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 62 => { + ___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 63 => { + ___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 64 => { + ___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 65 => { + ___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 66 => { + ___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 67 => { + ___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 68 => { + ___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 69 => { + ___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 70 => { + ___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 71 => { + ___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 72 => { + ___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 73 => { + ___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 74 => { + ___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 75 => { + ___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 76 => { + ___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 77 => { + ___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 78 => { + ___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 79 => { + ___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 80 => { + ___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 81 => { + ___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 82 => { + ___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 83 => { + ___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 84 => { + ___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 85 => { + ___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 86 => { + ___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 87 => { + ___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 88 => { + ___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 89 => { + ___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 90 => { + ___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 91 => { + ___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 92 => { + ___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 93 => { + ___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 94 => { + ___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 95 => { + ___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 96 => { + ___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 97 => { + ___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 98 => { + ___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 99 => { + ___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 100 => { + ___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 101 => { + ___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 102 => { + ___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 103 => { + ___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 104 => { + ___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 105 => { + ___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 106 => { + ___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 107 => { + ___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 108 => { + ___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 109 => { + ___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 110 => { + ___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 111 => { + ___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 112 => { + ___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 113 => { + ___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 114 => { + ___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 115 => { + ___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 116 => { + ___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 117 => { + ___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 118 => { + ___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 119 => { + ___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 120 => { + ___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 121 => { + ___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 122 => { + ___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 123 => { + ___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 124 => { + ___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 125 => { + ___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 126 => { + ___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 127 => { + ___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 128 => { + ___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 129 => { + ___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 130 => { + ___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 131 => { + ___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 132 => { + ___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 133 => { + ___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 134 => { + ___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 135 => { + ___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 136 => { + ___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 137 => { + ___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 138 => { + ___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 139 => { + ___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 140 => { + ___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 141 => { + ___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 142 => { + ___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 143 => { + ___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 144 => { + ___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 145 => { + ___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 146 => { + ___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 147 => { + ___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 148 => { + ___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 149 => { + ___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 150 => { + ___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 151 => { + ___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 152 => { + ___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 153 => { + ___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 154 => { + ___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 155 => { + ___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 156 => { + ___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 157 => { + ___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 158 => { + ___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 159 => { + ___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 160 => { + ___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 161 => { + ___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 162 => { + ___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 163 => { + ___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 164 => { + ___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 165 => { + ___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 166 => { + ___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 167 => { + ___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 168 => { + ___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 169 => { + ___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 170 => { + ___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 171 => { + ___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 172 => { + ___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 173 => { + ___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 174 => { + ___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 175 => { + ___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 176 => { + ___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 177 => { + ___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 178 => { + ___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 179 => { + ___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 180 => { + ___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 181 => { + ___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 182 => { + ___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 183 => { + ___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 184 => { + ___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 185 => { + ___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 186 => { + ___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 187 => { + ___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 188 => { + // Conversion = Terminal, "=>" => ActionFn(417); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action417::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 90) + } + 189 => { + ___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 190 => { + ___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 191 => { + ___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 192 => { + ___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 193 => { + ___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 194 => { + ___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 195 => { + ___reduce195(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 196 => { + ___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 197 => { + ___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 198 => { + ___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 199 => { + ___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 200 => { + ___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 201 => { + ___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 202 => { + ___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 203 => { + ___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 204 => { + ___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 205 => { + ___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 206 => { + ___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 207 => { + ___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 208 => { + ___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 209 => { + ___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 210 => { + ___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 211 => { + ___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 212 => { + ___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 213 => { + ___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 214 => { + ___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 215 => { + ___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 216 => { + ___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 217 => { + ___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 218 => { + ___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 219 => { + ___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 220 => { + ___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 221 => { + ___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 222 => { + ___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 223 => { + ___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 224 => { + ___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 225 => { + ___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 226 => { + ___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 227 => { + ___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 228 => { + ___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 229 => { + ___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 230 => { + ___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 231 => { + ___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 232 => { + ___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 233 => { + ___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 234 => { + ___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 235 => { + ___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 236 => { + ___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 237 => { + ___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 238 => { + ___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 239 => { + ___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 240 => { + ___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 241 => { + ___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 242 => { + ___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 243 => { + ___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 244 => { + ___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 245 => { + ___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 246 => { + ___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 247 => { + ___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 248 => { + ___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 249 => { + ___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 250 => { + ___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 251 => { + ___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 252 => { + ___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 253 => { + ___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 254 => { + ___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 255 => { + ___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 256 => { + ___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 257 => { + ___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 258 => { + ___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 259 => { + ___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 260 => { + ___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 261 => { + ___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 262 => { + ___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 263 => { + ___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 264 => { + ___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 265 => { + ___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 266 => { + ___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 267 => { + ___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 268 => { + ___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 269 => { + ___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 270 => { + ___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 271 => { + ___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 272 => { + ___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 273 => { + ___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 274 => { + ___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 275 => { + ___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 276 => { + ___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 277 => { + ___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 278 => { + ___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 279 => { + ___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 280 => { + ___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 281 => { + ___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 282 => { + ___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 283 => { + ___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 284 => { + ___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 285 => { + ___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 286 => { + ___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 287 => { + ___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 288 => { + ___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 289 => { + ___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 290 => { + ___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 291 => { + ___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 292 => { + ___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 293 => { + ___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 294 => { + ___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 295 => { + ___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 296 => { + ___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 297 => { + ___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 298 => { + ___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 299 => { + ___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 300 => { + ___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 301 => { + ___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 302 => { + ___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 303 => { + ___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 304 => { + ___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 305 => { + ___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 306 => { + ___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 307 => { + ___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 308 => { + ___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 309 => { + ___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 310 => { + ___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 311 => { + ___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 312 => { + ___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 313 => { + ___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 314 => { + ___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 315 => { + ___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 316 => { + ___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 317 => { + ___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 318 => { + ___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 319 => { + ___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 320 => { + ___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 321 => { + ___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 322 => { + ___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 323 => { + ___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 324 => { + ___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 325 => { + ___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 326 => { + ___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 327 => { + ___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 328 => { + ___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 329 => { + ___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 330 => { + ___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 331 => { + ___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 332 => { + ___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 333 => { + ___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 334 => { + ___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 335 => { + ___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 336 => { + ___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 337 => { + ___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 338 => { + ___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 339 => { + ___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 340 => { + ___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 341 => { + ___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 342 => { + ___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 343 => { + ___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 344 => { + ___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 345 => { + ___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 346 => { + ___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 347 => { + ___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 348 => { + ___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 349 => { + ___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 350 => { + ___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 351 => { + ___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 352 => { + ___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 353 => { + ___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 354 => { + ___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 355 => { + ___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 356 => { + ___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 357 => { + ___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 358 => { + ___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 359 => { + ___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 360 => { + ___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 361 => { + ___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 362 => { + ___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 363 => { + ___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 364 => { + ___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 365 => { + ___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 366 => { + ___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 367 => { + ___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 368 => { + ___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 369 => { + // MatchItem = MatchSymbol, "=>" => ActionFn(425); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action425::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 119) + } + 370 => { + ___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 371 => { + ___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 372 => { + ___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 373 => { + ___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 374 => { + ___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 375 => { + ___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 376 => { + ___reduce376(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 377 => { + ___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 378 => { + ___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 379 => { + ___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 380 => { + ___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 381 => { + ___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 382 => { + ___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 383 => { + ___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 384 => { + ___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 385 => { + ___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 386 => { + ___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 387 => { + ___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 388 => { + ___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 389 => { + ___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 390 => { + ___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 391 => { + ___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 392 => { + ___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 393 => { + ___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 394 => { + ___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 395 => { + ___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 396 => { + ___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 397 => { + ___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 398 => { + ___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 399 => { + ___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 400 => { + ___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 401 => { + ___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 402 => { + ___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 403 => { + ___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 404 => { + ___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 405 => { + ___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 406 => { + ___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 407 => { + ___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 408 => { + ___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 409 => { + ___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 410 => { + ___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 411 => { + ___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 412 => { + ___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 413 => { + ___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 414 => { + ___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 415 => { + ___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 416 => { + ___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 417 => { + ___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 418 => { + ___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 419 => { + ___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 420 => { + ___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 421 => { + ___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 422 => { + ___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 423 => { + ___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 424 => { + ___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 425 => { + ___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 426 => { + ___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 427 => { + ___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 428 => { + ___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 429 => { + ___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 430 => { + ___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 431 => { + ___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 432 => { + ___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 433 => { + ___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 434 => { + ___reduce434(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 435 => { + ___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 436 => { + ___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 437 => { + ___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 438 => { + ___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 439 => { + ___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 440 => { + ___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 441 => { + ___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 442 => { + ___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 443 => { + ___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 444 => { + ___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 445 => { + ___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 446 => { + ___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 447 => { + ___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 448 => { + ___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 449 => { + ___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 450 => { + ___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 451 => { + ___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 452 => { + ___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 453 => { + ___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 454 => { + ___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 455 => { + ___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 456 => { + ___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 457 => { + ___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 458 => { + ___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 459 => { + ___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 460 => { + ___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 461 => { + ___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 462 => { + ___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 463 => { + ___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 464 => { + ___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 465 => { + ___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 466 => { + ___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 467 => { + ___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 468 => { + ___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 469 => { + ___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 470 => { + ___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 471 => { + ___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 472 => { + ___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 473 => { + ___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 474 => { + ___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 475 => { + ___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 476 => { + ___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 477 => { + ___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 478 => { + ___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 479 => { + ___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 480 => { + ___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 481 => { + ___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 482 => { + ___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 483 => { + ___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 484 => { + ___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 485 => { + ___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 486 => { + ___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 487 => { + ___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 488 => { + ___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 489 => { + ___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 490 => { + ___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 491 => { + ___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 492 => { + ___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 493 => { + ___reduce493(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 494 => { + ___reduce494(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 495 => { + ___reduce495(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 496 => { + // ___Pattern = Pattern => ActionFn(4); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action4::<>(text, ___sym0); + return Some(Ok(___nt)); + } + 497 => { + ___reduce497(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + _ => panic!("invalid action code {}", ___action) + }; + let ___states_len = ___states.len(); + ___states.truncate(___states_len - ___pop_states); + ___symbols.push(___symbol); + let ___state = *___states.last().unwrap() as usize; + let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; + ___states.push(___next_state); + None + } + fn ___pop_Variant9< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant76< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (NonterminalString, Vec), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant38< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ActionKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant10< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Alternative, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant42< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Annotation, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant44< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, AssociatedType, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant20< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Atom, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant7< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Condition, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant56< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ConditionOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant12< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Conversion, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant58< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, EnumToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant59< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ExprSymbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant14< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, FieldPattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant63< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Grammar, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant60< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, GrammarItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant71< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchContents, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant22< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant75< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant24< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, NonterminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant16< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Parameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant78< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Path, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant26< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Pattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant80< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, PatternKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant82< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, RepeatOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant83< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant28< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Symbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant86< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, SymbolKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant74< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalLiteral, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant73< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant0< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Tok<'input>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant30< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBound, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant32< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBoundParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant34< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant3< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeRef, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant41< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant49< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant46< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant50< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant51< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant47< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant52< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant53< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant81< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant5< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant54< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant55< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant48< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant90< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Visibility, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant18< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, WhereClause, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant37< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant39< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant40< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant70< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant8< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant57< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant61< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant72< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant77< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant65< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant79< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant85< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant2< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant87< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant88< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant89< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant4< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant62< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant66< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant6< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant67< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant69< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant68< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant11< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant43< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant45< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant21< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant13< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant15< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant64< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant23< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant25< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant17< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant27< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant84< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant29< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant31< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant33< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant35< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant36< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant19< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant1< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + pub(crate) fn ___reduce1< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = "::" => ActionFn(126); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action126::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 0) + } + pub(crate) fn ___reduce2< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = => ActionFn(127); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action127::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 0) + } + pub(crate) fn ___reduce3< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = "mut" => ActionFn(129); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action129::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 1) + } + pub(crate) fn ___reduce4< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = => ActionFn(130); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action130::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 1) + } + pub(crate) fn ___reduce5< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" ) = "->", TypeRef => ActionFn(156); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action156::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 2) + } + pub(crate) fn ___reduce6< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = "->", TypeRef => ActionFn(300); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action300::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 3) + } + pub(crate) fn ___reduce7< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = => ActionFn(155); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action155::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 3) + } + pub(crate) fn ___reduce8< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" ) = ":", TypeRef => ActionFn(147); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action147::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 4) + } + pub(crate) fn ___reduce9< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = ":", TypeRef => ActionFn(303); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action303::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 5) + } + pub(crate) fn ___reduce10< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = => ActionFn(146); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action146::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 5) + } + pub(crate) fn ___reduce11< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">") = "<", Comma, ">" => ActionFn(152); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action152::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (3, ___symbol, 6) + } + pub(crate) fn ___reduce12< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = "<", Comma, ">" => ActionFn(306); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action306::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (3, ___symbol, 7) + } + pub(crate) fn ___reduce13< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = => ActionFn(151); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action151::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (0, ___symbol, 7) + } + pub(crate) fn ___reduce14< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" ) = "if", Cond => ActionFn(140); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action140::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (2, ___symbol, 8) + } + pub(crate) fn ___reduce15< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = "if", Cond => ActionFn(309); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action309::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (2, ___symbol, 9) + } + pub(crate) fn ___reduce16< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = => ActionFn(139); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action139::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (0, ___symbol, 9) + } + pub(crate) fn ___reduce17< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // () = => ActionFn(148); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action148::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); + (0, ___symbol, 10) + } + pub(crate) fn ___reduce18< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Alternative, "," => ActionFn(234); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action234::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 11) + } + pub(crate) fn ___reduce19< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(232); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action232::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (0, ___symbol, 12) + } + pub(crate) fn ___reduce20< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(233); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action233::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (1, ___symbol, 12) + } + pub(crate) fn ___reduce21< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Alternative, "," => ActionFn(315); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action315::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (2, ___symbol, 13) + } + pub(crate) fn ___reduce22< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Alternative, "," => ActionFn(316); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action316::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (3, ___symbol, 13) + } + pub(crate) fn ___reduce23< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Conversion, "," => ActionFn(258); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action258::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 14) + } + pub(crate) fn ___reduce24< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(256); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action256::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (0, ___symbol, 15) + } + pub(crate) fn ___reduce25< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(257); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action257::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (1, ___symbol, 15) + } + pub(crate) fn ___reduce26< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Conversion, "," => ActionFn(319); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action319::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (2, ___symbol, 16) + } + pub(crate) fn ___reduce27< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Conversion, "," => ActionFn(320); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action320::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (3, ___symbol, 16) + } + pub(crate) fn ___reduce28< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = FieldPattern, "," => ActionFn(117); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action117::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (2, ___symbol, 17) + } + pub(crate) fn ___reduce29< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(115); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action115::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (0, ___symbol, 18) + } + pub(crate) fn ___reduce30< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(116); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action116::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (1, ___symbol, 18) + } + pub(crate) fn ___reduce31< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = FieldPattern, "," => ActionFn(323); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action323::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (2, ___symbol, 19) + } + pub(crate) fn ___reduce32< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(324); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant14(___symbols); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (3, ___symbol, 19) + } + pub(crate) fn ___reduce33< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarParameter, "," => ActionFn(224); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action224::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (2, ___symbol, 20) + } + pub(crate) fn ___reduce34< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(222); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action222::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (0, ___symbol, 21) + } + pub(crate) fn ___reduce35< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(223); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action223::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (1, ___symbol, 21) + } + pub(crate) fn ___reduce36< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarParameter, "," => ActionFn(329); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action329::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (2, ___symbol, 22) + } + pub(crate) fn ___reduce37< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(330); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action330::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (3, ___symbol, 22) + } + pub(crate) fn ___reduce38< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarWhereClause, "," => ActionFn(198); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action198::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (2, ___symbol, 23) + } + pub(crate) fn ___reduce39< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(196); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action196::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (0, ___symbol, 24) + } + pub(crate) fn ___reduce40< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(197); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action197::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (1, ___symbol, 24) + } + pub(crate) fn ___reduce41< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarWhereClause, "," => ActionFn(333); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action333::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (2, ___symbol, 25) + } + pub(crate) fn ___reduce42< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(334); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action334::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (3, ___symbol, 25) + } + pub(crate) fn ___reduce43< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::") = Id, "::" => ActionFn(125); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action125::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 26) + } + pub(crate) fn ___reduce44< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = => ActionFn(123); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action123::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 27) + } + pub(crate) fn ___reduce45< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = ( "::")+ => ActionFn(124); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action124::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 27) + } + pub(crate) fn ___reduce46< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = Id, "::" => ActionFn(337); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action337::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 28) + } + pub(crate) fn ___reduce47< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = ( "::")+, Id, "::" => ActionFn(338); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 28) + } + pub(crate) fn ___reduce48< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = Lifetime, "+" => ActionFn(201); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action201::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 29) + } + pub(crate) fn ___reduce49< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(199); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action199::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 30) + } + pub(crate) fn ___reduce50< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(200); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action200::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 30) + } + pub(crate) fn ___reduce51< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = Lifetime, "+" => ActionFn(343); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action343::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 31) + } + pub(crate) fn ___reduce52< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(344); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action344::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 31) + } + pub(crate) fn ___reduce53< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Lifetime, "," => ActionFn(204); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action204::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 32) + } + pub(crate) fn ___reduce54< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(202); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action202::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 33) + } + pub(crate) fn ___reduce55< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(203); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action203::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 33) + } + pub(crate) fn ___reduce56< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Lifetime, "," => ActionFn(347); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action347::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 34) + } + pub(crate) fn ___reduce57< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(348); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 34) + } + pub(crate) fn ___reduce58< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = MatchItem, "," => ActionFn(253); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action253::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 35) + } + pub(crate) fn ___reduce59< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(251); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action251::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (0, ___symbol, 36) + } + pub(crate) fn ___reduce60< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(252); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action252::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (1, ___symbol, 36) + } + pub(crate) fn ___reduce61< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = MatchItem, "," => ActionFn(351); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action351::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (2, ___symbol, 37) + } + pub(crate) fn ___reduce62< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(352); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (3, ___symbol, 37) + } + pub(crate) fn ___reduce63< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = NotMacroId, "," => ActionFn(229); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action229::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (2, ___symbol, 38) + } + pub(crate) fn ___reduce64< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(227); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action227::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (0, ___symbol, 39) + } + pub(crate) fn ___reduce65< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(228); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action228::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (1, ___symbol, 39) + } + pub(crate) fn ___reduce66< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = NotMacroId, "," => ActionFn(355); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action355::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (2, ___symbol, 40) + } + pub(crate) fn ___reduce67< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(356); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (3, ___symbol, 40) + } + pub(crate) fn ___reduce68< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Pattern, "," => ActionFn(263); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action263::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (2, ___symbol, 41) + } + pub(crate) fn ___reduce69< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(261); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action261::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (0, ___symbol, 42) + } + pub(crate) fn ___reduce70< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(262); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action262::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (1, ___symbol, 42) + } + pub(crate) fn ___reduce71< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Pattern, "," => ActionFn(359); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action359::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (2, ___symbol, 43) + } + pub(crate) fn ___reduce72< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(360); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (3, ___symbol, 43) + } + pub(crate) fn ___reduce73< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Symbol, "," => ActionFn(239); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action239::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 44) + } + pub(crate) fn ___reduce74< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(237); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action237::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 45) + } + pub(crate) fn ___reduce75< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(238); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action238::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 45) + } + pub(crate) fn ___reduce76< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Symbol, "," => ActionFn(363); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action363::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 46) + } + pub(crate) fn ___reduce77< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Symbol, "," => ActionFn(364); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (3, ___symbol, 46) + } + pub(crate) fn ___reduce78< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = TypeBound, "+" => ActionFn(209); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action209::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 47) + } + pub(crate) fn ___reduce79< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(207); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action207::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (0, ___symbol, 48) + } + pub(crate) fn ___reduce80< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(208); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action208::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (1, ___symbol, 48) + } + pub(crate) fn ___reduce81< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = TypeBound, "+" => ActionFn(367); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action367::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (2, ___symbol, 49) + } + pub(crate) fn ___reduce82< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(368); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (3, ___symbol, 49) + } + pub(crate) fn ___reduce83< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeBoundParameter, "," => ActionFn(219); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action219::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (2, ___symbol, 50) + } + pub(crate) fn ___reduce84< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(217); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action217::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (0, ___symbol, 51) + } + pub(crate) fn ___reduce85< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(218); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action218::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (1, ___symbol, 51) + } + pub(crate) fn ___reduce86< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeBoundParameter, "," => ActionFn(371); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action371::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (2, ___symbol, 52) + } + pub(crate) fn ___reduce87< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(372); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (3, ___symbol, 52) + } + pub(crate) fn ___reduce88< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeParameter, "," => ActionFn(193); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action193::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (2, ___symbol, 53) + } + pub(crate) fn ___reduce89< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(191); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action191::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (0, ___symbol, 54) + } + pub(crate) fn ___reduce90< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(192); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action192::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (1, ___symbol, 54) + } + pub(crate) fn ___reduce91< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeParameter, "," => ActionFn(375); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action375::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (2, ___symbol, 55) + } + pub(crate) fn ___reduce92< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(376); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (3, ___symbol, 55) + } + pub(crate) fn ___reduce93< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRef, "," => ActionFn(214); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action214::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 56) + } + pub(crate) fn ___reduce94< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(212); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action212::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 57) + } + pub(crate) fn ___reduce95< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(213); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action213::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 57) + } + pub(crate) fn ___reduce96< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRef, "," => ActionFn(379); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action379::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 58) + } + pub(crate) fn ___reduce97< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(380); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 58) + } + pub(crate) fn ___reduce98< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRefOrLifetime, "," => ActionFn(244); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action244::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 59) + } + pub(crate) fn ___reduce99< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(242); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action242::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 60) + } + pub(crate) fn ___reduce100< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(243); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action243::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 60) + } + pub(crate) fn ___reduce101< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRefOrLifetime, "," => ActionFn(383); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action383::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 61) + } + pub(crate) fn ___reduce102< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(384); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 61) + } + pub(crate) fn ___reduce103< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @L = => ActionFn(174); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action174::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 62) + } + pub(crate) fn ___reduce104< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @R = => ActionFn(173); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action173::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 63) + } + pub(crate) fn ___reduce105< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@L" => ActionFn(39); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action39::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce106< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@R" => ActionFn(40); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action40::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce107< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>" => ActionFn(41); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action41::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce108< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>?" => ActionFn(42); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action42::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce109< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = Action => ActionFn(136); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action136::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (1, ___symbol, 65) + } + pub(crate) fn ___reduce110< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = => ActionFn(137); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action137::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (0, ___symbol, 65) + } + pub(crate) fn ___reduce111< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond, Action => ActionFn(434); + let ___sym3 = ___pop_Variant38(___symbols); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action434::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (4, ___symbol, 66) + } + pub(crate) fn ___reduce112< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond => ActionFn(435); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce113< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, Action => ActionFn(436); + let ___sym1 = ___pop_Variant38(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action436::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 66) + } + pub(crate) fn ___reduce114< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+ => ActionFn(437); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action437::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce115< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = "if", Cond, Action => ActionFn(412); + let ___sym2 = ___pop_Variant38(___symbols); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action412::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce116< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Action => ActionFn(413); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action413::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce117< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = Alternative => ActionFn(230); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action230::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (1, ___symbol, 67) + } + pub(crate) fn ___reduce118< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = => ActionFn(231); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action231::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (0, ___symbol, 67) + } + pub(crate) fn ___reduce119< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = Alternative, ";" => ActionFn(35); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action35::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 68) + } + pub(crate) fn ___reduce120< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = "{", Comma, "}", ";" => ActionFn(36); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant41(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action36::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (4, ___symbol, 68) + } + pub(crate) fn ___reduce121< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation = "#", "[", Id, "]" => ActionFn(414); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action414::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); + (4, ___symbol, 69) + } + pub(crate) fn ___reduce122< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = => ActionFn(175); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action175::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (0, ___symbol, 70) + } + pub(crate) fn ___reduce123< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = Annotation+ => ActionFn(176); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action176::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 70) + } + pub(crate) fn ___reduce124< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation => ActionFn(185); + let ___sym0 = ___pop_Variant42(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action185::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 71) + } + pub(crate) fn ___reduce125< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation+, Annotation => ActionFn(186); + let ___sym1 = ___pop_Variant42(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action186::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (2, ___symbol, 71) + } + pub(crate) fn ___reduce126< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(415); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action415::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); + (5, ___symbol, 72) + } + pub(crate) fn ___reduce127< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = => ActionFn(121); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action121::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (0, ___symbol, 73) + } + pub(crate) fn ___reduce128< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = AssociatedType+ => ActionFn(122); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action122::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 73) + } + pub(crate) fn ___reduce129< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType => ActionFn(247); + let ___sym0 = ___pop_Variant44(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action247::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 74) + } + pub(crate) fn ___reduce130< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(248); + let ___sym1 = ___pop_Variant44(___symbols); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action248::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (2, ___symbol, 74) + } + pub(crate) fn ___reduce131< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Alternative => ActionFn(438); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action438::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce132< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(439); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action439::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (0, ___symbol, 75) + } + pub(crate) fn ___reduce133< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Alternative => ActionFn(440); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action440::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 75) + } + pub(crate) fn ___reduce134< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(441); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action441::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce135< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Conversion => ActionFn(454); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action454::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce136< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(455); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action455::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (0, ___symbol, 76) + } + pub(crate) fn ___reduce137< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Conversion => ActionFn(456); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action456::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (2, ___symbol, 76) + } + pub(crate) fn ___reduce138< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(457); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action457::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce139< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarParameter => ActionFn(476); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action476::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce140< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(477); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action477::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (0, ___symbol, 77) + } + pub(crate) fn ___reduce141< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarParameter => ActionFn(478); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action478::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (2, ___symbol, 77) + } + pub(crate) fn ___reduce142< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(479); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action479::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce143< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarWhereClause => ActionFn(504); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action504::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce144< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(505); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action505::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (0, ___symbol, 78) + } + pub(crate) fn ___reduce145< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarWhereClause => ActionFn(506); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action506::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 78) + } + pub(crate) fn ___reduce146< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(507); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action507::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce147< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Lifetime => ActionFn(540); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action540::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce148< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(541); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action541::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 79) + } + pub(crate) fn ___reduce149< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Lifetime => ActionFn(542); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action542::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 79) + } + pub(crate) fn ___reduce150< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(543); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action543::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce151< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = MatchItem => ActionFn(552); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action552::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce152< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(553); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action553::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (0, ___symbol, 80) + } + pub(crate) fn ___reduce153< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, MatchItem => ActionFn(554); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action554::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (2, ___symbol, 80) + } + pub(crate) fn ___reduce154< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(555); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action555::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce155< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = NotMacroId => ActionFn(556); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action556::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce156< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(557); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action557::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (0, ___symbol, 81) + } + pub(crate) fn ___reduce157< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, NotMacroId => ActionFn(558); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action558::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (2, ___symbol, 81) + } + pub(crate) fn ___reduce158< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(559); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action559::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce159< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Pattern => ActionFn(560); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action560::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce160< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(561); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action561::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (0, ___symbol, 82) + } + pub(crate) fn ___reduce161< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Pattern => ActionFn(562); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action562::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (2, ___symbol, 82) + } + pub(crate) fn ___reduce162< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(563); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action563::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce163< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Symbol => ActionFn(630); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action630::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce164< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(631); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action631::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (0, ___symbol, 83) + } + pub(crate) fn ___reduce165< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Symbol => ActionFn(632); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action632::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (2, ___symbol, 83) + } + pub(crate) fn ___reduce166< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(633); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action633::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce167< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeBoundParameter => ActionFn(638); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action638::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce168< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(639); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action639::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (0, ___symbol, 84) + } + pub(crate) fn ___reduce169< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeBoundParameter => ActionFn(640); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action640::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (2, ___symbol, 84) + } + pub(crate) fn ___reduce170< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(641); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action641::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce171< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeParameter => ActionFn(642); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action642::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce172< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(643); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action643::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (0, ___symbol, 85) + } + pub(crate) fn ___reduce173< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeParameter => ActionFn(644); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action644::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (2, ___symbol, 85) + } + pub(crate) fn ___reduce174< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(645); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action645::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce175< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRef => ActionFn(646); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action646::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce176< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(647); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action647::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 86) + } + pub(crate) fn ___reduce177< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRef => ActionFn(648); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action648::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 86) + } + pub(crate) fn ___reduce178< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(649); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action649::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce179< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRefOrLifetime => ActionFn(650); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action650::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce180< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(651); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action651::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 87) + } + pub(crate) fn ___reduce181< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRefOrLifetime => ActionFn(652); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action652::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 87) + } + pub(crate) fn ___reduce182< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(653); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action653::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce183< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Cond = NotMacroId, CondOp, StringLiteral => ActionFn(416); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant56(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action416::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (3, ___symbol, 88) + } + pub(crate) fn ___reduce184< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "==" => ActionFn(44); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action44::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce185< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!=" => ActionFn(45); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action45::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce186< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "~~" => ActionFn(46); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action46::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce187< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!~" => ActionFn(47); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action47::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce189< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = Conversion => ActionFn(254); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action254::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (1, ___symbol, 91) + } + pub(crate) fn ___reduce190< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = => ActionFn(255); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action255::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (0, ___symbol, 91) + } + pub(crate) fn ___reduce191< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(418); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant46(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action418::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); + (5, ___symbol, 92) + } + pub(crate) fn ___reduce192< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Escape = "Escape" => ActionFn(103); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action103::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 93) + } + pub(crate) fn ___reduce193< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = => ActionFn(628); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action628::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (0, ___symbol, 94) + } + pub(crate) fn ___reduce194< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = Symbol+ => ActionFn(629); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action629::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (1, ___symbol, 94) + } + pub(crate) fn ___reduce195< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, "}" => ActionFn(448); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action448::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce196< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(449); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant45(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action449::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce197< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(450); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action450::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce198< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(451); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant45(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action451::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 95) + } + pub(crate) fn ___reduce199< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", "}" => ActionFn(452); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action452::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (3, ___symbol, 95) + } + pub(crate) fn ___reduce200< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(453); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce201< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern = Id, ":", Pattern => ActionFn(421); + let ___sym2 = ___pop_Variant26(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (3, ___symbol, 96) + } + pub(crate) fn ___reduce202< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = FieldPattern => ActionFn(113); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action113::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (1, ___symbol, 97) + } + pub(crate) fn ___reduce203< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = => ActionFn(114); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action114::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (0, ___symbol, 97) + } + pub(crate) fn ___reduce204< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll = "for", "<", Comma, ">" => ActionFn(12); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action12::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (4, ___symbol, 98) + } + pub(crate) fn ___reduce205< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = ForAll => ActionFn(160); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action160::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (1, ___symbol, 99) + } + pub(crate) fn ___reduce206< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = => ActionFn(161); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action161::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (0, ___symbol, 99) + } + pub(crate) fn ___reduce207< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(654); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action654::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce208< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(655); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action655::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce209< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(656); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action656::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce210< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(657); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action657::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce211< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(658); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action658::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce212< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(659); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action659::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce213< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(660); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action660::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce214< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(661); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action661::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce215< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(662); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action662::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce216< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(663); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action663::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce217< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(664); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action664::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce218< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce219< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";" => ActionFn(666); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce220< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(667); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce221< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(668); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce222< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(669); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce223< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(670); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce224< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(671); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce225< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(672); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce226< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(673); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce227< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(674); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce228< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(675); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce229< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(676); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce230< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(677); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce231< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(678); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce232< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(679); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce233< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(680); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce234< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(681); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce235< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";" => ActionFn(682); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action682::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (2, ___symbol, 100) + } + pub(crate) fn ___reduce236< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";" => ActionFn(683); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce237< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(684); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce238< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(685); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce239< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(686); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce240< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(687); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce241< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(688); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce242< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(689); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce243< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(690); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce244< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(691); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce245< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(692); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce246< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(693); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action693::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce247< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(694); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce248< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(695); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce249< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(696); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce250< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce251< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(698); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce252< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(699); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce253< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(700); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce254< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(701); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce255< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(702); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce256< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(703); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce257< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(704); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce258< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce259< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(706); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce260< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(707); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce261< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(708); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce262< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(709); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce263< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(710); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce264< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(711); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce265< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(712); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce266< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce267< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";", GrammarItem+ => ActionFn(714); + let ___sym2 = ___pop_Variant64(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce268< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(715); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce269< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(716); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce270< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(717); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce271< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(718); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce272< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(719); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce273< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(720); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce274< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(721); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce275< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(722); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce276< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(723); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce277< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(724); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce278< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(725); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce279< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(726); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce280< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(727); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce281< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(728); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce282< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce283< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(730); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce284< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(731); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce285< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(732); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce286< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(733); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce287< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(734); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce288< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(735); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce289< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(736); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce290< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(737); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce291< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(738); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce292< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(739); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce293< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(740); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce294< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(741); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce295< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(742); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce296< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(743); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce297< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(744); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce298< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(745); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce299< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";" => ActionFn(746); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce300< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(747); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce301< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(748); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce302< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(749); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce303< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(750); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce304< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(751); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce305< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(752); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce306< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(753); + let ___sym8 = ___pop_Variant64(___symbols); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym8.2.clone(); + let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (9, ___symbol, 100) + } + pub(crate) fn ___reduce307< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(754); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce308< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(755); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce309< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(756); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce310< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(757); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce311< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(758); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce312< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(759); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce313< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(760); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce314< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce315< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(762); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce316< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(763); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce317< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(764); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce318< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(765); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce319< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(766); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce320< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(767); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce321< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(768); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce322< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce323< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(770); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce324< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(771); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce325< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(772); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce326< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(773); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce327< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(774); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce328< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(775); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce329< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(776); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce330< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce331< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(778); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce332< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(779); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce333< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(780); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce334< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(781); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce335< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Use => ActionFn(22); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action22::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce336< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = MatchToken => ActionFn(23); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action23::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce337< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = ExternToken => ActionFn(24); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action24::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce338< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Nonterminal => ActionFn(25); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action25::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce339< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = => ActionFn(165); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action165::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 102) + } + pub(crate) fn ___reduce340< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = GrammarItem+ => ActionFn(166); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action166::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 102) + } + pub(crate) fn ___reduce341< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem => ActionFn(187); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action187::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 103) + } + pub(crate) fn ___reduce342< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(188); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action188::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 103) + } + pub(crate) fn ___reduce343< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter = Id, ":", TypeRef => ActionFn(21); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (3, ___symbol, 104) + } + pub(crate) fn ___reduce344< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = GrammarParameter => ActionFn(220); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action220::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (1, ___symbol, 105) + } + pub(crate) fn ___reduce345< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = => ActionFn(221); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action221::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (0, ___symbol, 105) + } + pub(crate) fn ___reduce346< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters = "(", Comma, ")" => ActionFn(20); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (3, ___symbol, 106) + } + pub(crate) fn ___reduce347< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = GrammarParameters => ActionFn(169); + let ___sym0 = ___pop_Variant47(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action169::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (1, ___symbol, 107) + } + pub(crate) fn ___reduce348< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = => ActionFn(170); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action170::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (0, ___symbol, 107) + } + pub(crate) fn ___reduce349< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters = "<", Comma, ">" => ActionFn(6); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action6::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (3, ___symbol, 108) + } + pub(crate) fn ___reduce350< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = GrammarTypeParameters => ActionFn(171); + let ___sym0 = ___pop_Variant54(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action171::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (1, ___symbol, 109) + } + pub(crate) fn ___reduce351< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = => ActionFn(172); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action172::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (0, ___symbol, 109) + } + pub(crate) fn ___reduce352< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = Lifetime, ":", Plus => ActionFn(10); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action10::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce353< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(462); + let ___sym3 = ___pop_Variant81(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (4, ___symbol, 110) + } + pub(crate) fn ___reduce354< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(463); + let ___sym2 = ___pop_Variant81(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce355< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = GrammarWhereClause => ActionFn(194); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action194::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (1, ___symbol, 111) + } + pub(crate) fn ___reduce356< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = => ActionFn(195); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action195::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (0, ___symbol, 111) + } + pub(crate) fn ___reduce357< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses = "where", Comma => ActionFn(9); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action9::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 112) + } + pub(crate) fn ___reduce358< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = GrammarWhereClauses => ActionFn(167); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action167::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (1, ___symbol, 113) + } + pub(crate) fn ___reduce359< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = => ActionFn(168); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action168::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (0, ___symbol, 113) + } + pub(crate) fn ___reduce360< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "Id" => ActionFn(101); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action101::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce361< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "MacroId" => ActionFn(102); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action102::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce362< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime = "Lifetime" => ActionFn(104); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action104::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 115) + } + pub(crate) fn ___reduce363< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = Lifetime => ActionFn(131); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action131::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (1, ___symbol, 116) + } + pub(crate) fn ___reduce364< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = => ActionFn(132); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action132::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (0, ___symbol, 116) + } + pub(crate) fn ___reduce365< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MacroId = "MacroId" => ActionFn(99); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action99::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 117) + } + pub(crate) fn ___reduce366< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchContents = Comma => ActionFn(79); + let ___sym0 = ___pop_Variant50(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action79::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); + (1, ___symbol, 118) + } + pub(crate) fn ___reduce367< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = "_" => ActionFn(423); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action423::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce368< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = MatchSymbol => ActionFn(424); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action424::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce370< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = MatchItem => ActionFn(249); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action249::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (1, ___symbol, 120) + } + pub(crate) fn ___reduce371< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = => ActionFn(250); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action250::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (0, ___symbol, 120) + } + pub(crate) fn ___reduce372< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchMapping = Terminal => ActionFn(84); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action84::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 121) + } + pub(crate) fn ___reduce373< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchSymbol = QuotedLiteral => ActionFn(83); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action83::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 122) + } + pub(crate) fn ___reduce374< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchToken = MatchTokenInt => ActionFn(76); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action76::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 123) + } + pub(crate) fn ___reduce375< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(77); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant71(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action77::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (5, ___symbol, 124) + } + pub(crate) fn ___reduce376< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(426); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant71(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action426::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (4, ___symbol, 124) + } + pub(crate) fn ___reduce377< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(444); + let ___sym5 = ___pop_Variant41(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 125) + } + pub(crate) fn ___reduce378< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(445); + let ___sym6 = ___pop_Variant41(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant3(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action445::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (7, ___symbol, 125) + } + pub(crate) fn ___reduce379< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(446); + let ___sym3 = ___pop_Variant41(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action446::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 125) + } + pub(crate) fn ___reduce380< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(447); + let ___sym4 = ___pop_Variant41(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action447::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 125) + } + pub(crate) fn ___reduce381< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = MacroId, "<", Comma, ">" => ActionFn(32); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant51(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (4, ___symbol, 126) + } + pub(crate) fn ___reduce382< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = NotMacroId => ActionFn(33); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action33::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce383< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = "Escape" => ActionFn(34); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action34::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce384< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId = "Id" => ActionFn(100); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action100::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 127) + } + pub(crate) fn ___reduce385< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = NotMacroId => ActionFn(225); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action225::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (1, ___symbol, 128) + } + pub(crate) fn ___reduce386< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = => ActionFn(226); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action226::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (0, ___symbol, 128) + } + pub(crate) fn ___reduce387< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", Id => ActionFn(339); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action339::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce388< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", ( "::")+, Id => ActionFn(340); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant21(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action340::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (3, ___symbol, 129) + } + pub(crate) fn ___reduce389< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = Id => ActionFn(341); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action341::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (1, ___symbol, 129) + } + pub(crate) fn ___reduce390< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = ( "::")+, Id => ActionFn(342); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action342::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce391< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern = PatternKind => ActionFn(429); + let ___sym0 = ___pop_Variant80(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action429::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 130) + } + pub(crate) fn ___reduce392< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = Pattern => ActionFn(259); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action259::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (1, ___symbol, 131) + } + pub(crate) fn ___reduce393< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = => ActionFn(260); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action260::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (0, ___symbol, 131) + } + pub(crate) fn ___reduce394< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "(", Comma, ")" => ActionFn(89); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant52(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action89::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce395< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", FieldPattern, "}" => ActionFn(458); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant14(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce396< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "}" => ActionFn(459); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce397< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(460); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant14(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce398< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "}" => ActionFn(461); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce399< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "..", "}" => ActionFn(327); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action327::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce400< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(328); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce401< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "_" => ActionFn(92); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action92::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce402< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = ".." => ActionFn(93); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action93::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce403< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "<", TypeRef, ">" => ActionFn(94); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action94::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce404< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "(", Comma, ")" => ActionFn(95); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant52(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action95::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce405< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "CharLiteral" => ActionFn(96); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action96::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce406< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path => ActionFn(97); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action97::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce407< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = Lifetime => ActionFn(544); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action544::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce408< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(545); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action545::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 133) + } + pub(crate) fn ___reduce409< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, Lifetime => ActionFn(546); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action546::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 133) + } + pub(crate) fn ___reduce410< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(547); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action547::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce411< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = TypeBound => ActionFn(634); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action634::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce412< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(635); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action635::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (0, ___symbol, 134) + } + pub(crate) fn ___reduce413< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, TypeBound => ActionFn(636); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action636::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (2, ___symbol, 134) + } + pub(crate) fn ___reduce414< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(637); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action637::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce415< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = StringLiteral => ActionFn(108); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action108::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce416< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = RegexLiteral => ActionFn(109); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action109::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce417< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedTerminal = QuotedLiteral => ActionFn(107); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action107::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 136) + } + pub(crate) fn ___reduce418< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RegexLiteral = "RegexLiteral" => ActionFn(111); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action111::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 137) + } + pub(crate) fn ___reduce419< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "+" => ActionFn(54); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action54::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce420< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "*" => ActionFn(55); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action55::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce421< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "?" => ActionFn(56); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action56::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce422< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute = "#![...]" => ActionFn(112); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action112::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); + (1, ___symbol, 139) + } + pub(crate) fn ___reduce423< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = => ActionFn(179); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action179::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (0, ___symbol, 140) + } + pub(crate) fn ___reduce424< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = ShebangAttribute+ => ActionFn(180); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action180::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 140) + } + pub(crate) fn ___reduce425< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute => ActionFn(181); + let ___sym0 = ___pop_Variant83(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action181::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 141) + } + pub(crate) fn ___reduce426< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(182); + let ___sym1 = ___pop_Variant83(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action182::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (2, ___symbol, 141) + } + pub(crate) fn ___reduce427< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // StringLiteral = "StringLiteral" => ActionFn(110); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action110::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 142) + } + pub(crate) fn ___reduce428< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(430); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant28(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (5, ___symbol, 143) + } + pub(crate) fn ___reduce429< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Symbol0, ">" => ActionFn(431); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action431::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (3, ___symbol, 143) + } + pub(crate) fn ___reduce430< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = Symbol0 => ActionFn(51); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action51::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 143) + } + pub(crate) fn ___reduce431< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = => ActionFn(134); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action134::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 144) + } + pub(crate) fn ___reduce432< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = Symbol+ => ActionFn(135); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action135::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 144) + } + pub(crate) fn ___reduce433< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol => ActionFn(141); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action141::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 145) + } + pub(crate) fn ___reduce434< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol+, Symbol => ActionFn(142); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action142::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 145) + } + pub(crate) fn ___reduce435< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol1 => ActionFn(52); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action52::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 146) + } + pub(crate) fn ___reduce436< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol0, RepeatOp => ActionFn(432); + let ___sym1 = ___pop_Variant82(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action432::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 146) + } + pub(crate) fn ___reduce437< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol1 = SymbolKind1 => ActionFn(433); + let ___sym0 = ___pop_Variant86(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action433::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 147) + } + pub(crate) fn ___reduce438< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = Symbol => ActionFn(235); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action235::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (1, ___symbol, 148) + } + pub(crate) fn ___reduce439< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = => ActionFn(236); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action236::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (0, ___symbol, 148) + } + pub(crate) fn ___reduce440< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(58); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant53(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action58::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (4, ___symbol, 149) + } + pub(crate) fn ___reduce441< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = QuotedTerminal => ActionFn(59); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action59::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce442< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "Id" => ActionFn(60); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action60::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce443< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = Escape => ActionFn(61); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action61::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce444< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(62); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant59(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action62::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (3, ___symbol, 149) + } + pub(crate) fn ___reduce445< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@L" => ActionFn(63); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action63::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce446< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@R" => ActionFn(64); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action64::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce447< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "!" => ActionFn(65); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action65::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce448< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = QuotedTerminal => ActionFn(105); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action105::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce449< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = "Id" => ActionFn(106); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action106::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce450< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Lifetime => ActionFn(14); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action14::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce451< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(464); + let ___sym6 = ___pop_Variant3(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (7, ___symbol, 151) + } + pub(crate) fn ___reduce452< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(465); + let ___sym5 = ___pop_Variant3(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action465::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (6, ___symbol, 151) + } + pub(crate) fn ___reduce453< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(466); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action466::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce454< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")" => ActionFn(467); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action467::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce455< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(468); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant5(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action468::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce456< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "<", Comma, ">" => ActionFn(469); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant5(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce457< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path => ActionFn(470); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action470::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 151) + } + pub(crate) fn ___reduce458< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path => ActionFn(471); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action471::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce459< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = TypeBound => ActionFn(205); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action205::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (1, ___symbol, 152) + } + pub(crate) fn ___reduce460< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = => ActionFn(206); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action206::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (0, ___symbol, 152) + } + pub(crate) fn ___reduce461< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Lifetime => ActionFn(17); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action17::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce462< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = TypeRef => ActionFn(18); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action18::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce463< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Id, "=", TypeRef => ActionFn(19); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action19::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (3, ___symbol, 153) + } + pub(crate) fn ___reduce464< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = TypeBoundParameter => ActionFn(215); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action215::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (1, ___symbol, 154) + } + pub(crate) fn ___reduce465< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = => ActionFn(216); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action216::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (0, ___symbol, 154) + } + pub(crate) fn ___reduce466< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBounds = Plus => ActionFn(13); + let ___sym0 = ___pop_Variant81(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action13::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 155) + } + pub(crate) fn ___reduce467< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Lifetime => ActionFn(7); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action7::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce468< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Id => ActionFn(8); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action8::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce469< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = TypeParameter => ActionFn(189); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action189::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (1, ___symbol, 157) + } + pub(crate) fn ___reduce470< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = => ActionFn(190); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action190::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (0, ___symbol, 157) + } + pub(crate) fn ___reduce471< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "(", Comma, ")" => ActionFn(66); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant55(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action66::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce472< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "#", Symbol, "#" => ActionFn(67); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action67::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce473< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(548); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action548::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce474< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", "mut", TypeRef => ActionFn(549); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action549::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce475< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, TypeRef => ActionFn(550); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action550::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce476< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", TypeRef => ActionFn(551); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action551::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 158) + } + pub(crate) fn ___reduce477< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path, "<", Comma, ">" => ActionFn(69); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce478< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path => ActionFn(70); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action70::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 158) + } + pub(crate) fn ___reduce479< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = TypeRef => ActionFn(210); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action210::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 159) + } + pub(crate) fn ___reduce480< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = => ActionFn(211); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action211::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 159) + } + pub(crate) fn ___reduce481< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = TypeRef => ActionFn(71); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action71::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce482< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = Lifetime => ActionFn(72); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action72::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce483< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(240); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action240::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 161) + } + pub(crate) fn ___reduce484< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = => ActionFn(241); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action241::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 161) + } + pub(crate) fn ___reduce485< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use = "use", ";" => ActionFn(26); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action26::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (2, ___symbol, 162) + } + pub(crate) fn ___reduce486< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = => ActionFn(177); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action177::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 163) + } + pub(crate) fn ___reduce487< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = Use+ => ActionFn(178); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action178::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 163) + } + pub(crate) fn ___reduce488< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use => ActionFn(183); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action183::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 164) + } + pub(crate) fn ___reduce489< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use+, Use => ActionFn(184); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action184::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 164) + } + pub(crate) fn ___reduce490< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub", "(", Path, ")" => ActionFn(27); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant78(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action27::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (4, ___symbol, 165) + } + pub(crate) fn ___reduce491< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub" => ActionFn(28); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action28::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (1, ___symbol, 165) + } + pub(crate) fn ___reduce492< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = => ActionFn(314); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action314::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (0, ___symbol, 165) + } + pub(crate) fn ___reduce493< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Grammar = Grammar => ActionFn(0); + let ___sym0 = ___pop_Variant63(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action0::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (1, ___symbol, 166) + } + pub(crate) fn ___reduce494< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___GrammarWhereClauses = GrammarWhereClauses => ActionFn(1); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action1::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 167) + } + pub(crate) fn ___reduce495< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___MatchMapping = MatchMapping => ActionFn(3); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action3::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 168) + } + pub(crate) fn ___reduce497< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___TypeRef = TypeRef => ActionFn(2); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action2::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 170) + } +} +pub use self::___parse___Pattern::PatternParser; + +#[cfg_attr(rustfmt, rustfmt_skip)] +mod ___parse___TypeRef { + #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports, unused_parens)] + + use string_cache::DefaultAtom as Atom; + use grammar::parse_tree::*; + use grammar::pattern::*; + use std::iter::once; + use tok::{self, Tok}; + use util::strip; + #[allow(unused_extern_crates)] + extern crate lalrpop_util as ___lalrpop_util; + use super::___ToTriple; + #[allow(dead_code)] + pub enum ___Symbol<'input> + { + Variant0(Tok<'input>), + Variant1(&'input str), + Variant2(::std::option::Option>), + Variant3(TypeRef), + Variant4(::std::option::Option), + Variant5(Vec>), + Variant6(::std::option::Option>>), + Variant7(Condition), + Variant8(::std::option::Option), + Variant9(()), + Variant10(Alternative), + Variant11(::std::vec::Vec), + Variant12(Conversion), + Variant13(::std::vec::Vec), + Variant14(FieldPattern), + Variant15(::std::vec::Vec>), + Variant16(Parameter), + Variant17(::std::vec::Vec), + Variant18(WhereClause), + Variant19(::std::vec::Vec>), + Variant20(Atom), + Variant21(::std::vec::Vec), + Variant22(MatchItem), + Variant23(::std::vec::Vec), + Variant24(NonterminalString), + Variant25(::std::vec::Vec), + Variant26(Pattern), + Variant27(::std::vec::Vec>), + Variant28(Symbol), + Variant29(::std::vec::Vec), + Variant30(TypeBound), + Variant31(::std::vec::Vec>), + Variant32(TypeBoundParameter), + Variant33(::std::vec::Vec>), + Variant34(TypeParameter), + Variant35(::std::vec::Vec), + Variant36(::std::vec::Vec), + Variant37(usize), + Variant38(ActionKind), + Variant39(::std::option::Option), + Variant40(::std::option::Option), + Variant41(Vec), + Variant42(Annotation), + Variant43(::std::vec::Vec), + Variant44(AssociatedType), + Variant45(::std::vec::Vec), + Variant46(Vec), + Variant47(Vec), + Variant48(Vec>), + Variant49(Vec), + Variant50(Vec), + Variant51(Vec), + Variant52(Vec>), + Variant53(Vec), + Variant54(Vec), + Variant55(Vec), + Variant56(ConditionOp), + Variant57(::std::option::Option), + Variant58(EnumToken), + Variant59(ExprSymbol), + Variant60(GrammarItem), + Variant61(::std::option::Option>), + Variant62(::std::option::Option>), + Variant63(Grammar), + Variant64(::std::vec::Vec), + Variant65(::std::option::Option), + Variant66(::std::option::Option>), + Variant67(::std::option::Option>), + Variant68(::std::option::Option>), + Variant69(::std::option::Option>>), + Variant70(::std::option::Option), + Variant71(MatchContents), + Variant72(::std::option::Option), + Variant73(TerminalString), + Variant74(TerminalLiteral), + Variant75(MatchToken), + Variant76((NonterminalString, Vec)), + Variant77(::std::option::Option), + Variant78(Path), + Variant79(::std::option::Option>), + Variant80(PatternKind), + Variant81(Vec>), + Variant82(RepeatOp), + Variant83(String), + Variant84(::std::vec::Vec), + Variant85(::std::option::Option), + Variant86(SymbolKind), + Variant87(::std::option::Option>), + Variant88(::std::option::Option>), + Variant89(::std::option::Option), + Variant90(Visibility), + } + const ___ACTION: &'static [i16] = &[ + // State 0 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, -389, 0, 0, -389, 0, 0, 0, 13, 0, -389, 0, 0, 0, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, -478, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 37, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 6, 0, 7, 8, -176, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, -360, 0, 0, -360, 0, 0, 0, -360, 0, -360, 0, 0, 0, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -361, 0, 0, 0, -361, 0, -361, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, -390, 0, 0, -390, 0, 0, 0, 44, 0, -390, 0, 0, 0, 0, 0, 0, -390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 10, 37, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + -443, 0, 0, -443, 0, 0, -443, -443, -443, -443, -443, 0, 0, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, -443, -443, -443, -443, 0, -443, -443, 0, -443, -443, -443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + -417, 0, 0, -417, 0, 0, -417, -417, -417, -417, -417, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, -417, -417, -417, -417, 0, -417, -417, 0, -417, -417, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + -441, 0, 0, -441, 0, 0, -441, -441, -441, -441, -441, 0, 0, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, -441, -441, -441, -441, 0, -441, -441, 0, -441, -441, -441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + -416, 0, 0, -416, 0, 0, -416, -416, -416, -416, -416, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, -416, -416, -416, -416, 0, -416, -416, 0, -416, -416, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + -415, 0, 0, -415, 0, 0, -415, -415, -415, -415, -415, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, -415, -415, -415, -415, 0, -415, -415, 0, -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + -430, 0, 0, -430, 0, 0, -430, -430, 53, 54, -430, 0, 0, 0, 0, 0, -430, 0, 0, 0, 0, 0, 0, -430, 55, -430, -430, 0, -430, -430, 0, -430, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + -435, 0, 0, -435, 0, 0, -435, -435, -435, -435, -435, 0, 0, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, -435, -435, -435, -435, 0, -435, -435, 0, -435, -435, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + -437, 0, 0, -437, 0, 0, -437, -437, -437, -437, -437, 0, 0, 0, 0, 0, -437, 0, 0, 0, 0, 0, 0, -437, -437, -437, -437, 0, -437, -437, 0, -437, -437, -437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + -447, 0, 0, -447, 0, 0, -447, -447, -447, -447, -447, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, -447, -447, -447, -447, 0, -447, -447, 0, -447, -447, -447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 25, 0, 0, 0, 0, 0, 26, -193, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 30, 61, 0, 62, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 27 + -445, 0, 0, -445, 0, 0, -445, -445, -445, -445, -445, 0, 0, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, -445, -445, -445, -445, 0, -445, -445, 0, -445, -445, -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + -446, 0, 0, -446, 0, 0, -446, -446, -446, -446, -446, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, -446, -446, -446, -446, 0, -446, -446, 0, -446, -446, -446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + -192, 0, 0, -192, 0, 0, -192, -192, -192, -192, -192, 0, 0, 0, 0, 0, -192, 0, 0, 0, 0, 0, 0, -192, -192, -192, -192, 0, -192, -192, 0, -192, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + -442, 0, 0, -442, 0, 0, -442, -442, -442, -442, -442, 0, 0, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, -442, -442, -442, -442, 0, -442, -442, 0, -442, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + -418, 0, 0, -418, 0, 0, -418, -418, -418, -418, -418, 0, 0, 0, 0, 0, -418, 0, 0, 0, 0, 0, 0, -418, -418, -418, -418, 0, -418, -418, 0, -418, -418, -418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + -427, 0, 0, -427, 0, 0, -427, -427, -427, -427, -427, 0, 0, 0, 0, 0, -427, 0, 0, 0, 0, 0, 0, -427, -427, -427, -427, 0, -427, -427, 0, -427, -427, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, -362, 0, -362, -362, 0, 0, 0, -362, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 6, 0, 7, 8, -178, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, -175, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, -387, 0, 0, -387, 0, 0, 0, 13, 0, -387, 0, 0, 0, 0, 0, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 10, 37, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, -164, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + -436, 0, 0, -436, 0, 0, -436, -436, -436, -436, -436, 0, 0, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, -436, -436, -436, -436, 0, -436, -436, 0, -436, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + -420, 0, 0, -420, 0, 0, -420, -420, -420, -420, -420, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, -420, -420, -420, -420, 0, -420, -420, 0, -420, -420, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + -419, 0, 0, -419, 0, 0, -419, -419, -419, -419, -419, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, -419, -419, -419, -419, 0, -419, -419, 0, -419, -419, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + -421, 0, 0, -421, 0, 0, -421, -421, -421, -421, -421, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, -421, -421, -421, -421, 0, -421, -421, 0, -421, -421, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + -433, 0, 0, 0, 0, 0, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, -433, -433, 0, -433, -433, 0, -433, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 25, 0, 0, 0, 0, 0, 26, -194, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, -96, 0, -96, -96, -96, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, -388, 0, 0, -388, 0, 0, 0, 44, 0, -388, 0, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, -101, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, -166, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + -444, 0, 0, -444, 0, 0, -444, -444, -444, -444, -444, 0, 0, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, -444, -444, -444, -444, 0, -444, -444, 0, -444, -444, -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + -434, 0, 0, 0, 0, 0, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, -434, -434, 0, -434, -434, 0, -434, -434, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 30, 31, 0, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + -429, 0, 0, -429, 0, 0, -429, -429, 0, 0, -429, 0, 0, 0, 0, 0, -429, 0, 0, 0, 0, 0, 0, -429, 0, -429, -429, 0, -429, -429, 0, -429, -429, -429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, -97, 0, -97, -97, -97, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, -102, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + -440, 0, 0, -440, 0, 0, -440, -440, -440, -440, -440, 0, 0, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, -440, -440, -440, -440, 0, -440, -440, 0, -440, -440, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + -76, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, -76, 0, -76, -76, 0, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + -77, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, -77, 0, -77, -77, 0, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + -428, 0, 0, -428, 0, 0, -428, -428, 0, 0, -428, 0, 0, 0, 0, 0, -428, 0, 0, 0, 0, 0, 0, -428, 0, -428, -428, 0, -428, -428, 0, -428, -428, -428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + const ___EOF_ACTION: &'static [i16] = &[ + // State 0 + 0, + // State 1 + 0, + // State 2 + -389, + // State 3 + -478, + // State 4 + -497, + // State 5 + 0, + // State 6 + 0, + // State 7 + 0, + // State 8 + 0, + // State 9 + -360, + // State 10 + -361, + // State 11 + -390, + // State 12 + 0, + // State 13 + 0, + // State 14 + 0, + // State 15 + 0, + // State 16 + 0, + // State 17 + 0, + // State 18 + 0, + // State 19 + 0, + // State 20 + 0, + // State 21 + 0, + // State 22 + 0, + // State 23 + 0, + // State 24 + 0, + // State 25 + 0, + // State 26 + 0, + // State 27 + 0, + // State 28 + 0, + // State 29 + 0, + // State 30 + 0, + // State 31 + 0, + // State 32 + 0, + // State 33 + 0, + // State 34 + 0, + // State 35 + -476, + // State 36 + 0, + // State 37 + 0, + // State 38 + 0, + // State 39 + 0, + // State 40 + 0, + // State 41 + 0, + // State 42 + -387, + // State 43 + 0, + // State 44 + 0, + // State 45 + 0, + // State 46 + 0, + // State 47 + 0, + // State 48 + 0, + // State 49 + 0, + // State 50 + -472, + // State 51 + 0, + // State 52 + 0, + // State 53 + 0, + // State 54 + 0, + // State 55 + 0, + // State 56 + 0, + // State 57 + 0, + // State 58 + 0, + // State 59 + 0, + // State 60 + 0, + // State 61 + 0, + // State 62 + -475, + // State 63 + 0, + // State 64 + -474, + // State 65 + 0, + // State 66 + -471, + // State 67 + 0, + // State 68 + -388, + // State 69 + 0, + // State 70 + -477, + // State 71 + 0, + // State 72 + 0, + // State 73 + 0, + // State 74 + 0, + // State 75 + 0, + // State 76 + 0, + // State 77 + 0, + // State 78 + 0, + // State 79 + -473, + // State 80 + 0, + // State 81 + 0, + // State 82 + 0, + // State 83 + 0, + // State 84 + 0, + // State 85 + 0, + // State 86 + 0, + // State 87 + 0, + ]; + const ___GOTO: &'static [i16] = &[ + // State 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 3 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 4 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 5 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 21, 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 6 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 14 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 16 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 17 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 18 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 23 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 57, 0, 58, 22, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 0, 0, 0, 60, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 27 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 28 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 29 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 30 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 32 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 33 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 34 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 37 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 38 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 39 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 40 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 41 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 42 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 43 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 44 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 46 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 47 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 48 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 75, 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 50 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 51 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 52 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 53 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 54 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 55 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 56 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 57 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 77, 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 58 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 63 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 64 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 65 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 66 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 67 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 68 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 69 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 70 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 71 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 72 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 83, 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 73 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 74 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 75 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 76 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 77 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 20, 0, 0, 0, 86, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 81 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 82 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 83 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 85 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 86 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 87 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + fn ___expected_tokens(___state: usize) -> Vec<::std::string::String> { + const ___TERMINAL: &'static [&'static str] = &[ + r###""!""###, + r###""!=""###, + r###""!~""###, + r###""#""###, + r###""#![...]""###, + r###""&""###, + r###""(""###, + r###"")""###, + r###""*""###, + r###""+""###, + r###"",""###, + r###""->""###, + r###""..""###, + r###"":""###, + r###""::""###, + r###"";""###, + r###""<""###, + r###""=""###, + r###""==""###, + r###""=>""###, + r###""=>?""###, + r###""=>@L""###, + r###""=>@R""###, + r###"">""###, + r###""?""###, + r###""@L""###, + r###""@R""###, + r###""CharLiteral""###, + r###""Escape""###, + r###""Id""###, + r###""Lifetime""###, + r###""MacroId""###, + r###""RegexLiteral""###, + r###""StringLiteral""###, + r###""[""###, + r###""]""###, + r###""_""###, + r###""else""###, + r###""enum""###, + r###""extern""###, + r###""for""###, + r###""grammar""###, + r###""if""###, + r###""match""###, + r###""mut""###, + r###""pub""###, + r###""type""###, + r###""use""###, + r###""where""###, + r###""{""###, + r###""}""###, + r###""~~""###, + ]; + ___ACTION[(___state * 52)..].iter().zip(___TERMINAL).filter_map(|(&state, terminal)| { + if state == 0 { + None + } else { + Some(terminal.to_string()) + } + }).collect() + } + pub struct TypeRefParser { + _priv: (), + } + + impl TypeRefParser { + pub fn new() -> TypeRefParser { + TypeRefParser { + _priv: (), + } + } + + #[allow(dead_code)] + pub fn parse< + 'input, + ___TOKEN: ___ToTriple<'input, Error=tok::Error>, + ___TOKENS: IntoIterator, + >( + &self, + text: &'input str, + ___tokens0: ___TOKENS, + ) -> Result, tok::Error>> + { + let ___tokens = ___tokens0.into_iter(); + let mut ___tokens = ___tokens.map(|t| ___ToTriple::to_triple(t)); + let mut ___states = vec![0_i16]; + let mut ___symbols = vec![]; + let mut ___integer; + let mut ___lookahead; + let ___last_location = &mut Default::default(); + '___shift: loop { + ___lookahead = match ___tokens.next() { + Some(Ok(v)) => v, + None => break '___shift, + Some(Err(e)) => return Err(___lalrpop_util::ParseError::User { error: e }), + }; + *___last_location = ___lookahead.2.clone(); + ___integer = match ___lookahead.1 { + Tok::Bang if true => 0, + Tok::BangEquals if true => 1, + Tok::BangTilde if true => 2, + Tok::Hash if true => 3, + Tok::ShebangAttribute(_) if true => 4, + Tok::Ampersand if true => 5, + Tok::LeftParen if true => 6, + Tok::RightParen if true => 7, + Tok::Star if true => 8, + Tok::Plus if true => 9, + Tok::Comma if true => 10, + Tok::MinusGreaterThan if true => 11, + Tok::DotDot if true => 12, + Tok::Colon if true => 13, + Tok::ColonColon if true => 14, + Tok::Semi if true => 15, + Tok::LessThan if true => 16, + Tok::Equals if true => 17, + Tok::EqualsEquals if true => 18, + Tok::EqualsGreaterThanCode(_) if true => 19, + Tok::EqualsGreaterThanQuestionCode(_) if true => 20, + Tok::EqualsGreaterThanLookahead if true => 21, + Tok::EqualsGreaterThanLookbehind if true => 22, + Tok::GreaterThan if true => 23, + Tok::Question if true => 24, + Tok::Lookahead if true => 25, + Tok::Lookbehind if true => 26, + Tok::CharLiteral(_) if true => 27, + Tok::Escape(_) if true => 28, + Tok::Id(_) if true => 29, + Tok::Lifetime(_) if true => 30, + Tok::MacroId(_) if true => 31, + Tok::RegexLiteral(_) if true => 32, + Tok::StringLiteral(_) if true => 33, + Tok::LeftBracket if true => 34, + Tok::RightBracket if true => 35, + Tok::Underscore if true => 36, + Tok::Else if true => 37, + Tok::Enum if true => 38, + Tok::Extern if true => 39, + Tok::For if true => 40, + Tok::Grammar if true => 41, + Tok::If if true => 42, + Tok::Match if true => 43, + Tok::Mut if true => 44, + Tok::Pub if true => 45, + Tok::Type if true => 46, + Tok::Use(_) if true => 47, + Tok::Where if true => 48, + Tok::LeftBrace if true => 49, + Tok::RightBrace if true => 50, + Tok::TildeTilde if true => 51, + _ => { + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: Some(___lookahead), + expected: ___expected_tokens(___state), + }; + return Err(___error); + } + }; + '___inner: loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___ACTION[___state * 52 + ___integer]; + if ___action > 0 { + let ___symbol = match ___integer { + 0 => match ___lookahead.1 { + ___tok @ Tok::Bang => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 1 => match ___lookahead.1 { + ___tok @ Tok::BangEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 2 => match ___lookahead.1 { + ___tok @ Tok::BangTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 3 => match ___lookahead.1 { + ___tok @ Tok::Hash => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 4 => match ___lookahead.1 { + Tok::ShebangAttribute(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 5 => match ___lookahead.1 { + ___tok @ Tok::Ampersand => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 6 => match ___lookahead.1 { + ___tok @ Tok::LeftParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 7 => match ___lookahead.1 { + ___tok @ Tok::RightParen => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 8 => match ___lookahead.1 { + ___tok @ Tok::Star => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 9 => match ___lookahead.1 { + ___tok @ Tok::Plus => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 10 => match ___lookahead.1 { + ___tok @ Tok::Comma => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 11 => match ___lookahead.1 { + ___tok @ Tok::MinusGreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 12 => match ___lookahead.1 { + ___tok @ Tok::DotDot => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 13 => match ___lookahead.1 { + ___tok @ Tok::Colon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 14 => match ___lookahead.1 { + ___tok @ Tok::ColonColon => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 15 => match ___lookahead.1 { + ___tok @ Tok::Semi => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 16 => match ___lookahead.1 { + ___tok @ Tok::LessThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 17 => match ___lookahead.1 { + ___tok @ Tok::Equals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 18 => match ___lookahead.1 { + ___tok @ Tok::EqualsEquals => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 19 => match ___lookahead.1 { + Tok::EqualsGreaterThanCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 20 => match ___lookahead.1 { + Tok::EqualsGreaterThanQuestionCode(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 21 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 22 => match ___lookahead.1 { + ___tok @ Tok::EqualsGreaterThanLookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 23 => match ___lookahead.1 { + ___tok @ Tok::GreaterThan => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 24 => match ___lookahead.1 { + ___tok @ Tok::Question => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 25 => match ___lookahead.1 { + ___tok @ Tok::Lookahead => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 26 => match ___lookahead.1 { + ___tok @ Tok::Lookbehind => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 27 => match ___lookahead.1 { + Tok::CharLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 28 => match ___lookahead.1 { + Tok::Escape(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 29 => match ___lookahead.1 { + Tok::Id(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 30 => match ___lookahead.1 { + Tok::Lifetime(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 31 => match ___lookahead.1 { + Tok::MacroId(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 32 => match ___lookahead.1 { + Tok::RegexLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 33 => match ___lookahead.1 { + Tok::StringLiteral(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 34 => match ___lookahead.1 { + ___tok @ Tok::LeftBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 35 => match ___lookahead.1 { + ___tok @ Tok::RightBracket => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 36 => match ___lookahead.1 { + ___tok @ Tok::Underscore => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 37 => match ___lookahead.1 { + ___tok @ Tok::Else => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 38 => match ___lookahead.1 { + ___tok @ Tok::Enum => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 39 => match ___lookahead.1 { + ___tok @ Tok::Extern => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 40 => match ___lookahead.1 { + ___tok @ Tok::For => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 41 => match ___lookahead.1 { + ___tok @ Tok::Grammar => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 42 => match ___lookahead.1 { + ___tok @ Tok::If => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 43 => match ___lookahead.1 { + ___tok @ Tok::Match => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 44 => match ___lookahead.1 { + ___tok @ Tok::Mut => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 45 => match ___lookahead.1 { + ___tok @ Tok::Pub => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 46 => match ___lookahead.1 { + ___tok @ Tok::Type => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 47 => match ___lookahead.1 { + Tok::Use(___tok0) => ___Symbol::Variant1((___tok0)), + _ => unreachable!(), + }, + 48 => match ___lookahead.1 { + ___tok @ Tok::Where => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 49 => match ___lookahead.1 { + ___tok @ Tok::LeftBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 50 => match ___lookahead.1 { + ___tok @ Tok::RightBrace => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + 51 => match ___lookahead.1 { + ___tok @ Tok::TildeTilde => ___Symbol::Variant0((___tok)), + _ => unreachable!(), + }, + _ => unreachable!(), + }; + ___states.push(___action - 1); + ___symbols.push((___lookahead.0, ___symbol, ___lookahead.2)); + continue '___shift; + } else if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, Some(&___lookahead.0), &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + if r.is_err() { + return r; + } + return Err(___lalrpop_util::ParseError::ExtraToken { token: ___lookahead }); + } + } else { + let mut ___err_lookahead = Some(___lookahead); + let mut ___err_integer: Option = Some(___integer); + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + loop { + let ___state = *___states.last().unwrap() as usize; + let ___action = ___EOF_ACTION[___state]; + if ___action < 0 { + if let Some(r) = ___reduce(text, ___action, None, &mut ___states, &mut ___symbols, ::std::marker::PhantomData::<()>) { + return r; + } + } else { + let mut ___err_lookahead = None; + let mut ___err_integer: Option = None; + let ___state = *___states.last().unwrap() as usize; + let ___error = ___lalrpop_util::ParseError::UnrecognizedToken { + token: ___err_lookahead, + expected: ___expected_tokens(___state), + }; + return Err(___error) + } + } + } + } + pub(crate) fn ___reduce< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> Option, tok::Error>>> + { + let (___pop_states, ___symbol, ___nonterminal) = match -___action { + 1 => { + ___reduce1(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 2 => { + ___reduce2(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 3 => { + ___reduce3(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 4 => { + ___reduce4(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 5 => { + ___reduce5(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 6 => { + ___reduce6(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 7 => { + ___reduce7(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 8 => { + ___reduce8(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 9 => { + ___reduce9(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 10 => { + ___reduce10(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 11 => { + ___reduce11(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 12 => { + ___reduce12(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 13 => { + ___reduce13(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 14 => { + ___reduce14(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 15 => { + ___reduce15(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 16 => { + ___reduce16(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 17 => { + ___reduce17(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 18 => { + ___reduce18(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 19 => { + ___reduce19(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 20 => { + ___reduce20(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 21 => { + ___reduce21(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 22 => { + ___reduce22(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 23 => { + ___reduce23(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 24 => { + ___reduce24(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 25 => { + ___reduce25(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 26 => { + ___reduce26(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 27 => { + ___reduce27(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 28 => { + ___reduce28(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 29 => { + ___reduce29(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 30 => { + ___reduce30(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 31 => { + ___reduce31(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 32 => { + ___reduce32(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 33 => { + ___reduce33(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 34 => { + ___reduce34(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 35 => { + ___reduce35(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 36 => { + ___reduce36(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 37 => { + ___reduce37(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 38 => { + ___reduce38(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 39 => { + ___reduce39(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 40 => { + ___reduce40(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 41 => { + ___reduce41(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 42 => { + ___reduce42(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 43 => { + ___reduce43(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 44 => { + ___reduce44(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 45 => { + ___reduce45(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 46 => { + ___reduce46(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 47 => { + ___reduce47(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 48 => { + ___reduce48(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 49 => { + ___reduce49(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 50 => { + ___reduce50(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 51 => { + ___reduce51(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 52 => { + ___reduce52(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 53 => { + ___reduce53(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 54 => { + ___reduce54(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 55 => { + ___reduce55(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 56 => { + ___reduce56(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 57 => { + ___reduce57(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 58 => { + ___reduce58(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 59 => { + ___reduce59(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 60 => { + ___reduce60(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 61 => { + ___reduce61(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 62 => { + ___reduce62(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 63 => { + ___reduce63(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 64 => { + ___reduce64(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 65 => { + ___reduce65(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 66 => { + ___reduce66(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 67 => { + ___reduce67(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 68 => { + ___reduce68(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 69 => { + ___reduce69(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 70 => { + ___reduce70(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 71 => { + ___reduce71(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 72 => { + ___reduce72(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 73 => { + ___reduce73(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 74 => { + ___reduce74(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 75 => { + ___reduce75(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 76 => { + ___reduce76(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 77 => { + ___reduce77(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 78 => { + ___reduce78(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 79 => { + ___reduce79(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 80 => { + ___reduce80(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 81 => { + ___reduce81(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 82 => { + ___reduce82(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 83 => { + ___reduce83(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 84 => { + ___reduce84(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 85 => { + ___reduce85(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 86 => { + ___reduce86(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 87 => { + ___reduce87(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 88 => { + ___reduce88(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 89 => { + ___reduce89(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 90 => { + ___reduce90(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 91 => { + ___reduce91(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 92 => { + ___reduce92(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 93 => { + ___reduce93(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 94 => { + ___reduce94(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 95 => { + ___reduce95(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 96 => { + ___reduce96(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 97 => { + ___reduce97(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 98 => { + ___reduce98(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 99 => { + ___reduce99(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 100 => { + ___reduce100(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 101 => { + ___reduce101(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 102 => { + ___reduce102(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 103 => { + ___reduce103(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 104 => { + ___reduce104(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 105 => { + ___reduce105(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 106 => { + ___reduce106(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 107 => { + ___reduce107(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 108 => { + ___reduce108(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 109 => { + ___reduce109(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 110 => { + ___reduce110(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 111 => { + ___reduce111(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 112 => { + ___reduce112(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 113 => { + ___reduce113(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 114 => { + ___reduce114(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 115 => { + ___reduce115(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 116 => { + ___reduce116(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 117 => { + ___reduce117(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 118 => { + ___reduce118(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 119 => { + ___reduce119(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 120 => { + ___reduce120(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 121 => { + ___reduce121(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 122 => { + ___reduce122(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 123 => { + ___reduce123(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 124 => { + ___reduce124(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 125 => { + ___reduce125(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 126 => { + ___reduce126(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 127 => { + ___reduce127(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 128 => { + ___reduce128(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 129 => { + ___reduce129(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 130 => { + ___reduce130(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 131 => { + ___reduce131(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 132 => { + ___reduce132(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 133 => { + ___reduce133(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 134 => { + ___reduce134(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 135 => { + ___reduce135(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 136 => { + ___reduce136(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 137 => { + ___reduce137(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 138 => { + ___reduce138(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 139 => { + ___reduce139(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 140 => { + ___reduce140(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 141 => { + ___reduce141(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 142 => { + ___reduce142(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 143 => { + ___reduce143(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 144 => { + ___reduce144(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 145 => { + ___reduce145(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 146 => { + ___reduce146(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 147 => { + ___reduce147(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 148 => { + ___reduce148(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 149 => { + ___reduce149(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 150 => { + ___reduce150(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 151 => { + ___reduce151(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 152 => { + ___reduce152(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 153 => { + ___reduce153(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 154 => { + ___reduce154(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 155 => { + ___reduce155(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 156 => { + ___reduce156(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 157 => { + ___reduce157(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 158 => { + ___reduce158(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 159 => { + ___reduce159(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 160 => { + ___reduce160(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 161 => { + ___reduce161(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 162 => { + ___reduce162(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 163 => { + ___reduce163(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 164 => { + ___reduce164(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 165 => { + ___reduce165(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 166 => { + ___reduce166(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 167 => { + ___reduce167(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 168 => { + ___reduce168(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 169 => { + ___reduce169(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 170 => { + ___reduce170(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 171 => { + ___reduce171(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 172 => { + ___reduce172(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 173 => { + ___reduce173(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 174 => { + ___reduce174(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 175 => { + ___reduce175(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 176 => { + ___reduce176(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 177 => { + ___reduce177(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 178 => { + ___reduce178(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 179 => { + ___reduce179(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 180 => { + ___reduce180(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 181 => { + ___reduce181(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 182 => { + ___reduce182(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 183 => { + ___reduce183(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 184 => { + ___reduce184(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 185 => { + ___reduce185(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 186 => { + ___reduce186(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 187 => { + ___reduce187(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 188 => { + // Conversion = Terminal, "=>" => ActionFn(417); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action417::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 90) + } + 189 => { + ___reduce189(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 190 => { + ___reduce190(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 191 => { + ___reduce191(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 192 => { + ___reduce192(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 193 => { + ___reduce193(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 194 => { + ___reduce194(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 195 => { + ___reduce195(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 196 => { + ___reduce196(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 197 => { + ___reduce197(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 198 => { + ___reduce198(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 199 => { + ___reduce199(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 200 => { + ___reduce200(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 201 => { + ___reduce201(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 202 => { + ___reduce202(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 203 => { + ___reduce203(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 204 => { + ___reduce204(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 205 => { + ___reduce205(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 206 => { + ___reduce206(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 207 => { + ___reduce207(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 208 => { + ___reduce208(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 209 => { + ___reduce209(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 210 => { + ___reduce210(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 211 => { + ___reduce211(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 212 => { + ___reduce212(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 213 => { + ___reduce213(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 214 => { + ___reduce214(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 215 => { + ___reduce215(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 216 => { + ___reduce216(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 217 => { + ___reduce217(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 218 => { + ___reduce218(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 219 => { + ___reduce219(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 220 => { + ___reduce220(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 221 => { + ___reduce221(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 222 => { + ___reduce222(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 223 => { + ___reduce223(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 224 => { + ___reduce224(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 225 => { + ___reduce225(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 226 => { + ___reduce226(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 227 => { + ___reduce227(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 228 => { + ___reduce228(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 229 => { + ___reduce229(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 230 => { + ___reduce230(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 231 => { + ___reduce231(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 232 => { + ___reduce232(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 233 => { + ___reduce233(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 234 => { + ___reduce234(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 235 => { + ___reduce235(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 236 => { + ___reduce236(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 237 => { + ___reduce237(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 238 => { + ___reduce238(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 239 => { + ___reduce239(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 240 => { + ___reduce240(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 241 => { + ___reduce241(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 242 => { + ___reduce242(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 243 => { + ___reduce243(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 244 => { + ___reduce244(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 245 => { + ___reduce245(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 246 => { + ___reduce246(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 247 => { + ___reduce247(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 248 => { + ___reduce248(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 249 => { + ___reduce249(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 250 => { + ___reduce250(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 251 => { + ___reduce251(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 252 => { + ___reduce252(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 253 => { + ___reduce253(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 254 => { + ___reduce254(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 255 => { + ___reduce255(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 256 => { + ___reduce256(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 257 => { + ___reduce257(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 258 => { + ___reduce258(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 259 => { + ___reduce259(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 260 => { + ___reduce260(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 261 => { + ___reduce261(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 262 => { + ___reduce262(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 263 => { + ___reduce263(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 264 => { + ___reduce264(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 265 => { + ___reduce265(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 266 => { + ___reduce266(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 267 => { + ___reduce267(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 268 => { + ___reduce268(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 269 => { + ___reduce269(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 270 => { + ___reduce270(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 271 => { + ___reduce271(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 272 => { + ___reduce272(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 273 => { + ___reduce273(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 274 => { + ___reduce274(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 275 => { + ___reduce275(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 276 => { + ___reduce276(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 277 => { + ___reduce277(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 278 => { + ___reduce278(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 279 => { + ___reduce279(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 280 => { + ___reduce280(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 281 => { + ___reduce281(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 282 => { + ___reduce282(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 283 => { + ___reduce283(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 284 => { + ___reduce284(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 285 => { + ___reduce285(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 286 => { + ___reduce286(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 287 => { + ___reduce287(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 288 => { + ___reduce288(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 289 => { + ___reduce289(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 290 => { + ___reduce290(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 291 => { + ___reduce291(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 292 => { + ___reduce292(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 293 => { + ___reduce293(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 294 => { + ___reduce294(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 295 => { + ___reduce295(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 296 => { + ___reduce296(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 297 => { + ___reduce297(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 298 => { + ___reduce298(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 299 => { + ___reduce299(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 300 => { + ___reduce300(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 301 => { + ___reduce301(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 302 => { + ___reduce302(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 303 => { + ___reduce303(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 304 => { + ___reduce304(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 305 => { + ___reduce305(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 306 => { + ___reduce306(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 307 => { + ___reduce307(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 308 => { + ___reduce308(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 309 => { + ___reduce309(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 310 => { + ___reduce310(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 311 => { + ___reduce311(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 312 => { + ___reduce312(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 313 => { + ___reduce313(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 314 => { + ___reduce314(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 315 => { + ___reduce315(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 316 => { + ___reduce316(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 317 => { + ___reduce317(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 318 => { + ___reduce318(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 319 => { + ___reduce319(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 320 => { + ___reduce320(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 321 => { + ___reduce321(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 322 => { + ___reduce322(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 323 => { + ___reduce323(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 324 => { + ___reduce324(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 325 => { + ___reduce325(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 326 => { + ___reduce326(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 327 => { + ___reduce327(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 328 => { + ___reduce328(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 329 => { + ___reduce329(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 330 => { + ___reduce330(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 331 => { + ___reduce331(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 332 => { + ___reduce332(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 333 => { + ___reduce333(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 334 => { + ___reduce334(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 335 => { + ___reduce335(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 336 => { + ___reduce336(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 337 => { + ___reduce337(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 338 => { + ___reduce338(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 339 => { + ___reduce339(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 340 => { + ___reduce340(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 341 => { + ___reduce341(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 342 => { + ___reduce342(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 343 => { + ___reduce343(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 344 => { + ___reduce344(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 345 => { + ___reduce345(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 346 => { + ___reduce346(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 347 => { + ___reduce347(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 348 => { + ___reduce348(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 349 => { + ___reduce349(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 350 => { + ___reduce350(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 351 => { + ___reduce351(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 352 => { + ___reduce352(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 353 => { + ___reduce353(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 354 => { + ___reduce354(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 355 => { + ___reduce355(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 356 => { + ___reduce356(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 357 => { + ___reduce357(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 358 => { + ___reduce358(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 359 => { + ___reduce359(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 360 => { + ___reduce360(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 361 => { + ___reduce361(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 362 => { + ___reduce362(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 363 => { + ___reduce363(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 364 => { + ___reduce364(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 365 => { + ___reduce365(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 366 => { + ___reduce366(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 367 => { + ___reduce367(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 368 => { + ___reduce368(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 369 => { + // MatchItem = MatchSymbol, "=>" => ActionFn(425); + let ___sym1 = ___pop_Variant1(___symbols); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = match super::___action425::<>(text, ___sym0, ___sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 119) + } + 370 => { + ___reduce370(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 371 => { + ___reduce371(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 372 => { + ___reduce372(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 373 => { + ___reduce373(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 374 => { + ___reduce374(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 375 => { + ___reduce375(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 376 => { + ___reduce376(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 377 => { + ___reduce377(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 378 => { + ___reduce378(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 379 => { + ___reduce379(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 380 => { + ___reduce380(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 381 => { + ___reduce381(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 382 => { + ___reduce382(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 383 => { + ___reduce383(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 384 => { + ___reduce384(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 385 => { + ___reduce385(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 386 => { + ___reduce386(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 387 => { + ___reduce387(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 388 => { + ___reduce388(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 389 => { + ___reduce389(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 390 => { + ___reduce390(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 391 => { + ___reduce391(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 392 => { + ___reduce392(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 393 => { + ___reduce393(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 394 => { + ___reduce394(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 395 => { + ___reduce395(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 396 => { + ___reduce396(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 397 => { + ___reduce397(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 398 => { + ___reduce398(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 399 => { + ___reduce399(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 400 => { + ___reduce400(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 401 => { + ___reduce401(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 402 => { + ___reduce402(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 403 => { + ___reduce403(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 404 => { + ___reduce404(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 405 => { + ___reduce405(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 406 => { + ___reduce406(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 407 => { + ___reduce407(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 408 => { + ___reduce408(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 409 => { + ___reduce409(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 410 => { + ___reduce410(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 411 => { + ___reduce411(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 412 => { + ___reduce412(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 413 => { + ___reduce413(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 414 => { + ___reduce414(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 415 => { + ___reduce415(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 416 => { + ___reduce416(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 417 => { + ___reduce417(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 418 => { + ___reduce418(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 419 => { + ___reduce419(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 420 => { + ___reduce420(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 421 => { + ___reduce421(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 422 => { + ___reduce422(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 423 => { + ___reduce423(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 424 => { + ___reduce424(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 425 => { + ___reduce425(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 426 => { + ___reduce426(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 427 => { + ___reduce427(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 428 => { + ___reduce428(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 429 => { + ___reduce429(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 430 => { + ___reduce430(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 431 => { + ___reduce431(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 432 => { + ___reduce432(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 433 => { + ___reduce433(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 434 => { + ___reduce434(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 435 => { + ___reduce435(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 436 => { + ___reduce436(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 437 => { + ___reduce437(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 438 => { + ___reduce438(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 439 => { + ___reduce439(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 440 => { + ___reduce440(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 441 => { + ___reduce441(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 442 => { + ___reduce442(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 443 => { + ___reduce443(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 444 => { + ___reduce444(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 445 => { + ___reduce445(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 446 => { + ___reduce446(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 447 => { + ___reduce447(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 448 => { + ___reduce448(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 449 => { + ___reduce449(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 450 => { + ___reduce450(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 451 => { + ___reduce451(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 452 => { + ___reduce452(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 453 => { + ___reduce453(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 454 => { + ___reduce454(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 455 => { + ___reduce455(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 456 => { + ___reduce456(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 457 => { + ___reduce457(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 458 => { + ___reduce458(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 459 => { + ___reduce459(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 460 => { + ___reduce460(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 461 => { + ___reduce461(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 462 => { + ___reduce462(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 463 => { + ___reduce463(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 464 => { + ___reduce464(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 465 => { + ___reduce465(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 466 => { + ___reduce466(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 467 => { + ___reduce467(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 468 => { + ___reduce468(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 469 => { + ___reduce469(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 470 => { + ___reduce470(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 471 => { + ___reduce471(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 472 => { + ___reduce472(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 473 => { + ___reduce473(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 474 => { + ___reduce474(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 475 => { + ___reduce475(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 476 => { + ___reduce476(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 477 => { + ___reduce477(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 478 => { + ___reduce478(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 479 => { + ___reduce479(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 480 => { + ___reduce480(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 481 => { + ___reduce481(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 482 => { + ___reduce482(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 483 => { + ___reduce483(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 484 => { + ___reduce484(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 485 => { + ___reduce485(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 486 => { + ___reduce486(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 487 => { + ___reduce487(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 488 => { + ___reduce488(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 489 => { + ___reduce489(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 490 => { + ___reduce490(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 491 => { + ___reduce491(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 492 => { + ___reduce492(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 493 => { + ___reduce493(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 494 => { + ___reduce494(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 495 => { + ___reduce495(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 496 => { + ___reduce496(text, ___action, ___lookahead_start, ___states, ___symbols, ::std::marker::PhantomData::<()>) + } + 497 => { + // ___TypeRef = TypeRef => ActionFn(2); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action2::<>(text, ___sym0); + return Some(Ok(___nt)); + } + _ => panic!("invalid action code {}", ___action) + }; + let ___states_len = ___states.len(); + ___states.truncate(___states_len - ___pop_states); + ___symbols.push(___symbol); + let ___state = *___states.last().unwrap() as usize; + let ___next_state = ___GOTO[___state * 171 + ___nonterminal] - 1; + ___states.push(___next_state); + None + } + fn ___pop_Variant9< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant9(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant76< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, (NonterminalString, Vec), usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant76(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant38< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ActionKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant38(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant10< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Alternative, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant10(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant42< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Annotation, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant42(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant44< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, AssociatedType, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant44(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant20< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Atom, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant20(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant7< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Condition, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant7(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant56< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ConditionOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant56(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant12< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Conversion, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant12(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant58< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, EnumToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant58(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant59< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ExprSymbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant59(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant14< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, FieldPattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant14(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant63< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Grammar, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant63(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant60< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, GrammarItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant60(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant71< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchContents, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant71(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant22< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchItem, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant22(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant75< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, MatchToken, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant75(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant24< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, NonterminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant24(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant16< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Parameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant16(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant78< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Path, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant78(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant26< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Pattern, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant26(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant80< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, PatternKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant80(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant82< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, RepeatOp, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant82(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant83< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, String, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant83(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant28< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Symbol, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant28(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant86< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, SymbolKind, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant86(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant74< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalLiteral, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant74(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant73< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TerminalString, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant73(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant0< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Tok<'input>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant0(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant30< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBound, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant30(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant32< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeBoundParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant32(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant34< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeParameter, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant34(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant3< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, TypeRef, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant3(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant41< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant41(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant49< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant49(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant46< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant46(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant50< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant50(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant51< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant51(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant47< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant47(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant52< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant52(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant53< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant53(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant81< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant81(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant5< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant5(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant54< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant54(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant55< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant55(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant48< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant48(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant90< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, Visibility, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant90(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant18< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, WhereClause, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant18(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant37< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, usize, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant37(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant39< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant39(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant40< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant40(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant70< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant70(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant8< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant8(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant57< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant57(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant61< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant61(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant72< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant72(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant77< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant77(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant65< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant65(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant79< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant79(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant85< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant85(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant2< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant2(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant87< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant87(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant88< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant88(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant89< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant89(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant4< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant4(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant62< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant62(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant66< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant66(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant6< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant6(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant67< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant67(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant69< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant69(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant68< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::option::Option>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant68(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant11< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant11(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant43< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant43(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant45< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant45(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant21< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant21(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant13< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant13(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant15< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant15(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant64< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant64(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant23< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant23(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant25< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant25(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant17< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant17(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant27< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant27(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant84< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant84(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant29< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant29(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant31< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant31(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant33< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant33(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant35< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant35(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant36< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant36(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant19< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, ::std::vec::Vec>, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant19(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + fn ___pop_Variant1< + 'input, + >( + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) + { + match ___symbols.pop().unwrap() { + (___l, ___Symbol::Variant1(___v), ___r) => (___l, ___v, ___r), + _ => panic!("symbol type mismatch") + } + } + pub(crate) fn ___reduce1< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = "::" => ActionFn(126); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action126::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 0) + } + pub(crate) fn ___reduce2< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "::"? = => ActionFn(127); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action127::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 0) + } + pub(crate) fn ___reduce3< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = "mut" => ActionFn(129); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action129::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (1, ___symbol, 1) + } + pub(crate) fn ___reduce4< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // "mut"? = => ActionFn(130); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action130::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant2(___nt), ___end); + (0, ___symbol, 1) + } + pub(crate) fn ___reduce5< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" ) = "->", TypeRef => ActionFn(156); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action156::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 2) + } + pub(crate) fn ___reduce6< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = "->", TypeRef => ActionFn(300); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action300::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 3) + } + pub(crate) fn ___reduce7< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("->" )? = => ActionFn(155); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action155::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 3) + } + pub(crate) fn ___reduce8< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" ) = ":", TypeRef => ActionFn(147); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action147::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 4) + } + pub(crate) fn ___reduce9< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = ":", TypeRef => ActionFn(303); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action303::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (2, ___symbol, 5) + } + pub(crate) fn ___reduce10< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // (":" )? = => ActionFn(146); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action146::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 5) + } + pub(crate) fn ___reduce11< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">") = "<", Comma, ">" => ActionFn(152); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action152::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (3, ___symbol, 6) + } + pub(crate) fn ___reduce12< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = "<", Comma, ">" => ActionFn(306); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant5(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action306::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (3, ___symbol, 7) + } + pub(crate) fn ___reduce13< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("<" > ">")? = => ActionFn(151); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action151::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant6(___nt), ___end); + (0, ___symbol, 7) + } + pub(crate) fn ___reduce14< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" ) = "if", Cond => ActionFn(140); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action140::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (2, ___symbol, 8) + } + pub(crate) fn ___reduce15< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = "if", Cond => ActionFn(309); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action309::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (2, ___symbol, 9) + } + pub(crate) fn ___reduce16< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ("if" )? = => ActionFn(139); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action139::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant8(___nt), ___end); + (0, ___symbol, 9) + } + pub(crate) fn ___reduce17< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // () = => ActionFn(148); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action148::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant9(___nt), ___end); + (0, ___symbol, 10) + } + pub(crate) fn ___reduce18< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Alternative, "," => ActionFn(234); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action234::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 11) + } + pub(crate) fn ___reduce19< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(232); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action232::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (0, ___symbol, 12) + } + pub(crate) fn ___reduce20< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(233); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action233::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (1, ___symbol, 12) + } + pub(crate) fn ___reduce21< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Alternative, "," => ActionFn(315); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action315::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (2, ___symbol, 13) + } + pub(crate) fn ___reduce22< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Alternative, "," => ActionFn(316); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action316::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant11(___nt), ___end); + (3, ___symbol, 13) + } + pub(crate) fn ___reduce23< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Conversion, "," => ActionFn(258); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action258::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant12(___nt), ___end); + (2, ___symbol, 14) + } + pub(crate) fn ___reduce24< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(256); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action256::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (0, ___symbol, 15) + } + pub(crate) fn ___reduce25< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(257); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action257::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (1, ___symbol, 15) + } + pub(crate) fn ___reduce26< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Conversion, "," => ActionFn(319); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action319::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (2, ___symbol, 16) + } + pub(crate) fn ___reduce27< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Conversion, "," => ActionFn(320); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action320::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant13(___nt), ___end); + (3, ___symbol, 16) + } + pub(crate) fn ___reduce28< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = FieldPattern, "," => ActionFn(117); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action117::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (2, ___symbol, 17) + } + pub(crate) fn ___reduce29< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(115); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action115::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (0, ___symbol, 18) + } + pub(crate) fn ___reduce30< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(116); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action116::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (1, ___symbol, 18) + } + pub(crate) fn ___reduce31< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = FieldPattern, "," => ActionFn(323); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action323::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (2, ___symbol, 19) + } + pub(crate) fn ___reduce32< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, FieldPattern, "," => ActionFn(324); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant14(___symbols); + let ___sym0 = ___pop_Variant15(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action324::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant15(___nt), ___end); + (3, ___symbol, 19) + } + pub(crate) fn ___reduce33< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarParameter, "," => ActionFn(224); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action224::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (2, ___symbol, 20) + } + pub(crate) fn ___reduce34< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(222); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action222::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (0, ___symbol, 21) + } + pub(crate) fn ___reduce35< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(223); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action223::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (1, ___symbol, 21) + } + pub(crate) fn ___reduce36< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarParameter, "," => ActionFn(329); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action329::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (2, ___symbol, 22) + } + pub(crate) fn ___reduce37< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarParameter, "," => ActionFn(330); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action330::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant17(___nt), ___end); + (3, ___symbol, 22) + } + pub(crate) fn ___reduce38< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = GrammarWhereClause, "," => ActionFn(198); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action198::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (2, ___symbol, 23) + } + pub(crate) fn ___reduce39< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(196); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action196::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (0, ___symbol, 24) + } + pub(crate) fn ___reduce40< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(197); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action197::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (1, ___symbol, 24) + } + pub(crate) fn ___reduce41< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = GrammarWhereClause, "," => ActionFn(333); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action333::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (2, ___symbol, 25) + } + pub(crate) fn ___reduce42< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, GrammarWhereClause, "," => ActionFn(334); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action334::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant19(___nt), ___end); + (3, ___symbol, 25) + } + pub(crate) fn ___reduce43< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::") = Id, "::" => ActionFn(125); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action125::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 26) + } + pub(crate) fn ___reduce44< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = => ActionFn(123); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action123::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 27) + } + pub(crate) fn ___reduce45< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")* = ( "::")+ => ActionFn(124); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action124::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 27) + } + pub(crate) fn ___reduce46< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = Id, "::" => ActionFn(337); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action337::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 28) + } + pub(crate) fn ___reduce47< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "::")+ = ( "::")+, Id, "::" => ActionFn(338); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action338::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 28) + } + pub(crate) fn ___reduce48< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = Lifetime, "+" => ActionFn(201); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action201::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 29) + } + pub(crate) fn ___reduce49< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(199); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action199::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 30) + } + pub(crate) fn ___reduce50< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(200); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action200::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 30) + } + pub(crate) fn ___reduce51< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = Lifetime, "+" => ActionFn(343); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action343::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 31) + } + pub(crate) fn ___reduce52< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, Lifetime, "+" => ActionFn(344); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action344::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 31) + } + pub(crate) fn ___reduce53< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Lifetime, "," => ActionFn(204); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action204::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (2, ___symbol, 32) + } + pub(crate) fn ___reduce54< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(202); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action202::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (0, ___symbol, 33) + } + pub(crate) fn ___reduce55< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(203); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action203::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (1, ___symbol, 33) + } + pub(crate) fn ___reduce56< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Lifetime, "," => ActionFn(347); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action347::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (2, ___symbol, 34) + } + pub(crate) fn ___reduce57< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Lifetime, "," => ActionFn(348); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action348::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant21(___nt), ___end); + (3, ___symbol, 34) + } + pub(crate) fn ___reduce58< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = MatchItem, "," => ActionFn(253); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action253::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (2, ___symbol, 35) + } + pub(crate) fn ___reduce59< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(251); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action251::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (0, ___symbol, 36) + } + pub(crate) fn ___reduce60< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(252); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action252::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (1, ___symbol, 36) + } + pub(crate) fn ___reduce61< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = MatchItem, "," => ActionFn(351); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action351::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (2, ___symbol, 37) + } + pub(crate) fn ___reduce62< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, MatchItem, "," => ActionFn(352); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action352::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant23(___nt), ___end); + (3, ___symbol, 37) + } + pub(crate) fn ___reduce63< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = NotMacroId, "," => ActionFn(229); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action229::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (2, ___symbol, 38) + } + pub(crate) fn ___reduce64< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(227); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action227::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (0, ___symbol, 39) + } + pub(crate) fn ___reduce65< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(228); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action228::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (1, ___symbol, 39) + } + pub(crate) fn ___reduce66< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = NotMacroId, "," => ActionFn(355); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action355::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (2, ___symbol, 40) + } + pub(crate) fn ___reduce67< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, NotMacroId, "," => ActionFn(356); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action356::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant25(___nt), ___end); + (3, ___symbol, 40) + } + pub(crate) fn ___reduce68< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Pattern, "," => ActionFn(263); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action263::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (2, ___symbol, 41) + } + pub(crate) fn ___reduce69< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(261); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action261::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (0, ___symbol, 42) + } + pub(crate) fn ___reduce70< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(262); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action262::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (1, ___symbol, 42) + } + pub(crate) fn ___reduce71< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Pattern, "," => ActionFn(359); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action359::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (2, ___symbol, 43) + } + pub(crate) fn ___reduce72< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(360); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action360::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant27(___nt), ___end); + (3, ___symbol, 43) + } + pub(crate) fn ___reduce73< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = Symbol, "," => ActionFn(239); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action239::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 44) + } + pub(crate) fn ___reduce74< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(237); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action237::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 45) + } + pub(crate) fn ___reduce75< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(238); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action238::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 45) + } + pub(crate) fn ___reduce76< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = Symbol, "," => ActionFn(363); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action363::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 46) + } + pub(crate) fn ___reduce77< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, Symbol, "," => ActionFn(364); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action364::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (3, ___symbol, 46) + } + pub(crate) fn ___reduce78< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+") = TypeBound, "+" => ActionFn(209); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action209::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 47) + } + pub(crate) fn ___reduce79< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = => ActionFn(207); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action207::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (0, ___symbol, 48) + } + pub(crate) fn ___reduce80< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")* = ( "+")+ => ActionFn(208); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action208::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (1, ___symbol, 48) + } + pub(crate) fn ___reduce81< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = TypeBound, "+" => ActionFn(367); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action367::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (2, ___symbol, 49) + } + pub(crate) fn ___reduce82< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( "+")+ = ( "+")+, TypeBound, "+" => ActionFn(368); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action368::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant31(___nt), ___end); + (3, ___symbol, 49) + } + pub(crate) fn ___reduce83< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeBoundParameter, "," => ActionFn(219); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action219::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (2, ___symbol, 50) + } + pub(crate) fn ___reduce84< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(217); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action217::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (0, ___symbol, 51) + } + pub(crate) fn ___reduce85< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(218); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action218::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (1, ___symbol, 51) + } + pub(crate) fn ___reduce86< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeBoundParameter, "," => ActionFn(371); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action371::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (2, ___symbol, 52) + } + pub(crate) fn ___reduce87< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeBoundParameter, "," => ActionFn(372); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action372::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant33(___nt), ___end); + (3, ___symbol, 52) + } + pub(crate) fn ___reduce88< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeParameter, "," => ActionFn(193); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action193::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (2, ___symbol, 53) + } + pub(crate) fn ___reduce89< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(191); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action191::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (0, ___symbol, 54) + } + pub(crate) fn ___reduce90< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(192); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action192::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (1, ___symbol, 54) + } + pub(crate) fn ___reduce91< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeParameter, "," => ActionFn(375); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action375::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (2, ___symbol, 55) + } + pub(crate) fn ___reduce92< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeParameter, "," => ActionFn(376); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action376::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant35(___nt), ___end); + (3, ___symbol, 55) + } + pub(crate) fn ___reduce93< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRef, "," => ActionFn(214); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action214::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 56) + } + pub(crate) fn ___reduce94< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(212); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action212::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 57) + } + pub(crate) fn ___reduce95< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(213); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action213::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 57) + } + pub(crate) fn ___reduce96< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRef, "," => ActionFn(379); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action379::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 58) + } + pub(crate) fn ___reduce97< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRef, "," => ActionFn(380); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action380::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 58) + } + pub(crate) fn ___reduce98< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",") = TypeRefOrLifetime, "," => ActionFn(244); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action244::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 59) + } + pub(crate) fn ___reduce99< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = => ActionFn(242); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action242::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (0, ___symbol, 60) + } + pub(crate) fn ___reduce100< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")* = ( ",")+ => ActionFn(243); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action243::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (1, ___symbol, 60) + } + pub(crate) fn ___reduce101< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = TypeRefOrLifetime, "," => ActionFn(383); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action383::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (2, ___symbol, 61) + } + pub(crate) fn ___reduce102< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ( ",")+ = ( ",")+, TypeRefOrLifetime, "," => ActionFn(384); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action384::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant36(___nt), ___end); + (3, ___symbol, 61) + } + pub(crate) fn ___reduce103< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @L = => ActionFn(174); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action174::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 62) + } + pub(crate) fn ___reduce104< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // @R = => ActionFn(173); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action173::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant37(___nt), ___end); + (0, ___symbol, 63) + } + pub(crate) fn ___reduce105< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@L" => ActionFn(39); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action39::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce106< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>@R" => ActionFn(40); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action40::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce107< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>" => ActionFn(41); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action41::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce108< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action = "=>?" => ActionFn(42); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action42::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant38(___nt), ___end); + (1, ___symbol, 64) + } + pub(crate) fn ___reduce109< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = Action => ActionFn(136); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action136::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (1, ___symbol, 65) + } + pub(crate) fn ___reduce110< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Action? = => ActionFn(137); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action137::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant39(___nt), ___end); + (0, ___symbol, 65) + } + pub(crate) fn ___reduce111< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond, Action => ActionFn(434); + let ___sym3 = ___pop_Variant38(___symbols); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action434::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (4, ___symbol, 66) + } + pub(crate) fn ___reduce112< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, "if", Cond => ActionFn(435); + let ___sym2 = ___pop_Variant7(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action435::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce113< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+, Action => ActionFn(436); + let ___sym1 = ___pop_Variant38(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action436::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (2, ___symbol, 66) + } + pub(crate) fn ___reduce114< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Symbol+ => ActionFn(437); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action437::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce115< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = "if", Cond, Action => ActionFn(412); + let ___sym2 = ___pop_Variant38(___symbols); + let ___sym1 = ___pop_Variant7(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action412::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (3, ___symbol, 66) + } + pub(crate) fn ___reduce116< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative = Action => ActionFn(413); + let ___sym0 = ___pop_Variant38(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action413::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant10(___nt), ___end); + (1, ___symbol, 66) + } + pub(crate) fn ___reduce117< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = Alternative => ActionFn(230); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action230::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (1, ___symbol, 67) + } + pub(crate) fn ___reduce118< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternative? = => ActionFn(231); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action231::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant40(___nt), ___end); + (0, ___symbol, 67) + } + pub(crate) fn ___reduce119< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = Alternative, ";" => ActionFn(35); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action35::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 68) + } + pub(crate) fn ___reduce120< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Alternatives = "{", Comma, "}", ";" => ActionFn(36); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant41(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action36::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (4, ___symbol, 68) + } + pub(crate) fn ___reduce121< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation = "#", "[", Id, "]" => ActionFn(414); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action414::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant42(___nt), ___end); + (4, ___symbol, 69) + } + pub(crate) fn ___reduce122< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = => ActionFn(175); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action175::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (0, ___symbol, 70) + } + pub(crate) fn ___reduce123< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation* = Annotation+ => ActionFn(176); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action176::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 70) + } + pub(crate) fn ___reduce124< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation => ActionFn(185); + let ___sym0 = ___pop_Variant42(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action185::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (1, ___symbol, 71) + } + pub(crate) fn ___reduce125< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Annotation+ = Annotation+, Annotation => ActionFn(186); + let ___sym1 = ___pop_Variant42(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action186::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant43(___nt), ___end); + (2, ___symbol, 71) + } + pub(crate) fn ___reduce126< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType = "type", Id, "=", TypeRef, ";" => ActionFn(415); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action415::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant44(___nt), ___end); + (5, ___symbol, 72) + } + pub(crate) fn ___reduce127< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = => ActionFn(121); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action121::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (0, ___symbol, 73) + } + pub(crate) fn ___reduce128< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType* = AssociatedType+ => ActionFn(122); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action122::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 73) + } + pub(crate) fn ___reduce129< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType => ActionFn(247); + let ___sym0 = ___pop_Variant44(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action247::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (1, ___symbol, 74) + } + pub(crate) fn ___reduce130< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // AssociatedType+ = AssociatedType+, AssociatedType => ActionFn(248); + let ___sym1 = ___pop_Variant44(___symbols); + let ___sym0 = ___pop_Variant45(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action248::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant45(___nt), ___end); + (2, ___symbol, 74) + } + pub(crate) fn ___reduce131< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Alternative => ActionFn(438); + let ___sym0 = ___pop_Variant10(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action438::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce132< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(439); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action439::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (0, ___symbol, 75) + } + pub(crate) fn ___reduce133< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Alternative => ActionFn(440); + let ___sym1 = ___pop_Variant10(___symbols); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action440::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (2, ___symbol, 75) + } + pub(crate) fn ___reduce134< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(441); + let ___sym0 = ___pop_Variant11(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action441::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant41(___nt), ___end); + (1, ___symbol, 75) + } + pub(crate) fn ___reduce135< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Conversion => ActionFn(454); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action454::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce136< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(455); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action455::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (0, ___symbol, 76) + } + pub(crate) fn ___reduce137< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Conversion => ActionFn(456); + let ___sym1 = ___pop_Variant12(___symbols); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action456::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (2, ___symbol, 76) + } + pub(crate) fn ___reduce138< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(457); + let ___sym0 = ___pop_Variant13(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action457::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant46(___nt), ___end); + (1, ___symbol, 76) + } + pub(crate) fn ___reduce139< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarParameter => ActionFn(476); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action476::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce140< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(477); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action477::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (0, ___symbol, 77) + } + pub(crate) fn ___reduce141< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarParameter => ActionFn(478); + let ___sym1 = ___pop_Variant16(___symbols); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action478::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (2, ___symbol, 77) + } + pub(crate) fn ___reduce142< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(479); + let ___sym0 = ___pop_Variant17(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action479::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (1, ___symbol, 77) + } + pub(crate) fn ___reduce143< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = GrammarWhereClause => ActionFn(504); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action504::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce144< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(505); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action505::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (0, ___symbol, 78) + } + pub(crate) fn ___reduce145< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, GrammarWhereClause => ActionFn(506); + let ___sym1 = ___pop_Variant18(___symbols); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action506::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 78) + } + pub(crate) fn ___reduce146< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(507); + let ___sym0 = ___pop_Variant19(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action507::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 78) + } + pub(crate) fn ___reduce147< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Lifetime => ActionFn(540); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action540::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce148< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(541); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action541::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 79) + } + pub(crate) fn ___reduce149< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Lifetime => ActionFn(542); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action542::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 79) + } + pub(crate) fn ___reduce150< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(543); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action543::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 79) + } + pub(crate) fn ___reduce151< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = MatchItem => ActionFn(552); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action552::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce152< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(553); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action553::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (0, ___symbol, 80) + } + pub(crate) fn ___reduce153< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, MatchItem => ActionFn(554); + let ___sym1 = ___pop_Variant22(___symbols); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action554::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (2, ___symbol, 80) + } + pub(crate) fn ___reduce154< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(555); + let ___sym0 = ___pop_Variant23(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action555::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant50(___nt), ___end); + (1, ___symbol, 80) + } + pub(crate) fn ___reduce155< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = NotMacroId => ActionFn(556); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action556::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce156< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(557); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action557::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (0, ___symbol, 81) + } + pub(crate) fn ___reduce157< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, NotMacroId => ActionFn(558); + let ___sym1 = ___pop_Variant24(___symbols); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action558::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (2, ___symbol, 81) + } + pub(crate) fn ___reduce158< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(559); + let ___sym0 = ___pop_Variant25(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action559::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant51(___nt), ___end); + (1, ___symbol, 81) + } + pub(crate) fn ___reduce159< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Pattern => ActionFn(560); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action560::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce160< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(561); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action561::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (0, ___symbol, 82) + } + pub(crate) fn ___reduce161< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Pattern => ActionFn(562); + let ___sym1 = ___pop_Variant26(___symbols); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action562::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (2, ___symbol, 82) + } + pub(crate) fn ___reduce162< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(563); + let ___sym0 = ___pop_Variant27(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action563::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant52(___nt), ___end); + (1, ___symbol, 82) + } + pub(crate) fn ___reduce163< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = Symbol => ActionFn(630); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action630::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce164< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(631); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action631::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (0, ___symbol, 83) + } + pub(crate) fn ___reduce165< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, Symbol => ActionFn(632); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action632::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (2, ___symbol, 83) + } + pub(crate) fn ___reduce166< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(633); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action633::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant53(___nt), ___end); + (1, ___symbol, 83) + } + pub(crate) fn ___reduce167< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeBoundParameter => ActionFn(638); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action638::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce168< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(639); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action639::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (0, ___symbol, 84) + } + pub(crate) fn ___reduce169< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeBoundParameter => ActionFn(640); + let ___sym1 = ___pop_Variant32(___symbols); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action640::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (2, ___symbol, 84) + } + pub(crate) fn ___reduce170< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(641); + let ___sym0 = ___pop_Variant33(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action641::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant5(___nt), ___end); + (1, ___symbol, 84) + } + pub(crate) fn ___reduce171< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeParameter => ActionFn(642); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action642::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce172< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(643); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action643::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (0, ___symbol, 85) + } + pub(crate) fn ___reduce173< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeParameter => ActionFn(644); + let ___sym1 = ___pop_Variant34(___symbols); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action644::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (2, ___symbol, 85) + } + pub(crate) fn ___reduce174< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(645); + let ___sym0 = ___pop_Variant35(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action645::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (1, ___symbol, 85) + } + pub(crate) fn ___reduce175< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRef => ActionFn(646); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action646::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce176< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(647); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action647::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 86) + } + pub(crate) fn ___reduce177< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRef => ActionFn(648); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action648::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 86) + } + pub(crate) fn ___reduce178< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(649); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action649::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 86) + } + pub(crate) fn ___reduce179< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = TypeRefOrLifetime => ActionFn(650); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action650::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce180< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = => ActionFn(651); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action651::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (0, ___symbol, 87) + } + pub(crate) fn ___reduce181< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+, TypeRefOrLifetime => ActionFn(652); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action652::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (2, ___symbol, 87) + } + pub(crate) fn ___reduce182< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Comma = ( ",")+ => ActionFn(653); + let ___sym0 = ___pop_Variant36(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action653::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant55(___nt), ___end); + (1, ___symbol, 87) + } + pub(crate) fn ___reduce183< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Cond = NotMacroId, CondOp, StringLiteral => ActionFn(416); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant56(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action416::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant7(___nt), ___end); + (3, ___symbol, 88) + } + pub(crate) fn ___reduce184< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "==" => ActionFn(44); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action44::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce185< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!=" => ActionFn(45); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action45::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce186< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "~~" => ActionFn(46); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action46::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce187< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // CondOp = "!~" => ActionFn(47); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action47::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant56(___nt), ___end); + (1, ___symbol, 89) + } + pub(crate) fn ___reduce189< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = Conversion => ActionFn(254); + let ___sym0 = ___pop_Variant12(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action254::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (1, ___symbol, 91) + } + pub(crate) fn ___reduce190< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Conversion? = => ActionFn(255); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action255::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant57(___nt), ___end); + (0, ___symbol, 91) + } + pub(crate) fn ___reduce191< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // EnumToken = "enum", TypeRef, "{", Comma, "}" => ActionFn(418); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant46(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action418::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant58(___nt), ___end); + (5, ___symbol, 92) + } + pub(crate) fn ___reduce192< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Escape = "Escape" => ActionFn(103); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action103::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 93) + } + pub(crate) fn ___reduce193< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = => ActionFn(628); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action628::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (0, ___symbol, 94) + } + pub(crate) fn ___reduce194< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExprSymbol = Symbol+ => ActionFn(629); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action629::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant59(___nt), ___end); + (1, ___symbol, 94) + } + pub(crate) fn ___reduce195< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, "}" => ActionFn(448); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action448::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce196< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", EnumToken, AssociatedType+, "}" => ActionFn(449); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant45(___symbols); + let ___sym2 = ___pop_Variant58(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action449::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce197< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, "}" => ActionFn(450); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action450::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 95) + } + pub(crate) fn ___reduce198< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, EnumToken, AssociatedType+, "}" => ActionFn(451); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant45(___symbols); + let ___sym3 = ___pop_Variant58(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action451::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 95) + } + pub(crate) fn ___reduce199< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", "}" => ActionFn(452); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action452::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (3, ___symbol, 95) + } + pub(crate) fn ___reduce200< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ExternToken = "extern", "{", AssociatedType+, "}" => ActionFn(453); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant45(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action453::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 95) + } + pub(crate) fn ___reduce201< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern = Id, ":", Pattern => ActionFn(421); + let ___sym2 = ___pop_Variant26(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action421::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant14(___nt), ___end); + (3, ___symbol, 96) + } + pub(crate) fn ___reduce202< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = FieldPattern => ActionFn(113); + let ___sym0 = ___pop_Variant14(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action113::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (1, ___symbol, 97) + } + pub(crate) fn ___reduce203< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // FieldPattern? = => ActionFn(114); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action114::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant61(___nt), ___end); + (0, ___symbol, 97) + } + pub(crate) fn ___reduce204< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll = "for", "<", Comma, ">" => ActionFn(12); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action12::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (4, ___symbol, 98) + } + pub(crate) fn ___reduce205< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = ForAll => ActionFn(160); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action160::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (1, ___symbol, 99) + } + pub(crate) fn ___reduce206< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ForAll? = => ActionFn(161); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action161::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant62(___nt), ___end); + (0, ___symbol, 99) + } + pub(crate) fn ___reduce207< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(654); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action654::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce208< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(655); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action655::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce209< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(656); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action656::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce210< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(657); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action657::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce211< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(658); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action658::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce212< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(659); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action659::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce213< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(660); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action660::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce214< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(661); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action661::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce215< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(662); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action662::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce216< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(663); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action663::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce217< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(664); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action664::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce218< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(665); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action665::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce219< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";" => ActionFn(666); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action666::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce220< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";" => ActionFn(667); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action667::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce221< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";" => ActionFn(668); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action668::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce222< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";" => ActionFn(669); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action669::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce223< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(670); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action670::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce224< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(671); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action671::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce225< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(672); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action672::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce226< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(673); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action673::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce227< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";" => ActionFn(674); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action674::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce228< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(675); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action675::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce229< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";" => ActionFn(676); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action676::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce230< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";" => ActionFn(677); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action677::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce231< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";" => ActionFn(678); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action678::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce232< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(679); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action679::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce233< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";" => ActionFn(680); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action680::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce234< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";" => ActionFn(681); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action681::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce235< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";" => ActionFn(682); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action682::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (2, ___symbol, 100) + } + pub(crate) fn ___reduce236< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";" => ActionFn(683); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action683::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce237< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";" => ActionFn(684); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action684::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce238< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";" => ActionFn(685); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action685::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce239< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(686); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action686::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce240< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(687); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action687::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce241< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(688); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action688::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce242< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(689); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action689::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce243< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(690); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action690::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce244< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(691); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action691::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce245< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(692); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action692::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce246< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(693); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action693::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce247< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(694); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action694::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce248< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(695); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action695::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce249< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(696); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action696::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce250< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(697); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action697::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce251< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(698); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action698::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce252< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(699); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action699::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce253< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(700); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action700::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce254< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(701); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action701::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce255< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(702); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action702::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce256< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(703); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action703::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce257< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(704); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action704::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce258< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(705); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action705::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce259< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(706); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action706::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce260< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(707); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action707::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce261< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(708); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action708::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce262< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(709); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action709::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce263< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(710); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action710::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce264< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(711); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action711::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce265< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(712); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action712::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce266< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(713); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action713::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce267< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = "grammar", ";", GrammarItem+ => ActionFn(714); + let ___sym2 = ___pop_Variant64(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action714::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce268< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, "grammar", ";", GrammarItem+ => ActionFn(715); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action715::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce269< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, "grammar", ";", GrammarItem+ => ActionFn(716); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action716::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce270< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, "grammar", ";", GrammarItem+ => ActionFn(717); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action717::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce271< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(718); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action718::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce272< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(719); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action719::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce273< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(720); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action720::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce274< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";" => ActionFn(721); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action721::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce275< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(722); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action722::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce276< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(723); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action723::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce277< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(724); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action724::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce278< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";" => ActionFn(725); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action725::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce279< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(726); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action726::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce280< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(727); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action727::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce281< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(728); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action728::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce282< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";" => ActionFn(729); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action729::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce283< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";" => ActionFn(730); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action730::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce284< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(731); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action731::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce285< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(732); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action732::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce286< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";" => ActionFn(733); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action733::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce287< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(734); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action734::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce288< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(735); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action735::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce289< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(736); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action736::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce290< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";" => ActionFn(737); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action737::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce291< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(738); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action738::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce292< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(739); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action739::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce293< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(740); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action740::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce294< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";" => ActionFn(741); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action741::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce295< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(742); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action742::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce296< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(743); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action743::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce297< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(744); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action744::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce298< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";" => ActionFn(745); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action745::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce299< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";" => ActionFn(746); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action746::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (3, ___symbol, 100) + } + pub(crate) fn ___reduce300< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";" => ActionFn(747); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action747::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce301< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";" => ActionFn(748); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action748::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce302< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";" => ActionFn(749); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action749::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce303< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(750); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action750::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce304< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(751); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action751::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce305< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(752); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action752::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce306< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(753); + let ___sym8 = ___pop_Variant64(___symbols); + let ___sym7 = ___pop_Variant0(___symbols); + let ___sym6 = ___pop_Variant48(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym8.2.clone(); + let ___nt = super::___action753::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7, ___sym8); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (9, ___symbol, 100) + } + pub(crate) fn ___reduce307< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(754); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action754::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce308< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(755); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action755::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce309< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(756); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action756::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce310< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarParameters, ";", GrammarItem+ => ActionFn(757); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant47(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action757::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce311< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(758); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action758::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce312< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(759); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action759::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce313< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(760); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action760::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce314< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(761); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action761::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce315< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(762); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant47(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action762::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce316< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(763); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action763::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce317< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(764); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant47(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action764::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce318< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarParameters, ";", GrammarItem+ => ActionFn(765); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant47(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action765::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce319< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(766); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action766::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce320< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(767); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action767::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce321< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(768); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action768::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce322< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, GrammarWhereClauses, ";", GrammarItem+ => ActionFn(769); + let ___sym7 = ___pop_Variant64(___symbols); + let ___sym6 = ___pop_Variant0(___symbols); + let ___sym5 = ___pop_Variant48(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym7.2.clone(); + let ___nt = super::___action769::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6, ___sym7); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (8, ___symbol, 100) + } + pub(crate) fn ___reduce323< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(770); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant54(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action770::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce324< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(771); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action771::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce325< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(772); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant54(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action772::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce326< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarTypeParameters, ";", GrammarItem+ => ActionFn(773); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant54(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action773::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce327< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(774); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant48(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action774::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce328< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(775); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action775::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce329< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(776); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant48(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action776::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce330< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", GrammarWhereClauses, ";", GrammarItem+ => ActionFn(777); + let ___sym6 = ___pop_Variant64(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant48(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action777::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (7, ___symbol, 100) + } + pub(crate) fn ___reduce331< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Annotation+, "grammar", ";", GrammarItem+ => ActionFn(778); + let ___sym3 = ___pop_Variant64(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action778::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (4, ___symbol, 100) + } + pub(crate) fn ___reduce332< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(779); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action779::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce333< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(780); + let ___sym4 = ___pop_Variant64(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant43(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action780::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (5, ___symbol, 100) + } + pub(crate) fn ___reduce334< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Grammar = ShebangAttribute+, Use+, Annotation+, "grammar", ";", GrammarItem+ => ActionFn(781); + let ___sym5 = ___pop_Variant64(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant43(___symbols); + let ___sym1 = ___pop_Variant64(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action781::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (6, ___symbol, 100) + } + pub(crate) fn ___reduce335< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Use => ActionFn(22); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action22::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce336< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = MatchToken => ActionFn(23); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action23::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce337< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = ExternToken => ActionFn(24); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action24::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce338< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem = Nonterminal => ActionFn(25); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action25::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 101) + } + pub(crate) fn ___reduce339< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = => ActionFn(165); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action165::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 102) + } + pub(crate) fn ___reduce340< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem* = GrammarItem+ => ActionFn(166); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action166::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 102) + } + pub(crate) fn ___reduce341< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem => ActionFn(187); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action187::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 103) + } + pub(crate) fn ___reduce342< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarItem+ = GrammarItem+, GrammarItem => ActionFn(188); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action188::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 103) + } + pub(crate) fn ___reduce343< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter = Id, ":", TypeRef => ActionFn(21); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action21::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant16(___nt), ___end); + (3, ___symbol, 104) + } + pub(crate) fn ___reduce344< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = GrammarParameter => ActionFn(220); + let ___sym0 = ___pop_Variant16(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action220::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (1, ___symbol, 105) + } + pub(crate) fn ___reduce345< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameter? = => ActionFn(221); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action221::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant65(___nt), ___end); + (0, ___symbol, 105) + } + pub(crate) fn ___reduce346< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters = "(", Comma, ")" => ActionFn(20); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant47(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action20::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant47(___nt), ___end); + (3, ___symbol, 106) + } + pub(crate) fn ___reduce347< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = GrammarParameters => ActionFn(169); + let ___sym0 = ___pop_Variant47(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action169::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (1, ___symbol, 107) + } + pub(crate) fn ___reduce348< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarParameters? = => ActionFn(170); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action170::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant66(___nt), ___end); + (0, ___symbol, 107) + } + pub(crate) fn ___reduce349< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters = "<", Comma, ">" => ActionFn(6); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant54(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action6::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant54(___nt), ___end); + (3, ___symbol, 108) + } + pub(crate) fn ___reduce350< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = GrammarTypeParameters => ActionFn(171); + let ___sym0 = ___pop_Variant54(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action171::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (1, ___symbol, 109) + } + pub(crate) fn ___reduce351< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarTypeParameters? = => ActionFn(172); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action172::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant67(___nt), ___end); + (0, ___symbol, 109) + } + pub(crate) fn ___reduce352< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = Lifetime, ":", Plus => ActionFn(10); + let ___sym2 = ___pop_Variant49(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action10::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce353< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = ForAll, TypeRef, ":", TypeBounds => ActionFn(462); + let ___sym3 = ___pop_Variant81(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action462::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (4, ___symbol, 110) + } + pub(crate) fn ___reduce354< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause = TypeRef, ":", TypeBounds => ActionFn(463); + let ___sym2 = ___pop_Variant81(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action463::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant18(___nt), ___end); + (3, ___symbol, 110) + } + pub(crate) fn ___reduce355< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = GrammarWhereClause => ActionFn(194); + let ___sym0 = ___pop_Variant18(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action194::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (1, ___symbol, 111) + } + pub(crate) fn ___reduce356< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClause? = => ActionFn(195); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action195::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant68(___nt), ___end); + (0, ___symbol, 111) + } + pub(crate) fn ___reduce357< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses = "where", Comma => ActionFn(9); + let ___sym1 = ___pop_Variant48(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action9::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (2, ___symbol, 112) + } + pub(crate) fn ___reduce358< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = GrammarWhereClauses => ActionFn(167); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action167::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (1, ___symbol, 113) + } + pub(crate) fn ___reduce359< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // GrammarWhereClauses? = => ActionFn(168); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action168::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant69(___nt), ___end); + (0, ___symbol, 113) + } + pub(crate) fn ___reduce360< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "Id" => ActionFn(101); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action101::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce361< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Id = "MacroId" => ActionFn(102); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action102::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 114) + } + pub(crate) fn ___reduce362< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime = "Lifetime" => ActionFn(104); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action104::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 115) + } + pub(crate) fn ___reduce363< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = Lifetime => ActionFn(131); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action131::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (1, ___symbol, 116) + } + pub(crate) fn ___reduce364< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Lifetime? = => ActionFn(132); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action132::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant70(___nt), ___end); + (0, ___symbol, 116) + } + pub(crate) fn ___reduce365< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MacroId = "MacroId" => ActionFn(99); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action99::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 117) + } + pub(crate) fn ___reduce366< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchContents = Comma => ActionFn(79); + let ___sym0 = ___pop_Variant50(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action79::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant71(___nt), ___end); + (1, ___symbol, 118) + } + pub(crate) fn ___reduce367< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = "_" => ActionFn(423); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action423::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce368< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem = MatchSymbol => ActionFn(424); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action424::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant22(___nt), ___end); + (1, ___symbol, 119) + } + pub(crate) fn ___reduce370< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = MatchItem => ActionFn(249); + let ___sym0 = ___pop_Variant22(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action249::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (1, ___symbol, 120) + } + pub(crate) fn ___reduce371< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchItem? = => ActionFn(250); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action250::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant72(___nt), ___end); + (0, ___symbol, 120) + } + pub(crate) fn ___reduce372< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchMapping = Terminal => ActionFn(84); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action84::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 121) + } + pub(crate) fn ___reduce373< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchSymbol = QuotedLiteral => ActionFn(83); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action83::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 122) + } + pub(crate) fn ___reduce374< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchToken = MatchTokenInt => ActionFn(76); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action76::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (1, ___symbol, 123) + } + pub(crate) fn ___reduce375< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = MatchTokenInt, "else", "{", MatchContents, "}" => ActionFn(77); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant71(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant75(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action77::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (5, ___symbol, 124) + } + pub(crate) fn ___reduce376< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // MatchTokenInt = "match", "{", MatchContents, "}" => ActionFn(426); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant71(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action426::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant75(___nt), ___end); + (4, ___symbol, 124) + } + pub(crate) fn ___reduce377< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(444); + let ___sym5 = ___pop_Variant41(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action444::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (6, ___symbol, 125) + } + pub(crate) fn ___reduce378< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, ":", TypeRef, "=", Alternatives => ActionFn(445); + let ___sym6 = ___pop_Variant41(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant3(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action445::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (7, ___symbol, 125) + } + pub(crate) fn ___reduce379< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Visibility, NonterminalName, "=", Alternatives => ActionFn(446); + let ___sym3 = ___pop_Variant41(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant76(___symbols); + let ___sym0 = ___pop_Variant90(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action446::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (4, ___symbol, 125) + } + pub(crate) fn ___reduce380< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Nonterminal = Annotation+, Visibility, NonterminalName, "=", Alternatives => ActionFn(447); + let ___sym4 = ___pop_Variant41(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant76(___symbols); + let ___sym1 = ___pop_Variant90(___symbols); + let ___sym0 = ___pop_Variant43(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action447::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (5, ___symbol, 125) + } + pub(crate) fn ___reduce381< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = MacroId, "<", Comma, ">" => ActionFn(32); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant51(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action32::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (4, ___symbol, 126) + } + pub(crate) fn ___reduce382< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = NotMacroId => ActionFn(33); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action33::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce383< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NonterminalName = "Escape" => ActionFn(34); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action34::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant76(___nt), ___end); + (1, ___symbol, 126) + } + pub(crate) fn ___reduce384< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId = "Id" => ActionFn(100); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action100::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant24(___nt), ___end); + (1, ___symbol, 127) + } + pub(crate) fn ___reduce385< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = NotMacroId => ActionFn(225); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action225::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (1, ___symbol, 128) + } + pub(crate) fn ___reduce386< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // NotMacroId? = => ActionFn(226); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action226::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant77(___nt), ___end); + (0, ___symbol, 128) + } + pub(crate) fn ___reduce387< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", Id => ActionFn(339); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action339::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce388< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = "::", ( "::")+, Id => ActionFn(340); + let ___sym2 = ___pop_Variant20(___symbols); + let ___sym1 = ___pop_Variant21(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action340::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (3, ___symbol, 129) + } + pub(crate) fn ___reduce389< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = Id => ActionFn(341); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action341::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (1, ___symbol, 129) + } + pub(crate) fn ___reduce390< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Path = ( "::")+, Id => ActionFn(342); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action342::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant78(___nt), ___end); + (2, ___symbol, 129) + } + pub(crate) fn ___reduce391< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern = PatternKind => ActionFn(429); + let ___sym0 = ___pop_Variant80(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action429::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 130) + } + pub(crate) fn ___reduce392< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = Pattern => ActionFn(259); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action259::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (1, ___symbol, 131) + } + pub(crate) fn ___reduce393< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Pattern? = => ActionFn(260); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action260::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant79(___nt), ___end); + (0, ___symbol, 131) + } + pub(crate) fn ___reduce394< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "(", Comma, ")" => ActionFn(89); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant52(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action89::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce395< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", FieldPattern, "}" => ActionFn(458); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant14(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action458::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce396< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "}" => ActionFn(459); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action459::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce397< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, FieldPattern, "}" => ActionFn(460); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant14(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action460::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce398< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "}" => ActionFn(461); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action461::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce399< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", "..", "}" => ActionFn(327); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action327::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (4, ___symbol, 132) + } + pub(crate) fn ___reduce400< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path, "{", ( ",")+, "..", "}" => ActionFn(328); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant15(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action328::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (5, ___symbol, 132) + } + pub(crate) fn ___reduce401< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "_" => ActionFn(92); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action92::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce402< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = ".." => ActionFn(93); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action93::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce403< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "<", TypeRef, ">" => ActionFn(94); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action94::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce404< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "(", Comma, ")" => ActionFn(95); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant52(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action95::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (3, ___symbol, 132) + } + pub(crate) fn ___reduce405< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = "CharLiteral" => ActionFn(96); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action96::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce406< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // PatternKind = Path => ActionFn(97); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action97::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant80(___nt), ___end); + (1, ___symbol, 132) + } + pub(crate) fn ___reduce407< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = Lifetime => ActionFn(544); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action544::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce408< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(545); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action545::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (0, ___symbol, 133) + } + pub(crate) fn ___reduce409< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, Lifetime => ActionFn(546); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action546::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (2, ___symbol, 133) + } + pub(crate) fn ___reduce410< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(547); + let ___sym0 = ___pop_Variant21(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action547::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant49(___nt), ___end); + (1, ___symbol, 133) + } + pub(crate) fn ___reduce411< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = TypeBound => ActionFn(634); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action634::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce412< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = => ActionFn(635); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action635::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (0, ___symbol, 134) + } + pub(crate) fn ___reduce413< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+, TypeBound => ActionFn(636); + let ___sym1 = ___pop_Variant30(___symbols); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action636::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (2, ___symbol, 134) + } + pub(crate) fn ___reduce414< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Plus = ( "+")+ => ActionFn(637); + let ___sym0 = ___pop_Variant31(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action637::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 134) + } + pub(crate) fn ___reduce415< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = StringLiteral => ActionFn(108); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action108::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce416< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedLiteral = RegexLiteral => ActionFn(109); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action109::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant74(___nt), ___end); + (1, ___symbol, 135) + } + pub(crate) fn ___reduce417< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // QuotedTerminal = QuotedLiteral => ActionFn(107); + let ___sym0 = ___pop_Variant74(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action107::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 136) + } + pub(crate) fn ___reduce418< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RegexLiteral = "RegexLiteral" => ActionFn(111); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action111::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 137) + } + pub(crate) fn ___reduce419< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "+" => ActionFn(54); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action54::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce420< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "*" => ActionFn(55); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action55::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce421< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // RepeatOp = "?" => ActionFn(56); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action56::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant82(___nt), ___end); + (1, ___symbol, 138) + } + pub(crate) fn ___reduce422< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute = "#![...]" => ActionFn(112); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action112::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant83(___nt), ___end); + (1, ___symbol, 139) + } + pub(crate) fn ___reduce423< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = => ActionFn(179); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action179::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (0, ___symbol, 140) + } + pub(crate) fn ___reduce424< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute* = ShebangAttribute+ => ActionFn(180); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action180::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 140) + } + pub(crate) fn ___reduce425< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute => ActionFn(181); + let ___sym0 = ___pop_Variant83(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action181::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (1, ___symbol, 141) + } + pub(crate) fn ___reduce426< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ShebangAttribute+ = ShebangAttribute+, ShebangAttribute => ActionFn(182); + let ___sym1 = ___pop_Variant83(___symbols); + let ___sym0 = ___pop_Variant84(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action182::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant84(___nt), ___end); + (2, ___symbol, 141) + } + pub(crate) fn ___reduce427< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // StringLiteral = "StringLiteral" => ActionFn(110); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action110::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant20(___nt), ___end); + (1, ___symbol, 142) + } + pub(crate) fn ___reduce428< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Id, ":", Symbol0, ">" => ActionFn(430); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant28(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action430::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (5, ___symbol, 143) + } + pub(crate) fn ___reduce429< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = "<", Symbol0, ">" => ActionFn(431); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action431::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (3, ___symbol, 143) + } + pub(crate) fn ___reduce430< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol = Symbol0 => ActionFn(51); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action51::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 143) + } + pub(crate) fn ___reduce431< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = => ActionFn(134); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action134::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (0, ___symbol, 144) + } + pub(crate) fn ___reduce432< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol* = Symbol+ => ActionFn(135); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action135::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 144) + } + pub(crate) fn ___reduce433< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol => ActionFn(141); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action141::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (1, ___symbol, 145) + } + pub(crate) fn ___reduce434< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol+ = Symbol+, Symbol => ActionFn(142); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant29(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action142::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant29(___nt), ___end); + (2, ___symbol, 145) + } + pub(crate) fn ___reduce435< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol1 => ActionFn(52); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action52::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 146) + } + pub(crate) fn ___reduce436< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol0 = Symbol0, RepeatOp => ActionFn(432); + let ___sym1 = ___pop_Variant82(___symbols); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action432::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (2, ___symbol, 146) + } + pub(crate) fn ___reduce437< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol1 = SymbolKind1 => ActionFn(433); + let ___sym0 = ___pop_Variant86(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action433::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant28(___nt), ___end); + (1, ___symbol, 147) + } + pub(crate) fn ___reduce438< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = Symbol => ActionFn(235); + let ___sym0 = ___pop_Variant28(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action235::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (1, ___symbol, 148) + } + pub(crate) fn ___reduce439< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Symbol? = => ActionFn(236); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action236::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant85(___nt), ___end); + (0, ___symbol, 148) + } + pub(crate) fn ___reduce440< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = MacroId, "<", Comma, ">" => ActionFn(58); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant53(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant24(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action58::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (4, ___symbol, 149) + } + pub(crate) fn ___reduce441< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = QuotedTerminal => ActionFn(59); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action59::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce442< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "Id" => ActionFn(60); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action60::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce443< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = Escape => ActionFn(61); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action61::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce444< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "(", ExprSymbol, ")" => ActionFn(62); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant59(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action62::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (3, ___symbol, 149) + } + pub(crate) fn ___reduce445< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@L" => ActionFn(63); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action63::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce446< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "@R" => ActionFn(64); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action64::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce447< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // SymbolKind1 = "!" => ActionFn(65); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action65::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant86(___nt), ___end); + (1, ___symbol, 149) + } + pub(crate) fn ___reduce448< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = QuotedTerminal => ActionFn(105); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action105::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce449< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Terminal = "Id" => ActionFn(106); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action106::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 150) + } + pub(crate) fn ___reduce450< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Lifetime => ActionFn(14); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action14::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce451< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")", "->", TypeRef => ActionFn(464); + let ___sym6 = ___pop_Variant3(___symbols); + let ___sym5 = ___pop_Variant0(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym6.2.clone(); + let ___nt = super::___action464::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5, ___sym6); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (7, ___symbol, 151) + } + pub(crate) fn ___reduce452< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")", "->", TypeRef => ActionFn(465); + let ___sym5 = ___pop_Variant3(___symbols); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym5.2.clone(); + let ___nt = super::___action465::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4, ___sym5); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (6, ___symbol, 151) + } + pub(crate) fn ___reduce453< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "(", Comma, ")" => ActionFn(466); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant55(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action466::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce454< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "(", Comma, ")" => ActionFn(467); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action467::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce455< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path, "<", Comma, ">" => ActionFn(468); + let ___sym4 = ___pop_Variant0(___symbols); + let ___sym3 = ___pop_Variant5(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym4.2.clone(); + let ___nt = super::___action468::<>(text, ___sym0, ___sym1, ___sym2, ___sym3, ___sym4); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (5, ___symbol, 151) + } + pub(crate) fn ___reduce456< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path, "<", Comma, ">" => ActionFn(469); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant5(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action469::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (4, ___symbol, 151) + } + pub(crate) fn ___reduce457< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = ForAll, Path => ActionFn(470); + let ___sym1 = ___pop_Variant78(___symbols); + let ___sym0 = ___pop_Variant49(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action470::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (2, ___symbol, 151) + } + pub(crate) fn ___reduce458< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound = Path => ActionFn(471); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action471::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant30(___nt), ___end); + (1, ___symbol, 151) + } + pub(crate) fn ___reduce459< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = TypeBound => ActionFn(205); + let ___sym0 = ___pop_Variant30(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action205::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (1, ___symbol, 152) + } + pub(crate) fn ___reduce460< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBound? = => ActionFn(206); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action206::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant87(___nt), ___end); + (0, ___symbol, 152) + } + pub(crate) fn ___reduce461< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Lifetime => ActionFn(17); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action17::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce462< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = TypeRef => ActionFn(18); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action18::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (1, ___symbol, 153) + } + pub(crate) fn ___reduce463< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter = Id, "=", TypeRef => ActionFn(19); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action19::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant32(___nt), ___end); + (3, ___symbol, 153) + } + pub(crate) fn ___reduce464< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = TypeBoundParameter => ActionFn(215); + let ___sym0 = ___pop_Variant32(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action215::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (1, ___symbol, 154) + } + pub(crate) fn ___reduce465< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBoundParameter? = => ActionFn(216); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action216::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant88(___nt), ___end); + (0, ___symbol, 154) + } + pub(crate) fn ___reduce466< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeBounds = Plus => ActionFn(13); + let ___sym0 = ___pop_Variant81(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action13::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant81(___nt), ___end); + (1, ___symbol, 155) + } + pub(crate) fn ___reduce467< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Lifetime => ActionFn(7); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action7::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce468< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter = Id => ActionFn(8); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action8::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant34(___nt), ___end); + (1, ___symbol, 156) + } + pub(crate) fn ___reduce469< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = TypeParameter => ActionFn(189); + let ___sym0 = ___pop_Variant34(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action189::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (1, ___symbol, 157) + } + pub(crate) fn ___reduce470< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeParameter? = => ActionFn(190); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action190::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant89(___nt), ___end); + (0, ___symbol, 157) + } + pub(crate) fn ___reduce471< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "(", Comma, ")" => ActionFn(66); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant55(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action66::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce472< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "#", Symbol, "#" => ActionFn(67); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant28(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action67::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce473< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, "mut", TypeRef => ActionFn(548); + let ___sym3 = ___pop_Variant3(___symbols); + let ___sym2 = ___pop_Variant0(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action548::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce474< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", "mut", TypeRef => ActionFn(549); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action549::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce475< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", Lifetime, TypeRef => ActionFn(550); + let ___sym2 = ___pop_Variant3(___symbols); + let ___sym1 = ___pop_Variant20(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym2.2.clone(); + let ___nt = super::___action550::<>(text, ___sym0, ___sym1, ___sym2); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (3, ___symbol, 158) + } + pub(crate) fn ___reduce476< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = "&", TypeRef => ActionFn(551); + let ___sym1 = ___pop_Variant3(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action551::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (2, ___symbol, 158) + } + pub(crate) fn ___reduce477< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path, "<", Comma, ">" => ActionFn(69); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant55(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action69::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (4, ___symbol, 158) + } + pub(crate) fn ___reduce478< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef = Path => ActionFn(70); + let ___sym0 = ___pop_Variant78(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action70::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 158) + } + pub(crate) fn ___reduce479< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = TypeRef => ActionFn(210); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action210::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 159) + } + pub(crate) fn ___reduce480< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRef? = => ActionFn(211); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action211::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 159) + } + pub(crate) fn ___reduce481< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = TypeRef => ActionFn(71); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action71::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce482< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime = Lifetime => ActionFn(72); + let ___sym0 = ___pop_Variant20(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action72::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant3(___nt), ___end); + (1, ___symbol, 160) + } + pub(crate) fn ___reduce483< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = TypeRefOrLifetime => ActionFn(240); + let ___sym0 = ___pop_Variant3(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action240::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (1, ___symbol, 161) + } + pub(crate) fn ___reduce484< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // TypeRefOrLifetime? = => ActionFn(241); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action241::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant4(___nt), ___end); + (0, ___symbol, 161) + } + pub(crate) fn ___reduce485< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use = "use", ";" => ActionFn(26); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant1(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action26::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant60(___nt), ___end); + (2, ___symbol, 162) + } + pub(crate) fn ___reduce486< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = => ActionFn(177); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action177::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (0, ___symbol, 163) + } + pub(crate) fn ___reduce487< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use* = Use+ => ActionFn(178); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action178::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 163) + } + pub(crate) fn ___reduce488< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use => ActionFn(183); + let ___sym0 = ___pop_Variant60(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action183::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (1, ___symbol, 164) + } + pub(crate) fn ___reduce489< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Use+ = Use+, Use => ActionFn(184); + let ___sym1 = ___pop_Variant60(___symbols); + let ___sym0 = ___pop_Variant64(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym1.2.clone(); + let ___nt = super::___action184::<>(text, ___sym0, ___sym1); + let ___symbol = (___start, ___Symbol::Variant64(___nt), ___end); + (2, ___symbol, 164) + } + pub(crate) fn ___reduce490< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub", "(", Path, ")" => ActionFn(27); + let ___sym3 = ___pop_Variant0(___symbols); + let ___sym2 = ___pop_Variant78(___symbols); + let ___sym1 = ___pop_Variant0(___symbols); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym3.2.clone(); + let ___nt = super::___action27::<>(text, ___sym0, ___sym1, ___sym2, ___sym3); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (4, ___symbol, 165) + } + pub(crate) fn ___reduce491< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = "pub" => ActionFn(28); + let ___sym0 = ___pop_Variant0(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action28::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (1, ___symbol, 165) + } + pub(crate) fn ___reduce492< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // Visibility = => ActionFn(314); + let ___start = ___symbols.last().map(|s| s.2.clone()).unwrap_or_default(); + let ___end = ___lookahead_start.cloned().unwrap_or_else(|| ___start.clone()); + let ___nt = super::___action314::<>(text, &___start, &___end); + let ___symbol = (___start, ___Symbol::Variant90(___nt), ___end); + (0, ___symbol, 165) + } + pub(crate) fn ___reduce493< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Grammar = Grammar => ActionFn(0); + let ___sym0 = ___pop_Variant63(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action0::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant63(___nt), ___end); + (1, ___symbol, 166) + } + pub(crate) fn ___reduce494< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___GrammarWhereClauses = GrammarWhereClauses => ActionFn(1); + let ___sym0 = ___pop_Variant48(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action1::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant48(___nt), ___end); + (1, ___symbol, 167) + } + pub(crate) fn ___reduce495< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___MatchMapping = MatchMapping => ActionFn(3); + let ___sym0 = ___pop_Variant73(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action3::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant73(___nt), ___end); + (1, ___symbol, 168) + } + pub(crate) fn ___reduce496< + 'input, + >( + text: &'input str, + ___action: i16, + ___lookahead_start: Option<&usize>, + ___states: &mut ::std::vec::Vec, + ___symbols: &mut ::std::vec::Vec<(usize,___Symbol<'input>,usize)>, + _: ::std::marker::PhantomData<()>, + ) -> (usize, (usize,___Symbol<'input>,usize), usize) + { + // ___Pattern = Pattern => ActionFn(4); + let ___sym0 = ___pop_Variant26(___symbols); + let ___start = ___sym0.0.clone(); + let ___end = ___sym0.2.clone(); + let ___nt = super::___action4::<>(text, ___sym0); + let ___symbol = (___start, ___Symbol::Variant26(___nt), ___end); + (1, ___symbol, 169) + } +} +pub use self::___parse___TypeRef::TypeRefParser; + +#[allow(unused_variables)] +fn ___action0< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Grammar, usize), +) -> Grammar +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action1< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec>, usize), +) -> Vec> +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action2< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action3< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalString, usize), +) -> TerminalString +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action4< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Pattern, usize), +) -> Pattern +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action5< + 'input, +>( + text: &'input str, + (_, module_attributes, _): (usize, ::std::vec::Vec, usize), + (_, uses, _): (usize, ::std::vec::Vec, usize), + (_, annotations, _): (usize, ::std::vec::Vec, usize), + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), + (_, tps, _): (usize, ::std::option::Option>, usize), + (_, parameters, _): (usize, ::std::option::Option>, usize), + (_, where_clauses, _): (usize, ::std::option::Option>>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, items, _): (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + { + Grammar { prefix: format!("__"), // adjusted by `parse_grammar` + span: Span(lo, hi), + type_parameters: tps.unwrap_or(vec![]), + parameters: parameters.unwrap_or(vec![]), + where_clauses: where_clauses.unwrap_or(vec![]), + items: uses.into_iter().chain(items).collect(), + annotations: annotations, + module_attributes: module_attributes} + } +} + +#[allow(unused_variables)] +fn ___action6< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action7< + 'input, +>( + text: &'input str, + (_, l, _): (usize, Atom, usize), +) -> TypeParameter +{ + TypeParameter::Lifetime(l) +} + +#[allow(unused_variables)] +fn ___action8< + 'input, +>( + text: &'input str, + (_, l, _): (usize, Atom, usize), +) -> TypeParameter +{ + TypeParameter::Id(l) +} + +#[allow(unused_variables)] +fn ___action9< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec>, usize), +) -> Vec> +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action10< + 'input, +>( + text: &'input str, + (_, l, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, bounds, _): (usize, Vec, usize), +) -> WhereClause +{ + WhereClause::Lifetime { lifetime: l, bounds: bounds } +} + +#[allow(unused_variables)] +fn ___action11< + 'input, +>( + text: &'input str, + (_, f, _): (usize, ::std::option::Option>, usize), + (_, ty, _): (usize, TypeRef, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, bounds, _): (usize, Vec>, usize), +) -> WhereClause +{ + WhereClause::Type { forall: f, ty: ty, bounds: bounds } +} + +#[allow(unused_variables)] +fn ___action12< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action13< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec>, usize), +) -> Vec> +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action14< + 'input, +>( + text: &'input str, + (_, l, _): (usize, Atom, usize), +) -> TypeBound +{ + TypeBound::Lifetime(l) +} + +#[allow(unused_variables)] +fn ___action15< + 'input, +>( + text: &'input str, + (_, f, _): (usize, ::std::option::Option>, usize), + (_, p, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, params, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ret, _): (usize, ::std::option::Option, usize), +) -> TypeBound +{ + TypeBound::Fn { forall: f, path: p, parameters: params, ret: ret } +} + +#[allow(unused_variables)] +fn ___action16< + 'input, +>( + text: &'input str, + (_, f, _): (usize, ::std::option::Option>, usize), + (_, p, _): (usize, Path, usize), + (_, params, _): (usize, ::std::option::Option>>, usize), +) -> TypeBound +{ + TypeBound::Trait { forall: f, path: p, parameters: params.unwrap_or(vec![]) } +} + +#[allow(unused_variables)] +fn ___action17< + 'input, +>( + text: &'input str, + (_, l, _): (usize, Atom, usize), +) -> TypeBoundParameter +{ + TypeBoundParameter::Lifetime(l) +} + +#[allow(unused_variables)] +fn ___action18< + 'input, +>( + text: &'input str, + (_, ty, _): (usize, TypeRef, usize), +) -> TypeBoundParameter +{ + TypeBoundParameter::TypeParameter(ty) +} + +#[allow(unused_variables)] +fn ___action19< + 'input, +>( + text: &'input str, + (_, id, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ty, _): (usize, TypeRef, usize), +) -> TypeBoundParameter +{ + TypeBoundParameter::Associated(id, ty) +} + +#[allow(unused_variables)] +fn ___action20< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action21< + 'input, +>( + text: &'input str, + (_, id, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ty, _): (usize, TypeRef, usize), +) -> Parameter +{ + Parameter { name: id, ty: ty } +} + +#[allow(unused_variables)] +fn ___action22< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> GrammarItem +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action23< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> GrammarItem +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action24< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> GrammarItem +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action25< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> GrammarItem +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action26< + 'input, +>( + text: &'input str, + (_, u, _): (usize, &'input str, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> GrammarItem +{ + GrammarItem::Use(strip(u).to_string()) +} + +#[allow(unused_variables)] +fn ___action27< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, p, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Visibility +{ + Visibility::Pub(Some(p)) +} + +#[allow(unused_variables)] +fn ___action28< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> Visibility +{ + Visibility::Pub(None) +} + +#[allow(unused_variables)] +fn ___action29< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, (), usize), +) -> Visibility +{ + Visibility::Priv +} + +#[allow(unused_variables)] +fn ___action30< + 'input, +>( + text: &'input str, + (_, annotations, _): (usize, ::std::vec::Vec, usize), + (_, v, _): (usize, Visibility, usize), + (_, lo, _): (usize, usize, usize), + (_, n, _): (usize, (NonterminalString, Vec), usize), + (_, hi, _): (usize, usize, usize), + (_, t, _): (usize, ::std::option::Option, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a, _): (usize, Vec, usize), +) -> GrammarItem +{ + { + GrammarItem::Nonterminal(NonterminalData { visibility: v, + span: Span(lo, hi), + name: n.0, + annotations: annotations, + args: n.1, + type_decl: t, + alternatives: a }) + } +} + +#[allow(unused_variables)] +fn ___action31< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, lo, _): (usize, usize, usize), + (_, id, _): (usize, Atom, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Annotation +{ + { + Annotation { id_span: Span(lo, hi), id: id } + } +} + +#[allow(unused_variables)] +fn ___action32< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, NonterminalString, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ___1, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> (NonterminalString, Vec) +{ + (___0, ___1) +} + +#[allow(unused_variables)] +fn ___action33< + 'input, +>( + text: &'input str, + (_, n, _): (usize, NonterminalString, usize), +) -> (NonterminalString, Vec) +{ + (n, vec![]) +} + +#[allow(unused_variables)] +fn ___action34< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, &'input str, usize), +) -> (NonterminalString, Vec) +{ + (NonterminalString(Atom::from(___0)), vec![]) +} + +#[allow(unused_variables)] +fn ___action35< + 'input, +>( + text: &'input str, + (_, a, _): (usize, Alternative, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec +{ + vec![a] +} + +#[allow(unused_variables)] +fn ___action36< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action37< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, s, _): (usize, ::std::vec::Vec, usize), + (_, c, _): (usize, ::std::option::Option, usize), + (_, a, _): (usize, ::std::option::Option, usize), + (_, hi, _): (usize, usize, usize), +) -> Alternative +{ + { + Alternative { + span: Span(lo, hi), + expr: ExprSymbol { symbols: s }, + condition: c, + action: a + } + } +} + +#[allow(unused_variables)] +fn ___action38< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, c, _): (usize, ::std::option::Option, usize), + (_, a, _): (usize, ActionKind, usize), + (_, hi, _): (usize, usize, usize), +) -> Alternative +{ + { + Alternative { + span: Span(lo, hi), + expr: ExprSymbol { symbols: vec![] }, + condition: c, + action: Some(a) + } + } +} + +#[allow(unused_variables)] +fn ___action39< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ActionKind +{ + ActionKind::Lookahead +} + +#[allow(unused_variables)] +fn ___action40< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ActionKind +{ + ActionKind::Lookbehind +} + +#[allow(unused_variables)] +fn ___action41< + 'input, +>( + text: &'input str, + (_, c, _): (usize, &'input str, usize), +) -> ActionKind +{ + ActionKind::User(strip(c).to_string()) +} + +#[allow(unused_variables)] +fn ___action42< + 'input, +>( + text: &'input str, + (_, c, _): (usize, &'input str, usize), +) -> ActionKind +{ + ActionKind::Fallible(strip(c).to_string()) +} + +#[allow(unused_variables)] +fn ___action43< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, a, _): (usize, NonterminalString, usize), + (_, op, _): (usize, ConditionOp, usize), + (_, b, _): (usize, Atom, usize), + (_, hi, _): (usize, usize, usize), +) -> Condition +{ + { + Condition { span:Span(lo, hi), lhs:a, rhs:b, op:op } + } +} + +#[allow(unused_variables)] +fn ___action44< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ConditionOp +{ + ConditionOp::Equals +} + +#[allow(unused_variables)] +fn ___action45< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ConditionOp +{ + ConditionOp::NotEquals +} + +#[allow(unused_variables)] +fn ___action46< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ConditionOp +{ + ConditionOp::Match +} + +#[allow(unused_variables)] +fn ___action47< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ConditionOp +{ + ConditionOp::NotMatch +} + +#[allow(unused_variables)] +fn ___action48< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, ::std::vec::Vec, usize), +) -> ExprSymbol +{ + ExprSymbol { symbols: ___0 } +} + +#[allow(unused_variables)] +fn ___action49< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, usize, usize), + (_, l, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, s, _): (usize, Symbol, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), +) -> Symbol +{ + Symbol::new(Span(lo, hi), SymbolKind::Name(l, Box::new(s))) +} + +#[allow(unused_variables)] +fn ___action50< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, s, _): (usize, Symbol, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), +) -> Symbol +{ + Symbol::new(Span(lo, hi), SymbolKind::Choose(Box::new(s))) +} + +#[allow(unused_variables)] +fn ___action51< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), +) -> Symbol +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action52< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), +) -> Symbol +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action53< + 'input, +>( + text: &'input str, + (_, lhs, _): (usize, Symbol, usize), + (_, op, _): (usize, RepeatOp, usize), + (_, hi, _): (usize, usize, usize), +) -> Symbol +{ + Symbol::new(Span(lhs.span.0, hi), + SymbolKind::Repeat(Box::new(RepeatSymbol { symbol: lhs, op: op }))) +} + +#[allow(unused_variables)] +fn ___action54< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> RepeatOp +{ + RepeatOp::Plus +} + +#[allow(unused_variables)] +fn ___action55< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> RepeatOp +{ + RepeatOp::Star +} + +#[allow(unused_variables)] +fn ___action56< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> RepeatOp +{ + RepeatOp::Question +} + +#[allow(unused_variables)] +fn ___action57< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, sk, _): (usize, SymbolKind, usize), + (_, hi, _): (usize, usize, usize), +) -> Symbol +{ + Symbol::new(Span(lo, hi), sk) +} + +#[allow(unused_variables)] +fn ___action58< + 'input, +>( + text: &'input str, + (_, name, _): (usize, NonterminalString, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, args, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> SymbolKind +{ + SymbolKind::Macro(MacroSymbol { name: name, args: args }) +} + +#[allow(unused_variables)] +fn ___action59< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalString, usize), +) -> SymbolKind +{ + SymbolKind::Terminal(___0) +} + +#[allow(unused_variables)] +fn ___action60< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, &'input str, usize), +) -> SymbolKind +{ + SymbolKind::AmbiguousId(Atom::from(___0)) +} + +#[allow(unused_variables)] +fn ___action61< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> SymbolKind +{ + SymbolKind::Nonterminal(NonterminalString(___0)) +} + +#[allow(unused_variables)] +fn ___action62< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, ExprSymbol, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> SymbolKind +{ + SymbolKind::Expr(___0) +} + +#[allow(unused_variables)] +fn ___action63< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> SymbolKind +{ + SymbolKind::Lookahead +} + +#[allow(unused_variables)] +fn ___action64< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> SymbolKind +{ + SymbolKind::Lookbehind +} + +#[allow(unused_variables)] +fn ___action65< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> SymbolKind +{ + SymbolKind::Error +} + +#[allow(unused_variables)] +fn ___action66< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeRef +{ + TypeRef::Tuple(___0) +} + +#[allow(unused_variables)] +fn ___action67< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Symbol, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeRef +{ + { + TypeRef::OfSymbol(___0.kind) + } +} + +#[allow(unused_variables)] +fn ___action68< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, l, _): (usize, ::std::option::Option, usize), + (_, m, _): (usize, ::std::option::Option>, usize), + (_, t, _): (usize, TypeRef, usize), +) -> TypeRef +{ + TypeRef::Ref { lifetime: l, + mutable: m.is_some(), + referent: Box::new(t) } +} + +#[allow(unused_variables)] +fn ___action69< + 'input, +>( + text: &'input str, + (_, p, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeRef +{ + TypeRef::Nominal { path: p, types: a } +} + +#[allow(unused_variables)] +fn ___action70< + 'input, +>( + text: &'input str, + (_, p, _): (usize, Path, usize), +) -> TypeRef +{ + match p.as_id() { + Some(id) => TypeRef::Id(id), + None => TypeRef::Nominal { path: p, types: vec![] } + } +} + +#[allow(unused_variables)] +fn ___action71< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action72< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> TypeRef +{ + TypeRef::Lifetime(___0) +} + +#[allow(unused_variables)] +fn ___action73< + 'input, +>( + text: &'input str, + (_, a, _): (usize, ::std::option::Option>, usize), + (_, h, _): (usize, ::std::vec::Vec, usize), + (_, t, _): (usize, Atom, usize), +) -> Path +{ + { + Path { absolute: a.is_some(), + ids: h.into_iter().chain(once(t)).collect() } + } +} + +#[allow(unused_variables)] +fn ___action74< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a0, _): (usize, ::std::vec::Vec, usize), + (_, et, _): (usize, EnumToken, usize), + (_, a1, _): (usize, ::std::vec::Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> GrammarItem +{ + { + GrammarItem::ExternToken(ExternToken { + span: Span(lo, hi), + associated_types: a0.into_iter().chain(a1).collect(), + enum_token: Some(et), + }) + } +} + +#[allow(unused_variables)] +fn ___action75< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a0, _): (usize, ::std::vec::Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> GrammarItem +{ + { + GrammarItem::ExternToken(ExternToken { + span: Span(lo, hi), + associated_types: a0, + enum_token: None, + }) + } +} + +#[allow(unused_variables)] +fn ___action76< + 'input, +>( + text: &'input str, + (_, t, _): (usize, MatchToken, usize), +) -> GrammarItem +{ + GrammarItem::MatchToken(t) +} + +#[allow(unused_variables)] +fn ___action77< + 'input, +>( + text: &'input str, + (_, t, _): (usize, MatchToken, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, c, _): (usize, MatchContents, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> MatchToken +{ + t.add(c) +} + +#[allow(unused_variables)] +fn ___action78< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, c, _): (usize, MatchContents, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> MatchToken +{ + MatchToken::new(c, Span(lo, hi)) +} + +#[allow(unused_variables)] +fn ___action79< + 'input, +>( + text: &'input str, + (_, items, _): (usize, Vec, usize), +) -> MatchContents +{ + MatchContents { items: items } +} + +#[allow(unused_variables)] +fn ___action80< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, hi, _): (usize, usize, usize), +) -> MatchItem +{ + MatchItem::CatchAll(Span(lo, hi)) +} + +#[allow(unused_variables)] +fn ___action81< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, s, _): (usize, TerminalLiteral, usize), + (_, hi, _): (usize, usize, usize), +) -> MatchItem +{ + MatchItem::Unmapped(s, Span(lo, hi)) +} + +#[allow(unused_variables)] +fn ___action82< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, from, _): (usize, TerminalLiteral, usize), + (_, start, _): (usize, usize, usize), + (_, p, _): (usize, &'input str, usize), + (_, hi, _): (usize, usize, usize), +) -> Result,tok::Error>> +{ + { + let to = try!(super::parse_match_mapping(p, start + 2)); + Ok(MatchItem::Mapped(from, to, Span(lo, hi))) + } +} + +#[allow(unused_variables)] +fn ___action83< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalLiteral, usize), +) -> TerminalLiteral +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action84< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalString, usize), +) -> TerminalString +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action85< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, lo, _): (usize, usize, usize), + (_, t, _): (usize, TypeRef, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, c, _): (usize, Vec, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> EnumToken +{ + { + EnumToken { + type_name: t, + type_span: Span(lo, hi), + conversions: c, + } + } +} + +#[allow(unused_variables)] +fn ___action86< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, lo, _): (usize, usize, usize), + (_, n, _): (usize, Atom, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, t, _): (usize, TypeRef, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> AssociatedType +{ + { + AssociatedType { type_span: Span(lo, hi), + type_name: n, + type_ref: t } + } +} + +#[allow(unused_variables)] +fn ___action87< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, from, _): (usize, TerminalString, usize), + (_, start, _): (usize, usize, usize), + (_, p, _): (usize, &'input str, usize), + (_, hi, _): (usize, usize, usize), +) -> Result,tok::Error>> +{ + { + let pattern = try!(super::parse_pattern(p, start + 2)); + Ok(Conversion { span: Span(lo, hi), + from: from, + to: pattern }) + } +} + +#[allow(unused_variables)] +fn ___action88< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, k, _): (usize, PatternKind, usize), + (_, hi, _): (usize, usize, usize), +) -> Pattern +{ + Pattern { span: Span(lo, hi), kind: k } +} + +#[allow(unused_variables)] +fn ___action89< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, ___1, _): (usize, Vec>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Enum(___0, ___1) +} + +#[allow(unused_variables)] +fn ___action90< + 'input, +>( + text: &'input str, + (_, p, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a0, _): (usize, ::std::vec::Vec>, usize), + (_, a1, _): (usize, ::std::option::Option>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Struct(p, a0.into_iter().chain(a1).collect(), false) +} + +#[allow(unused_variables)] +fn ___action91< + 'input, +>( + text: &'input str, + (_, p, _): (usize, Path, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, a0, _): (usize, ::std::vec::Vec>, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Struct(p, a0, true) +} + +#[allow(unused_variables)] +fn ___action92< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Underscore +} + +#[allow(unused_variables)] +fn ___action93< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::DotDot +} + +#[allow(unused_variables)] +fn ___action94< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, TypeRef, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Choose(___0) +} + +#[allow(unused_variables)] +fn ___action95< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> PatternKind +{ + PatternKind::Tuple(___0) +} + +#[allow(unused_variables)] +fn ___action96< + 'input, +>( + text: &'input str, + (_, c, _): (usize, &'input str, usize), +) -> PatternKind +{ + PatternKind::CharLiteral(Atom::from(c)) +} + +#[allow(unused_variables)] +fn ___action97< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Path, usize), +) -> PatternKind +{ + PatternKind::Path(___0) +} + +#[allow(unused_variables)] +fn ___action98< + 'input, +>( + text: &'input str, + (_, lo, _): (usize, usize, usize), + (_, id, _): (usize, Atom, usize), + (_, hi, _): (usize, usize, usize), + (_, _, _): (usize, Tok<'input>, usize), + (_, pat, _): (usize, Pattern, usize), +) -> FieldPattern +{ + { + FieldPattern { field_span: Span(lo, hi), + field_name: id, + pattern: pat } + } +} + +#[allow(unused_variables)] +fn ___action99< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> NonterminalString +{ + NonterminalString(Atom::from(i)) +} + +#[allow(unused_variables)] +fn ___action100< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> NonterminalString +{ + NonterminalString(Atom::from(i)) +} + +#[allow(unused_variables)] +fn ___action101< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(i) +} + +#[allow(unused_variables)] +fn ___action102< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(i) +} + +#[allow(unused_variables)] +fn ___action103< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(i) +} + +#[allow(unused_variables)] +fn ___action104< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(i) +} + +#[allow(unused_variables)] +fn ___action105< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalString, usize), +) -> TerminalString +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action106< + 'input, +>( + text: &'input str, + (_, i, _): (usize, &'input str, usize), +) -> TerminalString +{ + TerminalString::Bare(Atom::from(i)) +} + +#[allow(unused_variables)] +fn ___action107< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TerminalLiteral, usize), +) -> TerminalString +{ + TerminalString::Literal(___0) +} + +#[allow(unused_variables)] +fn ___action108< + 'input, +>( + text: &'input str, + (_, s, _): (usize, Atom, usize), +) -> TerminalLiteral +{ + TerminalLiteral::Quoted(s) +} + +#[allow(unused_variables)] +fn ___action109< + 'input, +>( + text: &'input str, + (_, s, _): (usize, Atom, usize), +) -> TerminalLiteral +{ + TerminalLiteral::Regex(s) +} + +#[allow(unused_variables)] +fn ___action110< + 'input, +>( + text: &'input str, + (_, s, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(s) +} + +#[allow(unused_variables)] +fn ___action111< + 'input, +>( + text: &'input str, + (_, s, _): (usize, &'input str, usize), +) -> Atom +{ + Atom::from(s) +} + +#[allow(unused_variables)] +fn ___action112< + 'input, +>( + text: &'input str, + (_, s, _): (usize, &'input str, usize), +) -> String +{ + s.to_string() +} + +#[allow(unused_variables)] +fn ___action113< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, FieldPattern, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action114< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action115< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec> +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action116< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), +) -> ::std::vec::Vec> +{ + v +} + +#[allow(unused_variables)] +fn ___action117< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, FieldPattern, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> FieldPattern +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action118< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec>, usize), + (_, e1, _): (usize, ::std::option::Option>, usize), +) -> Vec> +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action119< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action120< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action121< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action122< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action123< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action124< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action125< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Atom +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action126< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action127< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action128< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action129< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Tok<'input>, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action130< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action131< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action132< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action133< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action134< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action135< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action136< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, ActionKind, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action137< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action138< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Condition, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action139< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action140< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Condition, usize), +) -> Condition +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action141< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action142< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Symbol, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action143< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action144< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action145< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action146< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action147< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, TypeRef, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action148< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> () +{ + () +} + +#[allow(unused_variables)] +fn ___action149< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action150< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec>, usize), +) -> ::std::option::Option>> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action151< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option>> +{ + None +} + +#[allow(unused_variables)] +fn ___action152< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, Vec>, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Vec> +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action153< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec>, usize), + (_, e1, _): (usize, ::std::option::Option>, usize), +) -> Vec> +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action154< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action155< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action156< + 'input, +>( + text: &'input str, + (_, _, _): (usize, Tok<'input>, usize), + (_, ___0, _): (usize, TypeRef, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action157< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action158< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, ::std::option::Option>, usize), +) -> Vec> +{ + match e { + None => v, + Some(e) => { + let mut v = v; + v.push(e); + v + } + } +} + +#[allow(unused_variables)] +fn ___action159< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action160< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action161< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action162< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + match e { + None => v, + Some(e) => { + let mut v = v; + v.push(e); + v + } + } +} + +#[allow(unused_variables)] +fn ___action163< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec>, usize), + (_, e1, _): (usize, ::std::option::Option>, usize), +) -> Vec> +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action164< + 'input, +>( + text: &'input str, + (_, v0, _): (usize, ::std::vec::Vec, usize), + (_, e1, _): (usize, ::std::option::Option, usize), +) -> Vec +{ + v0.into_iter().chain(e1).collect() +} + +#[allow(unused_variables)] +fn ___action165< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action166< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action167< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec>, usize), +) -> ::std::option::Option>> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action168< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option>> +{ + None +} + +#[allow(unused_variables)] +fn ___action169< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action170< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action171< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Vec, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action172< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action173< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> usize +{ + ___lookbehind.clone() +} + +#[allow(unused_variables)] +fn ___action174< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> usize +{ + ___lookahead.clone() +} + +#[allow(unused_variables)] +fn ___action175< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action176< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action177< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action178< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action179< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action180< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action181< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, String, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action182< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, String, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action183< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action184< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, GrammarItem, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action185< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Annotation, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action186< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Annotation, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action187< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, GrammarItem, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action188< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, GrammarItem, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action189< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeParameter, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action190< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action191< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action192< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action193< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeParameter, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeParameter +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action194< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, WhereClause, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action195< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action196< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec> +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action197< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), +) -> ::std::vec::Vec> +{ + v +} + +#[allow(unused_variables)] +fn ___action198< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, WhereClause, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> WhereClause +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action199< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action200< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action201< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Atom +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action202< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action203< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action204< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Atom +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action205< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBound, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action206< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action207< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec> +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action208< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), +) -> ::std::vec::Vec> +{ + v +} + +#[allow(unused_variables)] +fn ___action209< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBound, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeBound +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action210< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action211< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action212< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action213< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action214< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action215< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBoundParameter, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action216< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action217< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec> +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action218< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), +) -> ::std::vec::Vec> +{ + v +} + +#[allow(unused_variables)] +fn ___action219< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBoundParameter, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeBoundParameter +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action220< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Parameter, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action221< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action222< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action223< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action224< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Parameter, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Parameter +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action225< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, NonterminalString, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action226< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action227< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action228< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action229< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, NonterminalString, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> NonterminalString +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action230< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Alternative, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action231< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action232< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action233< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action234< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Alternative, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Alternative +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action235< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action236< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action237< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action238< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action239< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Symbol +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action240< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action241< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action242< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action243< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action244< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> TypeRef +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action245< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action246< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action247< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, AssociatedType, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action248< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, AssociatedType, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action249< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, MatchItem, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action250< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action251< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action252< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action253< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, MatchItem, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> MatchItem +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action254< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Conversion, usize), +) -> ::std::option::Option +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action255< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option +{ + None +} + +#[allow(unused_variables)] +fn ___action256< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action257< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec +{ + v +} + +#[allow(unused_variables)] +fn ___action258< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Conversion, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Conversion +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action259< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Pattern, usize), +) -> ::std::option::Option> +{ + Some(___0) +} + +#[allow(unused_variables)] +fn ___action260< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::option::Option> +{ + None +} + +#[allow(unused_variables)] +fn ___action261< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ::std::vec::Vec> +{ + vec![] +} + +#[allow(unused_variables)] +fn ___action262< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), +) -> ::std::vec::Vec> +{ + v +} + +#[allow(unused_variables)] +fn ___action263< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Pattern, usize), + (_, _, _): (usize, Tok<'input>, usize), +) -> Pattern +{ + (___0) +} + +#[allow(unused_variables)] +fn ___action264< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, FieldPattern, usize), +) -> ::std::vec::Vec> +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action265< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, FieldPattern, usize), +) -> ::std::vec::Vec> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action266< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Pattern, usize), +) -> ::std::vec::Vec> +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action267< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, Pattern, usize), +) -> ::std::vec::Vec> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action268< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Conversion, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action269< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Conversion, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action270< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, MatchItem, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action271< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, MatchItem, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action272< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action273< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, TypeRef, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action274< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Symbol, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action275< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Symbol, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action276< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Alternative, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action277< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Alternative, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action278< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, NonterminalString, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action279< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, NonterminalString, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action280< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Parameter, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action281< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Parameter, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action282< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBoundParameter, usize), +) -> ::std::vec::Vec> +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action283< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, TypeBoundParameter, usize), +) -> ::std::vec::Vec> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action284< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeRef, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action285< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, TypeRef, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action286< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeBound, usize), +) -> ::std::vec::Vec> +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action287< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, TypeBound, usize), +) -> ::std::vec::Vec> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action288< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action289< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action290< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action291< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, Atom, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action292< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, WhereClause, usize), +) -> ::std::vec::Vec> +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action293< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec>, usize), + (_, e, _): (usize, WhereClause, usize), +) -> ::std::vec::Vec> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action294< + 'input, +>( + text: &'input str, + (_, ___0, _): (usize, TypeParameter, usize), +) -> ::std::vec::Vec +{ + vec![___0] +} + +#[allow(unused_variables)] +fn ___action295< + 'input, +>( + text: &'input str, + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, TypeParameter, usize), +) -> ::std::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +fn ___action296< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action126( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action73( + text, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action297< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action127( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action73( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action298< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, ::std::option::Option, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action129( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action68( + text, + ___0, + ___1, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action299< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, ::std::option::Option, usize), + ___2: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action130( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action68( + text, + ___0, + ___1, + ___temp0, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action300< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, TypeRef, usize), +) -> ::std::option::Option +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action156( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action154( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action301< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, TypeRef, usize), +) -> TypeBound +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___6.2.clone(); + let ___temp0 = ___action300( + text, + ___5, + ___6, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action15( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action302< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action155( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action15( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action303< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, TypeRef, usize), +) -> ::std::option::Option +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action147( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action145( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action304< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, usize, usize), + ___3: (usize, (NonterminalString, Vec), usize), + ___4: (usize, usize, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, TypeRef, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___6.2.clone(); + let ___temp0 = ___action303( + text, + ___5, + ___6, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action30( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action305< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, usize, usize), + ___3: (usize, (NonterminalString, Vec), usize), + ___4: (usize, usize, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action146( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action30( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action306< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec>, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::option::Option>> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action152( + text, + ___0, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action150( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action307< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action306( + text, + ___2, + ___3, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action16( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action308< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), + ___1: (usize, Path, usize), +) -> TypeBound +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action151( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action16( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action309< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Condition, usize), +) -> ::std::option::Option +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action140( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action138( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action310< + 'input, +>( + text: &'input str, + ___0: (usize, usize, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Condition, usize), + ___4: (usize, ::std::option::Option, usize), + ___5: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action309( + text, + ___2, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action37( + text, + ___0, + ___1, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action311< + 'input, +>( + text: &'input str, + ___0: (usize, usize, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::option::Option, usize), + ___3: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action139( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action37( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action312< + 'input, +>( + text: &'input str, + ___0: (usize, usize, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Condition, usize), + ___3: (usize, ActionKind, usize), + ___4: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action309( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action38( + text, + ___0, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action313< + 'input, +>( + text: &'input str, + ___0: (usize, usize, usize), + ___1: (usize, ActionKind, usize), + ___2: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action139( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action38( + text, + ___0, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action314< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Visibility +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action148( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action29( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action315< + 'input, +>( + text: &'input str, + ___0: (usize, Alternative, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action234( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action276( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action316< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Alternative, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action234( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action277( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action317< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action232( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action143( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action318< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action233( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action143( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action319< + 'input, +>( + text: &'input str, + ___0: (usize, Conversion, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action258( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action268( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action320< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Conversion, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action258( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action269( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action321< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action256( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action119( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action322< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action257( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action119( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action323< + 'input, +>( + text: &'input str, + ___0: (usize, FieldPattern, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action117( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action264( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action324< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, FieldPattern, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action117( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action265( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action325< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::option::Option>, usize), + ___3: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action115( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action90( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action326< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action116( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action90( + text, + ___0, + ___1, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action327< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action115( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action91( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action328< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action116( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action91( + text, + ___0, + ___1, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action329< + 'input, +>( + text: &'input str, + ___0: (usize, Parameter, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action224( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action280( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action330< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Parameter, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action224( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action281( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action331< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action222( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action149( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action332< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action223( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action149( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action333< + 'input, +>( + text: &'input str, + ___0: (usize, WhereClause, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action198( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action292( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action334< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, WhereClause, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action198( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action293( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action335< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action196( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action163( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action336< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action197( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action163( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action337< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action125( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action245( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action338< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action125( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action246( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action339< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action123( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action296( + text, + ___0, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action340< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action124( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action296( + text, + ___0, + ___temp0, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action341< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action123( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action297( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action342< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), +) -> Path +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action124( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action297( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action343< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action201( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action290( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action344< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action201( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action291( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action345< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action199( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action162( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action346< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action200( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action162( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action347< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action204( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action288( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action348< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action204( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action289( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action349< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action202( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action159( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action350< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action203( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action159( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action351< + 'input, +>( + text: &'input str, + ___0: (usize, MatchItem, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action253( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action270( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action352< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, MatchItem, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action253( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action271( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action353< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action251( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action120( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action354< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action252( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action120( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action355< + 'input, +>( + text: &'input str, + ___0: (usize, NonterminalString, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action229( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action278( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action356< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, NonterminalString, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action229( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action279( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action357< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action227( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action144( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action358< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action228( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action144( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action359< + 'input, +>( + text: &'input str, + ___0: (usize, Pattern, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action263( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action266( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action360< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, Pattern, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action263( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action267( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action361< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action261( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action118( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action362< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action262( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action118( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action363< + 'input, +>( + text: &'input str, + ___0: (usize, Symbol, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action239( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action274( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action364< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Symbol, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action239( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action275( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action365< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action237( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action133( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action366< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action238( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action133( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action367< + 'input, +>( + text: &'input str, + ___0: (usize, TypeBound, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action209( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action286( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action368< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, TypeBound, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action209( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action287( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action369< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action207( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action158( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action370< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action208( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action158( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action371< + 'input, +>( + text: &'input str, + ___0: (usize, TypeBoundParameter, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action219( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action282( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action372< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, TypeBoundParameter, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action219( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action283( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action373< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action217( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action153( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action374< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, ::std::option::Option>, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action218( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action153( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action375< + 'input, +>( + text: &'input str, + ___0: (usize, TypeParameter, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action193( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action294( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action376< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeParameter, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action193( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action295( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action377< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action191( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action164( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action378< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action192( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action164( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action379< + 'input, +>( + text: &'input str, + ___0: (usize, TypeRef, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action214( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action284( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action380< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeRef, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action214( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action285( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action381< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action212( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action157( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action382< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action213( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action157( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action383< + 'input, +>( + text: &'input str, + ___0: (usize, TypeRef, usize), + ___1: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action244( + text, + ___0, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action272( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action384< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeRef, usize), + ___2: (usize, Tok<'input>, usize), +) -> ::std::vec::Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action244( + text, + ___1, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action273( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action385< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action242( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action128( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action386< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action243( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action128( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action387< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Condition, usize), + ___3: (usize, ::std::option::Option, usize), + ___4: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action310( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action388< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), + ___2: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action311( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action389< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Condition, usize), + ___2: (usize, ActionKind, usize), + ___3: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action312( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action390< + 'input, +>( + text: &'input str, + ___0: (usize, ActionKind, usize), + ___1: (usize, usize, usize), +) -> Alternative +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action313( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action391< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Atom, usize), + ___3: (usize, usize, usize), + ___4: (usize, Tok<'input>, usize), +) -> Annotation +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action31( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action392< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, usize, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, TypeRef, usize), + ___5: (usize, Tok<'input>, usize), +) -> AssociatedType +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action86( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action393< + 'input, +>( + text: &'input str, + ___0: (usize, NonterminalString, usize), + ___1: (usize, ConditionOp, usize), + ___2: (usize, Atom, usize), + ___3: (usize, usize, usize), +) -> Condition +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action43( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action394< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalString, usize), + ___1: (usize, &'input str, usize), + ___2: (usize, usize, usize), +) -> Result,tok::Error>> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___start1 = ___0.2.clone(); + let ___end1 = ___1.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action174( + text, + &___start1, + &___end1, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action87( + text, + ___temp0, + ___0, + ___temp1, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action395< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, TypeRef, usize), + ___2: (usize, usize, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> EnumToken +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action85( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action396< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, usize, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), + ___4: (usize, EnumToken, usize), + ___5: (usize, ::std::vec::Vec, usize), + ___6: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action74( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action397< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, usize, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action75( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action398< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), + ___1: (usize, usize, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Pattern, usize), +) -> FieldPattern +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action98( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action399< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, usize, usize), + ___5: (usize, ::std::option::Option>, usize), + ___6: (usize, ::std::option::Option>, usize), + ___7: (usize, ::std::option::Option>>, usize), + ___8: (usize, Tok<'input>, usize), + ___9: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action5( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ___5, + ___6, + ___7, + ___8, + ___9, + ) +} + +#[allow(unused_variables)] +fn ___action400< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, usize, usize), +) -> MatchItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action80( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action401< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalLiteral, usize), + ___1: (usize, usize, usize), +) -> MatchItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action81( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action402< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalLiteral, usize), + ___1: (usize, &'input str, usize), + ___2: (usize, usize, usize), +) -> Result,tok::Error>> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___start1 = ___0.2.clone(); + let ___end1 = ___1.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action174( + text, + &___start1, + &___end1, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action82( + text, + ___temp0, + ___0, + ___temp1, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action403< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, usize, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, MatchContents, usize), + ___4: (usize, Tok<'input>, usize), +) -> MatchToken +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action78( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action404< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, usize, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, TypeRef, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action304( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action405< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, usize, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action305( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action406< + 'input, +>( + text: &'input str, + ___0: (usize, PatternKind, usize), + ___1: (usize, usize, usize), +) -> Pattern +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action88( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action407< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Symbol, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, usize, usize), +) -> Symbol +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___start1 = ___0.2.clone(); + let ___end1 = ___1.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action174( + text, + &___start1, + &___end1, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action49( + text, + ___temp0, + ___0, + ___temp1, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action408< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Symbol, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, usize, usize), +) -> Symbol +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action50( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action409< + 'input, +>( + text: &'input str, + ___0: (usize, SymbolKind, usize), + ___1: (usize, usize, usize), +) -> Symbol +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action174( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action57( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action410< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Condition, usize), + ___3: (usize, ::std::option::Option, usize), +) -> Alternative +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action387( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action411< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::option::Option, usize), +) -> Alternative +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action388( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action412< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Condition, usize), + ___2: (usize, ActionKind, usize), +) -> Alternative +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action389( + text, + ___0, + ___1, + ___2, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action413< + 'input, +>( + text: &'input str, + ___0: (usize, ActionKind, usize), +) -> Alternative +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action390( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action414< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Atom, usize), + ___3: (usize, Tok<'input>, usize), +) -> Annotation +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action391( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action415< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, TypeRef, usize), + ___4: (usize, Tok<'input>, usize), +) -> AssociatedType +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action392( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action416< + 'input, +>( + text: &'input str, + ___0: (usize, NonterminalString, usize), + ___1: (usize, ConditionOp, usize), + ___2: (usize, Atom, usize), +) -> Condition +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action393( + text, + ___0, + ___1, + ___2, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action417< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalString, usize), + ___1: (usize, &'input str, usize), +) -> Result,tok::Error>> +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action394( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action418< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, TypeRef, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> EnumToken +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action395( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action419< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, EnumToken, usize), + ___4: (usize, ::std::vec::Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action396( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action420< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action397( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action421< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Pattern, usize), +) -> FieldPattern +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action398( + text, + ___0, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action422< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action399( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action423< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), +) -> MatchItem +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action400( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action424< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalLiteral, usize), +) -> MatchItem +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action401( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action425< + 'input, +>( + text: &'input str, + ___0: (usize, TerminalLiteral, usize), + ___1: (usize, &'input str, usize), +) -> Result,tok::Error>> +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action402( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action426< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, MatchContents, usize), + ___3: (usize, Tok<'input>, usize), +) -> MatchToken +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action403( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action427< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, TypeRef, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action404( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action428< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action405( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action429< + 'input, +>( + text: &'input str, + ___0: (usize, PatternKind, usize), +) -> Pattern +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action406( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action430< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Symbol, usize), + ___4: (usize, Tok<'input>, usize), +) -> Symbol +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action407( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action431< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Symbol, usize), + ___2: (usize, Tok<'input>, usize), +) -> Symbol +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action408( + text, + ___0, + ___1, + ___2, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action432< + 'input, +>( + text: &'input str, + ___0: (usize, Symbol, usize), + ___1: (usize, RepeatOp, usize), +) -> Symbol +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action53( + text, + ___0, + ___1, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action433< + 'input, +>( + text: &'input str, + ___0: (usize, SymbolKind, usize), +) -> Symbol +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action173( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action409( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action434< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Condition, usize), + ___3: (usize, ActionKind, usize), +) -> Alternative +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action136( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action410( + text, + ___0, + ___1, + ___2, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action435< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Condition, usize), +) -> Alternative +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action137( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action410( + text, + ___0, + ___1, + ___2, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action436< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ActionKind, usize), +) -> Alternative +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action136( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action411( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action437< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Alternative +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action137( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action411( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action438< + 'input, +>( + text: &'input str, + ___0: (usize, Alternative, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action230( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action317( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action439< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action231( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action317( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action440< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Alternative, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action230( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action318( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action441< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action231( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action318( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action442< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action175( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action422( + text, + ___0, + ___1, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action443< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action176( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action422( + text, + ___0, + ___1, + ___temp0, + ___3, + ___4, + ___5, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action444< + 'input, +>( + text: &'input str, + ___0: (usize, Visibility, usize), + ___1: (usize, (NonterminalString, Vec), usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, TypeRef, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action175( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action427( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action445< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, TypeRef, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action176( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action427( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action446< + 'input, +>( + text: &'input str, + ___0: (usize, Visibility, usize), + ___1: (usize, (NonterminalString, Vec), usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action175( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action428( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action447< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Visibility, usize), + ___2: (usize, (NonterminalString, Vec), usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), +) -> GrammarItem +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action176( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action428( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action448< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, EnumToken, usize), + ___3: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___start1 = ___2.2.clone(); + let ___end1 = ___3.0.clone(); + let ___temp0 = ___action121( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action121( + text, + &___start1, + &___end1, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action419( + text, + ___0, + ___1, + ___temp0, + ___2, + ___temp1, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action449< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, EnumToken, usize), + ___3: (usize, ::std::vec::Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___start1 = ___3.0.clone(); + let ___end1 = ___3.2.clone(); + let ___temp0 = ___action121( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action122( + text, + ___3, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action419( + text, + ___0, + ___1, + ___temp0, + ___2, + ___temp1, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action450< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, EnumToken, usize), + ___4: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___start1 = ___3.2.clone(); + let ___end1 = ___4.0.clone(); + let ___temp0 = ___action122( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action121( + text, + &___start1, + &___end1, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action419( + text, + ___0, + ___1, + ___temp0, + ___3, + ___temp1, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action451< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, EnumToken, usize), + ___4: (usize, ::std::vec::Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___start1 = ___4.0.clone(); + let ___end1 = ___4.2.clone(); + let ___temp0 = ___action122( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + let ___temp1 = ___action122( + text, + ___4, + ); + let ___temp1 = (___start1, ___temp1, ___end1); + ___action419( + text, + ___0, + ___1, + ___temp0, + ___3, + ___temp1, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action452< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action121( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action420( + text, + ___0, + ___1, + ___temp0, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action453< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> GrammarItem +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action122( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action420( + text, + ___0, + ___1, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action454< + 'input, +>( + text: &'input str, + ___0: (usize, Conversion, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action254( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action321( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action455< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action255( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action321( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action456< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Conversion, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action254( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action322( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action457< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action255( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action322( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action458< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, FieldPattern, usize), + ___3: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___2.0.clone(); + let ___end0 = ___2.2.clone(); + let ___temp0 = ___action113( + text, + ___2, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action325( + text, + ___0, + ___1, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action459< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___1.2.clone(); + let ___end0 = ___2.0.clone(); + let ___temp0 = ___action114( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action325( + text, + ___0, + ___1, + ___temp0, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action460< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec>, usize), + ___3: (usize, FieldPattern, usize), + ___4: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action113( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action326( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action461< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> PatternKind +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action114( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action326( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action462< + 'input, +>( + text: &'input str, + ___0: (usize, Vec, usize), + ___1: (usize, TypeRef, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), +) -> WhereClause +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action160( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action11( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action463< + 'input, +>( + text: &'input str, + ___0: (usize, TypeRef, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), +) -> WhereClause +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action161( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action11( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action464< + 'input, +>( + text: &'input str, + ___0: (usize, Vec, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, TypeRef, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action160( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action301( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action465< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, TypeRef, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action161( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action301( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action466< + 'input, +>( + text: &'input str, + ___0: (usize, Vec, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action160( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action302( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action467< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action161( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action302( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action468< + 'input, +>( + text: &'input str, + ___0: (usize, Vec, usize), + ___1: (usize, Path, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action160( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action307( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action469< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action161( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action307( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action470< + 'input, +>( + text: &'input str, + ___0: (usize, Vec, usize), + ___1: (usize, Path, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action160( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action308( + text, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action471< + 'input, +>( + text: &'input str, + ___0: (usize, Path, usize), +) -> TypeBound +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action161( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action308( + text, + ___temp0, + ___0, + ) +} + +#[allow(unused_variables)] +fn ___action472< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___6.2.clone(); + let ___end0 = ___6.2.clone(); + let ___temp0 = ___action165( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action442( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action473< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___7.0.clone(); + let ___end0 = ___7.2.clone(); + let ___temp0 = ___action166( + text, + ___7, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action442( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action474< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___7.2.clone(); + let ___end0 = ___7.2.clone(); + let ___temp0 = ___action165( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action443( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action475< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___8.0.clone(); + let ___end0 = ___8.2.clone(); + let ___temp0 = ___action166( + text, + ___8, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action443( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action476< + 'input, +>( + text: &'input str, + ___0: (usize, Parameter, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action220( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action331( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action477< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action221( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action331( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action478< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Parameter, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action220( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action332( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action479< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action221( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action332( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action480< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action169( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action472( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action481< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action170( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action472( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action482< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action169( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action473( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action483< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action170( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action473( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action484< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, Vec, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action169( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action474( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action485< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action170( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action474( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action486< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, Vec, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action169( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action475( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action487< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action170( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action475( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action488< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action171( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action480( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action489< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action480( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action490< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action171( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action481( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action491< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action481( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action492< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action171( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action482( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action493< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action482( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action494< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action171( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action483( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action495< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::option::Option>>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action483( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action496< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action171( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action484( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action497< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action484( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action498< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action171( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action485( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action499< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action485( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action500< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, ::std::option::Option>>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action171( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action486( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action501< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action486( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action502< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, ::std::option::Option>>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action171( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action487( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action503< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::option::Option>>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action172( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action487( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action504< + 'input, +>( + text: &'input str, + ___0: (usize, WhereClause, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action194( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action335( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action505< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec> +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action195( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action335( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action506< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, WhereClause, usize), +) -> Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action194( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action336( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action507< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), +) -> Vec> +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action195( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action336( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action508< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action488( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action509< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action488( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action510< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action489( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action511< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action489( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action512< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action490( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action513< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action490( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action514< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action167( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action491( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action515< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action491( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action516< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action492( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action517< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action492( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action518< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action493( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action519< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action493( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action520< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action494( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action521< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action494( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action522< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.0.clone(); + let ___end0 = ___3.2.clone(); + let ___temp0 = ___action167( + text, + ___3, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action495( + text, + ___0, + ___1, + ___2, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action523< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___2.2.clone(); + let ___end0 = ___3.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action495( + text, + ___0, + ___1, + ___2, + ___temp0, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action524< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___6.0.clone(); + let ___end0 = ___6.2.clone(); + let ___temp0 = ___action167( + text, + ___6, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action496( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___temp0, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action525< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___5.2.clone(); + let ___end0 = ___6.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action496( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___temp0, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action526< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action497( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action527< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action497( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action528< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action498( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action529< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action498( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action530< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action499( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action531< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action499( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action532< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___6.0.clone(); + let ___end0 = ___6.2.clone(); + let ___temp0 = ___action167( + text, + ___6, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action500( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___temp0, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action533< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___5.2.clone(); + let ___end0 = ___6.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action500( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___temp0, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action534< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action501( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action535< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action501( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action536< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___5.0.clone(); + let ___end0 = ___5.2.clone(); + let ___temp0 = ___action167( + text, + ___5, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action502( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action537< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.2.clone(); + let ___end0 = ___5.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action502( + text, + ___0, + ___1, + ___2, + ___3, + ___4, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action538< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___4.0.clone(); + let ___end0 = ___4.2.clone(); + let ___temp0 = ___action167( + text, + ___4, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action503( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action539< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___3.2.clone(); + let ___end0 = ___4.0.clone(); + let ___temp0 = ___action168( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action503( + text, + ___0, + ___1, + ___2, + ___3, + ___temp0, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action540< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action131( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action349( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action541< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action349( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action542< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action131( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action350( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action543< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action350( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action544< + 'input, +>( + text: &'input str, + ___0: (usize, Atom, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action131( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action345( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action545< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action345( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action546< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Atom, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action131( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action346( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action547< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action346( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action548< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action131( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action298( + text, + ___0, + ___temp0, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action549< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action298( + text, + ___0, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action550< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Atom, usize), + ___2: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action131( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action299( + text, + ___0, + ___temp0, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action551< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, TypeRef, usize), +) -> TypeRef +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action132( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action299( + text, + ___0, + ___temp0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action552< + 'input, +>( + text: &'input str, + ___0: (usize, MatchItem, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action249( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action353( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action553< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action250( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action353( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action554< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, MatchItem, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action249( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action354( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action555< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action250( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action354( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action556< + 'input, +>( + text: &'input str, + ___0: (usize, NonterminalString, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action225( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action357( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action557< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action226( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action357( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action558< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, NonterminalString, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action225( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action358( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action559< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action226( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action358( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action560< + 'input, +>( + text: &'input str, + ___0: (usize, Pattern, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action259( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action361( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action561< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec> +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action260( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action361( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action562< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, Pattern, usize), +) -> Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action259( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action362( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action563< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), +) -> Vec> +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action260( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action362( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action564< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action508( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action565< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action508( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action566< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action509( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action567< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action509( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action568< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action510( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action569< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action510( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action570< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action511( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action571< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action511( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action572< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action512( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action573< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action512( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action574< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action513( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action575< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action513( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action576< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action514( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action577< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action514( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action578< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action515( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action579< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action515( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action580< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action516( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action581< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action516( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action582< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action517( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action583< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action517( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action584< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action518( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action585< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action518( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action586< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action519( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action587< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action519( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action588< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action520( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action589< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action520( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action590< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action521( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action591< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action521( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action592< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action522( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action593< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action522( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action594< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action523( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action595< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action523( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action596< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action524( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action597< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action524( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action598< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action525( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action599< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action525( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action600< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action526( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action601< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action526( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action602< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action527( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action603< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action527( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action604< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action528( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action605< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action528( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action606< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action529( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action607< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action529( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action608< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action530( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action609< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action530( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action610< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action531( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action611< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action531( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action612< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action532( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action613< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action532( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action614< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action533( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action615< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action533( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action616< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action534( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action617< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action534( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action618< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action535( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action619< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action535( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action620< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action536( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action621< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action536( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action622< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action537( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action623< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action537( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action624< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action538( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action625< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action538( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action626< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action179( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action539( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action627< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action180( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action539( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action628< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> ExprSymbol +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action134( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action48( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action629< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> ExprSymbol +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action135( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action48( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action630< + 'input, +>( + text: &'input str, + ___0: (usize, Symbol, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action235( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action365( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action631< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action236( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action365( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action632< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Symbol, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action235( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action366( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action633< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action236( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action366( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action634< + 'input, +>( + text: &'input str, + ___0: (usize, TypeBound, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action205( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action369( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action635< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec> +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action206( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action369( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action636< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, TypeBound, usize), +) -> Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action205( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action370( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action637< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), +) -> Vec> +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action206( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action370( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action638< + 'input, +>( + text: &'input str, + ___0: (usize, TypeBoundParameter, usize), +) -> Vec> +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action215( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action373( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action639< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec> +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action216( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action373( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action640< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), + ___1: (usize, TypeBoundParameter, usize), +) -> Vec> +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action215( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action374( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action641< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec>, usize), +) -> Vec> +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action216( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action374( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action642< + 'input, +>( + text: &'input str, + ___0: (usize, TypeParameter, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action189( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action377( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action643< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action190( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action377( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action644< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeParameter, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action189( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action378( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action645< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action190( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action378( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action646< + 'input, +>( + text: &'input str, + ___0: (usize, TypeRef, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action210( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action381( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action647< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action211( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action381( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action648< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeRef, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action210( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action382( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action649< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action211( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action382( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action650< + 'input, +>( + text: &'input str, + ___0: (usize, TypeRef, usize), +) -> Vec +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action240( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action385( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action651< + 'input, +>( + text: &'input str, + ___lookbehind: &usize, + ___lookahead: &usize, +) -> Vec +{ + let ___start0 = ___lookbehind.clone(); + let ___end0 = ___lookahead.clone(); + let ___temp0 = ___action241( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action385( + text, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action652< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, TypeRef, usize), +) -> Vec +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action240( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action386( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action653< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), +) -> Vec +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action241( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action386( + text, + ___0, + ___temp0, + ) +} + +#[allow(unused_variables)] +fn ___action654< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action564( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action655< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action564( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action656< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action565( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action657< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action565( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action658< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action566( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action659< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action566( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action660< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action567( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action661< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action567( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action662< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action568( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action663< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action568( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action664< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action569( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action665< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action569( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action666< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action570( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action667< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action570( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action668< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action571( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action669< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action571( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action670< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action572( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action671< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action572( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action672< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action573( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action673< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action573( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action674< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action574( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action675< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action574( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action676< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action575( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action677< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action575( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action678< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec>, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action576( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action679< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action576( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action680< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action577( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action681< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action577( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action682< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action578( + text, + ___temp0, + ___0, + ___1, + ) +} + +#[allow(unused_variables)] +fn ___action683< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action578( + text, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action684< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action579( + text, + ___0, + ___temp0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action685< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action579( + text, + ___0, + ___temp0, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action686< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action580( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action687< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action580( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action688< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action581( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action689< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action581( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action690< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action582( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action691< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action582( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action692< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action583( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action693< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action583( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action694< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action584( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action695< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action584( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action696< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action585( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action697< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action585( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action698< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action586( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action699< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action586( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action700< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action587( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action701< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action587( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action702< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action588( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action703< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action588( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action704< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action589( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action705< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action589( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action706< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action590( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action707< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action590( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action708< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action591( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action709< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action591( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action710< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Vec>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action592( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action711< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action592( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action712< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action593( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action713< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action593( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action714< + 'input, +>( + text: &'input str, + ___0: (usize, Tok<'input>, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action594( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action715< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action594( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action716< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action595( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action717< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action595( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action718< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action596( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action719< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action596( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action720< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action597( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action721< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action597( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action722< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action598( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action723< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action598( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action724< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action599( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action725< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action599( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action726< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action600( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action727< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action600( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action728< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action601( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action729< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action601( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action730< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action602( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action731< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action602( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action732< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action603( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action733< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action603( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action734< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action604( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action735< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action604( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action736< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action605( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action737< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action605( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action738< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action606( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action739< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action606( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action740< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action607( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action741< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action607( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action742< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action608( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action743< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action608( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action744< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action609( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action745< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action609( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action746< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action610( + text, + ___temp0, + ___0, + ___1, + ___2, + ) +} + +#[allow(unused_variables)] +fn ___action747< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action610( + text, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action748< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action611( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action749< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action611( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action750< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action612( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action751< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action612( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action752< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action613( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action753< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Vec>, usize), + ___7: (usize, Tok<'input>, usize), + ___8: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action613( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ___8, + ) +} + +#[allow(unused_variables)] +fn ___action754< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action614( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action755< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action614( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action756< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action615( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action757< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action615( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action758< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action616( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action759< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action616( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action760< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action617( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action761< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action617( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action762< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action618( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action763< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action618( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action764< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action619( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action765< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action619( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action766< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action620( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action767< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action620( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action768< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action621( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action769< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Vec>, usize), + ___6: (usize, Tok<'input>, usize), + ___7: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action621( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ___7, + ) +} + +#[allow(unused_variables)] +fn ___action770< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action622( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action771< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action622( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action772< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action623( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action773< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action623( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action774< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Vec>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action624( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action775< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action624( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action776< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Vec>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action625( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ___5, + ) +} + +#[allow(unused_variables)] +fn ___action777< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Vec>, usize), + ___5: (usize, Tok<'input>, usize), + ___6: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action625( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ___6, + ) +} + +#[allow(unused_variables)] +fn ___action778< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, Tok<'input>, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action626( + text, + ___temp0, + ___0, + ___1, + ___2, + ___3, + ) +} + +#[allow(unused_variables)] +fn ___action779< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.0.clone(); + let ___end0 = ___0.2.clone(); + let ___temp0 = ___action178( + text, + ___0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action626( + text, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action780< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, Tok<'input>, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___0.2.clone(); + let ___end0 = ___1.0.clone(); + let ___temp0 = ___action177( + text, + &___start0, + &___end0, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action627( + text, + ___0, + ___temp0, + ___1, + ___2, + ___3, + ___4, + ) +} + +#[allow(unused_variables)] +fn ___action781< + 'input, +>( + text: &'input str, + ___0: (usize, ::std::vec::Vec, usize), + ___1: (usize, ::std::vec::Vec, usize), + ___2: (usize, ::std::vec::Vec, usize), + ___3: (usize, Tok<'input>, usize), + ___4: (usize, Tok<'input>, usize), + ___5: (usize, ::std::vec::Vec, usize), +) -> Grammar +{ + let ___start0 = ___1.0.clone(); + let ___end0 = ___1.2.clone(); + let ___temp0 = ___action178( + text, + ___1, + ); + let ___temp0 = (___start0, ___temp0, ___end0); + ___action627( + text, + ___0, + ___temp0, + ___2, + ___3, + ___4, + ___5, + ) +} + +pub trait ___ToTriple<'input, > { + type Error; + fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),Self::Error>; +} + +impl<'input, > ___ToTriple<'input, > for (usize, Tok<'input>, usize) { + type Error = tok::Error; + fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),tok::Error> { + Ok(value) + } +} +impl<'input, > ___ToTriple<'input, > for Result<(usize, Tok<'input>, usize),tok::Error> { + type Error = tok::Error; + fn to_triple(value: Self) -> Result<(usize,Tok<'input>,usize),tok::Error> { + value + } +} diff --git a/third_party/rust/lalrpop-snap/src/parser/mod.rs b/third_party/rust/lalrpop-snap/src/parser/mod.rs new file mode 100644 index 000000000000..de42629649d7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/parser/mod.rs @@ -0,0 +1,54 @@ +use grammar::parse_tree::*; +use grammar::pattern::*; +use lalrpop_util; +use tok; + +#[allow(dead_code)] +mod lrgrammar; + +#[cfg(test)] +mod test; + +pub type ParseError<'input> = lalrpop_util::ParseError, tok::Error>; + +pub fn parse_grammar<'input>(input: &'input str) -> Result> { + let tokenizer = tok::Tokenizer::new(input, 0); + let mut grammar = try!(lrgrammar::GrammarParser::new().parse(input, tokenizer)); + + // find a unique prefix that does not appear anywhere in the input + while input.contains(&grammar.prefix) { + grammar.prefix.push('_'); + } + + Ok(grammar) +} + +fn parse_pattern<'input>( + input: &'input str, + offset: usize, +) -> Result, ParseError<'input>> { + let tokenizer = tok::Tokenizer::new(input, offset); + lrgrammar::PatternParser::new().parse(input, tokenizer) +} + +fn parse_match_mapping<'input>( + input: &'input str, + offset: usize, +) -> Result> { + let tokenizer = tok::Tokenizer::new(input, offset); + lrgrammar::MatchMappingParser::new().parse(input, tokenizer) +} + +#[cfg(test)] +pub fn parse_type_ref<'input>(input: &'input str) -> Result> { + let tokenizer = tok::Tokenizer::new(input, 0); + lrgrammar::TypeRefParser::new().parse(input, tokenizer) +} + +#[cfg(test)] +pub fn parse_where_clauses<'input>( + input: &'input str, +) -> Result>, ParseError<'input>> { + let tokenizer = tok::Tokenizer::new(input, 0); + lrgrammar::GrammarWhereClausesParser::new().parse(input, tokenizer) +} diff --git a/third_party/rust/lalrpop-snap/src/parser/test.rs b/third_party/rust/lalrpop-snap/src/parser/test.rs new file mode 100644 index 000000000000..adbaea4a2957 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/parser/test.rs @@ -0,0 +1,151 @@ +use parser; +use grammar::parse_tree::{GrammarItem, MatchItem}; + +#[test] +fn match_block() { + let blocks = vec![ + r#"grammar; match { _ }"#, // Minimal + r#"grammar; match { _ } else { _ }"#, // Doesn't really make sense, but should be allowed + r#"grammar; match { "abc" }"#, // Single token + r#"grammar; match { "abc" => "QUOTED" }"#, // Single token with quoted alias + r#"grammar; match { "abc" => UNQUOTED }"#, // Single token with unquoted alias + r#"grammar; match { r"(?i)begin" => BEGIN }"#, // Regex + r#"grammar; match { "abc", "def" => "DEF", _ } else { "foo" => BAR, r"(?i)begin" => BEGIN, _ }"#, // Complex + r#"grammar; match { "abc" } else { "def" } else { _ }"#, // Multi-chain + ]; + + for block in blocks { + let parsed = parser::parse_grammar(&block) + .expect(format!("Invalid grammar; grammar={}", block).as_str()); + let first_item = parsed.items.first().expect("has item"); + match *first_item { + GrammarItem::MatchToken(_) => (), // OK + _ => panic!("expected MatchToken, but was {:?}", first_item), + } + } +} + +#[test] +fn match_complex() { + let parsed = parser::parse_grammar( + r#" + grammar; + match { + r"(?i)begin" => "BEGIN", + r"(?i)end" => "END", + } else { + r"[a-zA-Z_][a-zA-Z0-9_]*" => IDENTIFIER, + } else { + "other", + _ + } +"#, + ).unwrap(); + + // We could probably make some nice system for testing this + let first_item = parsed.items.first().expect("has item"); + match *first_item { + GrammarItem::MatchToken(ref data) => { + // match { ... } + let contents0 = data.contents.get(0).unwrap(); + // r"(?i)begin" => "BEGIN" + let item00 = contents0.items.get(0).unwrap(); + match *item00 { + MatchItem::Mapped(ref sym, ref mapping, _) => { + assert_eq!(format!("{:?}", sym), "r#\"(?i)begin\"#"); + assert_eq!(format!("{}", mapping), "\"BEGIN\""); + } + _ => panic!("expected MatchItem::Mapped, but was: {:?}", item00), + }; + // r"(?i)end" => "END", + let item01 = contents0.items.get(1).unwrap(); + match *item01 { + MatchItem::Mapped(ref sym, ref mapping, _) => { + assert_eq!(format!("{:?}", sym), "r#\"(?i)end\"#"); + assert_eq!(format!("{}", mapping), "\"END\""); + } + _ => panic!("expected MatchItem::Mapped, but was: {:?}", item00), + }; + // else { ... } + let contents1 = data.contents.get(1).unwrap(); + // r"[a-zA-Z_][a-zA-Z0-9_]*" => IDENTIFIER, + let item10 = contents1.items.get(0).unwrap(); + match *item10 { + MatchItem::Mapped(ref sym, ref mapping, _) => { + assert_eq!(format!("{:?}", sym), "r#\"[a-zA-Z_][a-zA-Z0-9_]*\"#"); + assert_eq!(format!("{}", mapping), "IDENTIFIER"); + } + _ => panic!("expected MatchItem::Mapped, but was: {:?}", item10), + }; + // else { ... } + let contents2 = data.contents.get(2).unwrap(); + // "other", + let item20 = contents2.items.get(0).unwrap(); + match *item20 { + MatchItem::Unmapped(ref sym, _) => { + assert_eq!(format!("{:?}", sym), "\"other\""); + } + _ => panic!("expected MatchItem::Unmapped, but was: {:?}", item20), + }; + // _ + let item21 = contents2.items.get(1).unwrap(); + match *item21 { + MatchItem::CatchAll(_) => (), + _ => panic!("expected MatchItem::CatchAll, but was: {:?}", item20), + }; + } + _ => panic!("expected MatchToken, but was: {:?}", first_item), + } +} + +#[test] +fn where_clauses() { + let clauses = vec![ + "where T: Debug", + "where T: Debug + Display", + "where T: std::ops::Add", + "where T: IntoIterator", + "where T: 'a", + "where 'a: 'b", + "where for<'a> &'a T: Debug", + "where T: for<'a> Flobbles<'a>", + "where T: FnMut(usize)", + "where T: FnMut(usize, bool)", + "where T: FnMut() -> bool", + "where T: for<'a> FnMut(&'a usize)", + "where T: Debug, U: Display", + ]; + + for santa in clauses { + assert!( + parser::parse_where_clauses(santa).is_ok(), + "should parse where clauses: {}", + santa + ); + } +} + +#[test] +fn grammars_with_where_clauses() { + let grammars = vec![ + r###" +grammar where T: StaticMethods; +"###, + r###" +grammar(methods: &mut T) where T: MutMethods; +"###, + r###" +grammar<'input, T>(methods: &mut T) where T: 'input + Debug + MutMethods; +"###, + r###" +grammar(methods: &mut F) where F: for<'a> FnMut(&'a usize) -> bool; +"###, + r###" +grammar(logger: &mut F) where F: for<'a> FnMut(&'a str); +"###, + ]; + + for g in grammars { + assert!(parser::parse_grammar(g).is_ok()); + } +} diff --git a/third_party/rust/lalrpop-snap/src/rust/mod.rs b/third_party/rust/lalrpop-snap/src/rust/mod.rs new file mode 100644 index 000000000000..928fba792657 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/rust/mod.rs @@ -0,0 +1,191 @@ +//! Simple Rust AST. This is what the various code generators create, +//! which then gets serialized. + +use grammar::repr::Grammar; +use grammar::parse_tree::Visibility; +use tls::Tls; +use std::fmt; +use std::io::{self, Write}; + +macro_rules! rust { + ($w:expr, $($args:tt)*) => { + try!(($w).writeln(&::std::fmt::format(format_args!($($args)*)))) + } +} + +/// A wrapper around a Write instance that handles indentation for +/// Rust code. It expects Rust code to be written in a stylized way, +/// with lots of braces and newlines (example shown here with no +/// indentation). Over time maybe we can extend this to make things +/// look prettier, but seems like...meh, just run it through some +/// rustfmt tool. +/// +/// ```ignore +/// fn foo( +/// arg1: Type1, +/// arg2: Type2, +/// arg3: Type3) +/// -> ReturnType +/// { +/// match foo { +/// Variant => { +/// } +/// } +/// } +/// ``` +pub struct RustWrite { + write: W, + indent: usize, +} + +const TAB: usize = 4; + +impl RustWrite { + pub fn new(w: W) -> RustWrite { + RustWrite { + write: w, + indent: 0, + } + } + + pub fn into_inner(self) -> W { + self.write + } + + fn write_indentation(&mut self) -> io::Result<()> { + write!(self.write, "{0:1$}", "", self.indent) + } + + fn write_indented(&mut self, out: &str) -> io::Result<()> { + writeln!(self.write, "{0:1$}{2}", "", self.indent, out) + } + + pub fn write_table_row(&mut self, iterable: I) -> io::Result<()> + where + I: IntoIterator, + C: fmt::Display, + { + if Tls::session().emit_comments { + for (i, comment) in iterable { + try!(self.write_indentation()); + try!(writeln!(self.write, "{}, {}", i, comment)); + } + } else { + try!(self.write_indentation()); + let mut first = true; + for (i, _comment) in iterable { + if !first { + try!(write!(self.write, " ")); + } + try!(write!(self.write, "{},", i)); + first = false; + } + } + writeln!(self.write, "") + } + + pub fn writeln(&mut self, out: &str) -> io::Result<()> { + let buf = out.as_bytes(); + + // pass empty lines through with no indentation + if buf.is_empty() { + return self.write.write_all("\n".as_bytes()); + } + + let n = buf.len() - 1; + + // If the line begins with a `}`, `]`, or `)`, first decrement the indentation. + if buf[0] == ('}' as u8) || buf[0] == (']' as u8) || buf[0] == (')' as u8) { + self.indent -= TAB; + } + + try!(self.write_indented(out)); + + // Detect a line that ends in a `{` or `(` and increase indentation for future lines. + if buf[n] == ('{' as u8) || buf[n] == ('[' as u8) || buf[n] == ('(' as u8) { + self.indent += TAB; + } + + Ok(()) + } + + pub fn write_fn_header( + &mut self, + grammar: &Grammar, + visibility: &Visibility, + name: String, + type_parameters: Vec, + first_parameter: Option, + parameters: Vec, + return_type: String, + where_clauses: Vec, + ) -> io::Result<()> { + rust!(self, "{}fn {}<", visibility, name); + + for type_parameter in &grammar.type_parameters { + rust!(self, "{0:1$}{2},", "", TAB, type_parameter); + } + + for type_parameter in type_parameters { + rust!(self, "{0:1$}{2},", "", TAB, type_parameter); + } + + rust!(self, ">("); + + if let Some(param) = first_parameter { + rust!(self, "{},", param); + } + for parameter in &grammar.parameters { + rust!(self, "{}: {},", parameter.name, parameter.ty); + } + + for parameter in ¶meters { + rust!(self, "{},", parameter); + } + + if !grammar.where_clauses.is_empty() || !where_clauses.is_empty() { + rust!(self, ") -> {} where", return_type); + + for where_clause in &grammar.where_clauses { + rust!(self, " {},", where_clause); + } + + for where_clause in &where_clauses { + rust!(self, " {},", where_clause); + } + } else { + rust!(self, ") -> {}", return_type); + } + + Ok(()) + } + + pub fn write_module_attributes(&mut self, grammar: &Grammar) -> io::Result<()> { + for attribute in grammar.module_attributes.iter() { + rust!(self, "{}", attribute); + } + Ok(()) + } + + pub fn write_uses(&mut self, super_prefix: &str, grammar: &Grammar) -> io::Result<()> { + // things the user wrote + for u in &grammar.uses { + if u.starts_with("super::") { + rust!(self, "use {}{};", super_prefix, u); + } else { + rust!(self, "use {};", u); + } + } + + self.write_standard_uses(&grammar.prefix) + } + + pub fn write_standard_uses(&mut self, prefix: &str) -> io::Result<()> { + // Stuff that we plan to use. + // Occasionally we happen to not use it after all, hence the allow. + rust!(self, "#[allow(unused_extern_crates)]"); + rust!(self, "extern crate lalrpop_util as {}lalrpop_util;", prefix); + + Ok(()) + } +} diff --git a/third_party/rust/lalrpop-snap/src/session.rs b/third_party/rust/lalrpop-snap/src/session.rs new file mode 100644 index 000000000000..495157c5293d --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/session.rs @@ -0,0 +1,154 @@ +//! Internal configuration and session-specific settings. This is similar +//! to `configuration::Configuration`, but it is not exported outside the +//! crate. Note that all fields are public and so forth for convenience. + +use std::default::Default; +use std::path; +use style::{self, Style}; +use log::{Level, Log}; + +// These two, ubiquitous types are defined here so that their fields can be private +// across crate, but visible within the crate: + +#[derive(Copy, Clone)] +pub enum ColorConfig { + /// Use ANSI colors. + Yes, + + /// Do NOT use ANSI colors. + No, + + /// Use them if we detect a TTY output (default). + IfTty, +} + +/// Various options to control debug output. Although this struct is +/// technically part of LALRPOP's exported interface, it is not +/// considered part of the semver guarantees as end-users are not +/// expected to use it. +#[derive(Clone)] +pub struct Session { + pub log: Log, + + pub force_build: bool, + + pub in_dir: Option, + + pub out_dir: Option, + + /// Emit comments in generated code explaining the states and so + /// forth. + pub emit_comments: bool, + + /// Emit report file about generated code + pub emit_report: bool, + + pub color_config: ColorConfig, + + /// Stop after you find `max_errors` errors. If this value is 0, + /// report *all* errors. Note that we MAY always report more than + /// this value if we so choose. + pub max_errors: usize, + + // Styles to use when formatting error reports + /// Applied to the heading in a message. + pub heading: Style, + + /// Applied to symbols in an ambiguity report (where there is no cursor) + pub ambig_symbols: Style, + + /// Applied to symbols before the cursor in a local ambiguity report + pub observed_symbols: Style, + + /// Applied to symbols at the cursor in a local ambiguity report, + /// if it is a non-terminal + pub cursor_symbol: Style, + + /// Applied to symbols after the cursor in a local ambiguity report + pub unobserved_symbols: Style, + + /// Applied to terminal symbols, in addition to the above styles + pub terminal_symbol: Style, + + /// Applied to nonterminal symbols, in addition to the above styles + pub nonterminal_symbol: Style, + + /// Style to use when printing "Hint:" + pub hint_text: Style, + + /// Unit testing (lalrpop-test) configuration + pub unit_test: bool, +} + +impl Session { + pub fn new() -> Session { + Session { + log: Log::new(Level::Informative), + in_dir: None, + out_dir: None, + force_build: false, + emit_comments: false, + emit_report: false, + color_config: ColorConfig::default(), + max_errors: 1, + heading: style::FG_WHITE.with(style::BOLD), + ambig_symbols: style::FG_WHITE, + observed_symbols: style::FG_BRIGHT_GREEN, + cursor_symbol: style::FG_BRIGHT_WHITE, + unobserved_symbols: style::FG_BRIGHT_RED, + terminal_symbol: style::BOLD, + nonterminal_symbol: style::DEFAULT, + hint_text: style::FG_BRIGHT_MAGENTA.with(style::BOLD), + unit_test: false, + } + } + + /// A session suitable for use in testing. + #[cfg(test)] + pub fn test() -> Session { + Session { + log: Log::new(Level::Debug), + in_dir: None, + out_dir: None, + force_build: false, + emit_comments: false, + emit_report: false, + color_config: ColorConfig::IfTty, + max_errors: 1, + heading: Style::new(), + ambig_symbols: Style::new(), + observed_symbols: Style::new(), + cursor_symbol: Style::new(), + unobserved_symbols: Style::new(), + terminal_symbol: Style::new(), + nonterminal_symbol: Style::new(), + hint_text: Style::new(), + unit_test: true, + } + } + + /// Indicates whether we should stop after `actual_errors` number + /// of errors have been reported. + pub fn stop_after(&self, actual_errors: usize) -> bool { + self.max_errors != 0 && actual_errors >= self.max_errors + } + + pub fn log(&self, level: Level, message: M) + where + M: FnOnce() -> String, + { + self.log.log(level, message) + } +} + +impl Default for Session { + fn default() -> Self { + Session::new() + } +} + +impl Default for ColorConfig { + fn default() -> Self { + ColorConfig::IfTty + } +} diff --git a/third_party/rust/lalrpop-snap/src/test_util.rs b/third_party/rust/lalrpop-snap/src/test_util.rs new file mode 100644 index 000000000000..d4e2505bdee7 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/test_util.rs @@ -0,0 +1,68 @@ +use diff; +use grammar::parse_tree as pt; +use grammar::repr as r; +use normalize::NormError; +use regex::Regex; +use std::fmt::{Debug, Error, Formatter}; + +thread_local! { + static SPAN: Regex = + Regex::new(r"Span\([0-9 ,]*\)").unwrap() +} + +struct ExpectedDebug<'a>(&'a str); + +impl<'a> Debug for ExpectedDebug<'a> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + write!(fmt, "{}", self.0) + } +} + +pub fn expect_debug(actual: D, expected: &str) { + compare( + ExpectedDebug(&format!("{:#?}", actual)), + ExpectedDebug(expected), + ) +} + +pub fn compare(actual: D, expected: E) { + let actual_s = format!("{:?}", actual); + let expected_s = format!("{:?}", expected); + + SPAN.with(|span| { + let actual_s = span.replace_all(&actual_s, "Span(..)"); + let expected_s = span.replace_all(&expected_s, "Span(..)"); + if actual_s != expected_s { + let actual_s = format!("{:#?}", actual); + let expected_s = format!("{:#?}", expected); + + for diff in diff::lines(&actual_s, &expected_s) { + match diff { + diff::Result::Right(r) => println!("- {}", r), + diff::Result::Left(l) => println!("+ {}", l), + diff::Result::Both(l, _) => println!(" {}", l), + } + } + + assert!(false); + } + }); +} + +pub fn normalized_grammar(s: &str) -> r::Grammar { + ::normalize::normalize_without_validating(::parser::parse_grammar(s).unwrap()).unwrap() +} + +pub fn check_norm_err(expected_err: &str, span: &str, err: NormError) { + let expected_err = Regex::new(expected_err).unwrap(); + let start_index = span.find("~").unwrap(); + let end_index = span.rfind("~").unwrap() + 1; + assert!(start_index <= end_index); + assert_eq!(err.span, pt::Span(start_index, end_index)); + assert!( + expected_err.is_match(&err.message), + "unexpected error text `{}`, which did not match regular expression `{}`", + err.message, + expected_err + ); +} diff --git a/third_party/rust/lalrpop-snap/src/tls/mod.rs b/third_party/rust/lalrpop-snap/src/tls/mod.rs new file mode 100644 index 000000000000..5fb32fc741c6 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/tls/mod.rs @@ -0,0 +1,77 @@ +//! Certain bits of environmental state are too annoying to thread +//! around everywhere, so pack them into TLS. + +use file_text::FileText; +use session::Session; +use std::cell::RefCell; +use std::rc::Rc; + +pub struct Tls { + _dummy: (), +} + +#[derive(Clone)] +struct TlsFields { + session: Rc, + file_text: Rc, +} + +thread_local! { + static THE_TLS_FIELDS: RefCell> = + RefCell::new(None) +} + +impl Tls { + #[cfg(test)] + pub fn test() -> Tls { + Self::install(Rc::new(Session::test()), Rc::new(FileText::test())) + } + + #[cfg(test)] + pub fn test_string(text: &str) -> Tls { + use std::path::PathBuf; + Self::install( + Rc::new(Session::test()), + Rc::new(FileText::new(PathBuf::from("tmp.txt"), String::from(text))), + ) + } + + /// Installs `Tls` and returns a placeholder value. When this + /// value is dropped, the `Tls` entries will be removed. To access + /// the values from `Tls`, call `Tls::session()` or + /// `Tls::file_text()`. + pub fn install(session: Rc, file_text: Rc) -> Tls { + let fields = TlsFields { + session: session, + file_text: file_text, + }; + + THE_TLS_FIELDS.with(|s| { + let mut s = s.borrow_mut(); + assert!(s.is_none()); + *s = Some(fields.clone()); + }); + + Tls { _dummy: () } + } + + fn fields() -> TlsFields { + THE_TLS_FIELDS.with(|s| s.borrow().clone().expect("TLS is not installed")) + } + + pub fn session() -> Rc { + Self::fields().session + } + + pub fn file_text() -> Rc { + Self::fields().file_text + } +} + +impl Drop for Tls { + fn drop(&mut self) { + THE_TLS_FIELDS.with(|s| { + *s.borrow_mut() = None; + }) + } +} diff --git a/third_party/rust/lalrpop-snap/src/tok/mod.rs b/third_party/rust/lalrpop-snap/src/tok/mod.rs new file mode 100644 index 000000000000..8aa288558260 --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/tok/mod.rs @@ -0,0 +1,738 @@ +//! A tokenizer for use in LALRPOP itself. + +use std::str::CharIndices; +use unicode_xid::UnicodeXID; + +use self::ErrorCode::*; +use self::Tok::*; + +#[cfg(test)] +mod test; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Error { + pub location: usize, + pub code: ErrorCode, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ErrorCode { + UnrecognizedToken, + UnterminatedEscape, + UnterminatedStringLiteral, + UnterminatedCharacterLiteral, + UnterminatedAttribute, + UnterminatedCode, + ExpectedStringLiteral, +} + +fn error(c: ErrorCode, l: usize) -> Result { + Err(Error { + location: l, + code: c, + }) +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Tok<'input> { + // Keywords; + Enum, + Extern, + Grammar, + Match, + Else, + If, + Mut, + Pub, + Type, + Where, + For, + + // Special keywords: these are accompanied by a series of + // uninterpreted strings representing imports and stuff. + Use(&'input str), + + // Identifiers of various kinds: + Escape(&'input str), + Id(&'input str), + MacroId(&'input str), // identifier followed immediately by `<` + Lifetime(&'input str), // includes the `'` + StringLiteral(&'input str), // excludes the `"` + CharLiteral(&'input str), // excludes the `'` + RegexLiteral(&'input str), // excludes the `r"` and `"` + + // Symbols: + Ampersand, + BangEquals, + BangTilde, + Colon, + ColonColon, + Comma, + DotDot, + Equals, + EqualsEquals, + EqualsGreaterThanCode(&'input str), + EqualsGreaterThanQuestionCode(&'input str), + EqualsGreaterThanLookahead, + EqualsGreaterThanLookbehind, + Hash, + GreaterThan, + LeftBrace, + LeftBracket, + LeftParen, + LessThan, + Lookahead, // @L + Lookbehind, // @R + MinusGreaterThan, + Plus, + Question, + RightBrace, + RightBracket, + RightParen, + Semi, + Star, + TildeTilde, + Underscore, + Bang, + ShebangAttribute(&'input str), // #![...] +} + +pub struct Tokenizer<'input> { + text: &'input str, + chars: CharIndices<'input>, + lookahead: Option<(usize, char)>, + shift: usize, +} + +pub type Spanned = (usize, T, usize); + +const KEYWORDS: &'static [(&'static str, Tok<'static>)] = &[ + ("enum", Enum), + ("extern", Extern), + ("grammar", Grammar), + ("match", Match), + ("else", Else), + ("if", If), + ("mut", Mut), + ("pub", Pub), + ("type", Type), + ("where", Where), + ("for", For), +]; + +/* + * Helper for backtracking. + */ +macro_rules! first { + ($this:expr, $action:expr, $fallback:expr) => { + { + let fallback_state = ($this.chars.clone(), $this.lookahead); + let result = $action; + match result { + Ok(_) => { + Some(result) + } + _ => { + $this.chars = fallback_state.0; + $this.lookahead = fallback_state.1; + Some($fallback) + } + } + } + } +} + +macro_rules! try_opt { + ($e:expr, $err:expr) => { + { + let r = $e; + match r { + Some(Ok(val)) => val, + Some(Err(err)) => return Err(err), + None => return $err, + } + } + } +} + +impl<'input> Tokenizer<'input> { + pub fn new(text: &'input str, shift: usize) -> Tokenizer<'input> { + let mut t = Tokenizer { + text: text, + chars: text.char_indices(), + lookahead: None, + shift: shift, + }; + t.bump(); + t + } + + fn shebang_attribute(&mut self, idx0: usize) -> Result>, Error> { + try_opt!( + self.expect_char('!'), + error(ErrorCode::UnrecognizedToken, idx0) + ); + try_opt!( + self.expect_char('['), + error(ErrorCode::UnterminatedAttribute, idx0) + ); + let mut sq_bracket_counter = 1; + while let Some((idx1, c)) = self.lookahead { + match c { + '[' => { + self.bump(); + sq_bracket_counter += 1 + }, + ']' => { + self.bump(); + sq_bracket_counter -= 1; + match sq_bracket_counter { + 0 => { + let idx2 = idx1 + 1; + let data = &self.text[idx0..idx2]; + self.bump(); + return Ok((idx0, ShebangAttribute(data), idx2)); + }, + n if n < 0 => return error(UnrecognizedToken, idx0), + _ => (), + } + }, + '"' => { + self.bump(); + let _ = try!(self.string_literal(idx1)); + }, + '\n' => return error(UnrecognizedToken, idx0), + _ => { + self.bump(); + }, + } + } + error(UnrecognizedToken, idx0) + } + + fn next_unshifted(&mut self) -> Option>, Error>> { + loop { + return match self.lookahead { + Some((idx0, '&')) => { + self.bump(); + Some(Ok((idx0, Ampersand, idx0 + 1))) + }, + Some((idx0, '!')) => match self.bump() { + Some((idx1, '=')) => { + self.bump(); + Some(Ok((idx0, BangEquals, idx1 + 1))) + }, + Some((idx1, '~')) => { + self.bump(); + Some(Ok((idx0, BangTilde, idx1 + 1))) + }, + _ => Some(Ok((idx0, Bang, idx0 + 1))), + }, + Some((idx0, ':')) => match self.bump() { + Some((idx1, ':')) => { + self.bump(); + Some(Ok((idx0, ColonColon, idx1 + 1))) + }, + _ => Some(Ok((idx0, Colon, idx0 + 1))), + }, + Some((idx0, ',')) => { + self.bump(); + Some(Ok((idx0, Comma, idx0 + 1))) + }, + Some((idx0, '.')) => match self.bump() { + Some((idx1, '.')) => { + self.bump(); + Some(Ok((idx0, DotDot, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '=')) => match self.bump() { + Some((idx1, '=')) => { + self.bump(); + Some(Ok((idx0, EqualsEquals, idx1 + 1))) + }, + Some((_, '>')) => { + self.bump(); + Some(self.right_arrow(idx0)) + }, + _ => Some(Ok((idx0, Equals, idx0 + 1))), + }, + Some((idx0, '#')) => { + self.bump(); + first!(self, { self.shebang_attribute(idx0) }, { + Ok((idx0, Hash, idx0 + 1)) + }) + }, + Some((idx0, '>')) => { + self.bump(); + Some(Ok((idx0, GreaterThan, idx0 + 1))) + }, + Some((idx0, '{')) => { + self.bump(); + Some(Ok((idx0, LeftBrace, idx0 + 1))) + }, + Some((idx0, '[')) => { + self.bump(); + Some(Ok((idx0, LeftBracket, idx0 + 1))) + }, + Some((idx0, '(')) => { + self.bump(); + Some(Ok((idx0, LeftParen, idx0 + 1))) + }, + Some((idx0, '<')) => { + self.bump(); + Some(Ok((idx0, LessThan, idx0 + 1))) + }, + Some((idx0, '@')) => match self.bump() { + Some((idx1, 'L')) => { + self.bump(); + Some(Ok((idx0, Lookahead, idx1 + 1))) + }, + Some((idx1, 'R')) => { + self.bump(); + Some(Ok((idx0, Lookbehind, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '+')) => { + self.bump(); + Some(Ok((idx0, Plus, idx0 + 1))) + }, + Some((idx0, '?')) => { + self.bump(); + Some(Ok((idx0, Question, idx0 + 1))) + }, + Some((idx0, '}')) => { + self.bump(); + Some(Ok((idx0, RightBrace, idx0 + 1))) + }, + Some((idx0, ']')) => { + self.bump(); + Some(Ok((idx0, RightBracket, idx0 + 1))) + }, + Some((idx0, ')')) => { + self.bump(); + Some(Ok((idx0, RightParen, idx0 + 1))) + }, + Some((idx0, ';')) => { + self.bump(); + Some(Ok((idx0, Semi, idx0 + 1))) + }, + Some((idx0, '*')) => { + self.bump(); + Some(Ok((idx0, Star, idx0 + 1))) + }, + Some((idx0, '~')) => match self.bump() { + Some((idx1, '~')) => { + self.bump(); + Some(Ok((idx0, TildeTilde, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '`')) => { + self.bump(); + Some(self.escape(idx0)) + }, + Some((idx0, '\'')) => { + self.bump(); + Some(self.lifetimeish(idx0)) + }, + Some((idx0, '"')) => { + self.bump(); + Some(self.string_literal(idx0)) + }, + Some((idx0, '/')) => match self.bump() { + Some((_, '/')) => { + self.take_until(|c| c == '\n'); + continue; + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, '-')) => match self.bump() { + Some((idx1, '>')) => { + self.bump(); + Some(Ok((idx0, MinusGreaterThan, idx1 + 1))) + }, + _ => Some(error(UnrecognizedToken, idx0)), + }, + Some((idx0, c)) if is_identifier_start(c) => { + if c == 'r' { + // watch out for r"..." or r#"..."# strings + self.bump(); + match self.lookahead { + Some((_, '#')) | Some((_, '"')) => Some(self.regex_literal(idx0)), + _ => { + // due to the particulars of how identifierish works, + // it's ok that we already consumed the 'r', because the + // identifier will run from idx0 (the 'r') to the end + Some(self.identifierish(idx0)) + }, + } + } else { + Some(self.identifierish(idx0)) + } + }, + Some((_, c)) if c.is_whitespace() => { + self.bump(); + continue; + }, + Some((idx, _)) => Some(error(UnrecognizedToken, idx)), + None => None, + }; + } + } + + fn bump(&mut self) -> Option<(usize, char)> { + self.lookahead = self.chars.next(); + self.lookahead + } + + fn right_arrow(&mut self, idx0: usize) -> Result>, Error> { + // we've seen =>, now we have to choose between: + // + // => code + // =>? code + // =>@L + // =>@R + + match self.lookahead { + Some((_, '@')) => match self.bump() { + Some((idx2, 'L')) => { + self.bump(); + Ok((idx0, EqualsGreaterThanLookahead, idx2 + 1)) + }, + Some((idx2, 'R')) => { + self.bump(); + Ok((idx0, EqualsGreaterThanLookbehind, idx2 + 1)) + }, + _ => error(UnrecognizedToken, idx0), + }, + + Some((idx1, '?')) => { + self.bump(); + let idx2 = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[idx1 + 1..idx2]; + Ok((idx0, EqualsGreaterThanQuestionCode(code), idx2)) + }, + + Some((idx1, _)) => { + let idx2 = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[idx1..idx2]; + Ok((idx0, EqualsGreaterThanCode(code), idx2)) + }, + + None => error(UnterminatedCode, idx0), + } + } + + fn code(&mut self, idx0: usize, open_delims: &str, close_delims: &str) -> Result { + // This is the interesting case. To find the end of the code, + // we have to scan ahead, matching (), [], and {}, and looking + // for a suitable terminator: `,`, `;`, `]`, `}`, or `)`. + // Additionaly we had to take into account that we can encounter an character literal + // equal to one of delimeters. + let mut balance = 0; // number of unclosed `(` etc + loop { + if let Some((idx, c)) = self.lookahead { + if c == '"' { + self.bump(); + try!(self.string_literal(idx)); // discard the produced token + continue; + } else if c == '\'' { + self.bump(); + if self.take_lifetime_or_character_literal().is_none() { + return error(UnterminatedCharacterLiteral, idx); + } + continue; + } else if c == 'r' { + self.bump(); + if let Some((idx, '#')) = self.lookahead { + try!(self.regex_literal(idx)); + } + continue; + } else if c == '/' { + self.bump(); + if let Some((_, '/')) = self.lookahead { + self.take_until(|c| c == '\n'); + } + continue; + } else if open_delims.find(c).is_some() { + balance += 1; + } else if balance > 0 { + if close_delims.find(c).is_some() { + balance -= 1; + } + } else { + debug_assert!(balance == 0); + + if c == ',' || c == ';' || close_delims.find(c).is_some() { + // Note: we do not consume the + // terminator. The code is everything *up + // to but not including* the terminating + // `,`, `;`, etc. + return Ok(idx); + } + } + } else if balance > 0 { + // the input should not end with an + // unbalanced number of `{` etc! + return error(UnterminatedCode, idx0); + } else { + debug_assert!(balance == 0); + return Ok(self.text.len()); + } + + self.bump(); + } + } + + fn escape(&mut self, idx0: usize) -> Result>, Error> { + match self.take_until(|c| c == '`') { + Some(idx1) => { + self.bump(); // consume the '`' + let text: &'input str = &self.text[idx0 + 1..idx1]; // do not include the `` in the str + Ok((idx0, Escape(text), idx1 + 1)) + }, + None => error(UnterminatedEscape, idx0), + } + } + + fn take_lifetime_or_character_literal(&mut self) -> Option { + // try to decide if `'` is for lifetime or it oppens a character literal + + let forget_character = |p: (usize, char)| p.0; + + self.lookahead.and_then(|(_, c)| { + if c == '\\' { + // escape after `'` => it had to be character literal token, consume + // the backslash and escaped character, then consume until `'` + self.bump(); + self.bump(); + self.take_until_and_consume_terminating_character(|c: char| c == '\'') + } else { + // no escape, then we require to see next `'` or we assume it was lifetime + self.bump().and_then(|(idx, c)| { + if c == '\'' { + self.bump().map(forget_character) + } else { + Some(idx) + } + }) + } + }) + } + + fn string_or_char_literal( + &mut self, + idx0: usize, + quote: char, + variant: fn(&'input str) -> Tok<'input>, + ) -> Option>> { + let mut escape = false; + let terminate = |c: char| { + if escape { + escape = false; + false + } else if c == '\\' { + escape = true; + false + } else if c == quote { + true + } else { + false + } + }; + match self.take_until(terminate) { + Some(idx1) => { + self.bump(); // consume the closing quote + let text = &self.text[idx0 + 1..idx1]; // do not include quotes in the str + Some((idx0, variant(text), idx1 + 1)) + }, + None => None, + } + } + + fn string_literal(&mut self, idx0: usize) -> Result>, Error> { + match self.string_or_char_literal(idx0, '"', StringLiteral) { + Some(x) => Ok(x), + None => error(UnterminatedStringLiteral, idx0), + } + } + + // parses `r#"..."#` (for some number of #), starts after the `r` + // has been consumed; idx0 points at the `r` + fn regex_literal(&mut self, idx0: usize) -> Result>, Error> { + match self.take_while(|c| c == '#') { + Some(idx1) if self.lookahead == Some((idx1, '"')) => { + self.bump(); + let hashes = idx1 - idx0 - 1; + let mut state = 0; + let end_of_regex = |c: char| { + if state > 0 { + // state N>0 means: observed n-1 hashes + if c == '#' { + state += 1; + } else { + state = 0; + } + } + + // state 0 means: not yet seen the `"` + if state == 0 && c == '"' { + state = 1; + } + + state == (hashes + 1) + }; + match self.take_until(end_of_regex) { + Some(idx1) => { + // idx1 is the closing quote + self.bump(); + let start = idx0 + 2 + hashes; // skip the `r###"` + let end = idx1 - hashes; // skip the `###`. + Ok((idx0, RegexLiteral(&self.text[start..end]), idx1 + 1)) + }, + None => error(UnterminatedStringLiteral, idx0), + } + }, + Some(idx1) => error(ExpectedStringLiteral, idx1), + None => error(UnterminatedStringLiteral, idx0), + } + } + + // Saw a `'`, could either be: `'a` or `'a'`. + fn lifetimeish(&mut self, idx0: usize) -> Result>, Error> { + match self.lookahead { + None => error(UnterminatedCharacterLiteral, idx0), + + Some((_, c)) => { + if is_identifier_start(c) { + let (start, word, end) = self.word(idx0); + match self.lookahead { + Some((idx2, '\'')) => { + self.bump(); + let text = &self.text[idx0 + 1..idx2]; + Ok((idx0, CharLiteral(text), idx2 + 1)) + }, + _ => Ok((start, Lifetime(word), end)), + } + } else { + match self.string_or_char_literal(idx0, '\'', CharLiteral) { + Some(x) => Ok(x), + None => error(UnterminatedCharacterLiteral, idx0), + } + } + }, + } + } + + fn identifierish(&mut self, idx0: usize) -> Result>, Error> { + let (start, word, end) = self.word(idx0); + + if word == "_" { + return Ok((idx0, Underscore, idx0 + 1)); + } + + if word == "use" { + let code_end = try!(self.code(idx0, "([{", "}])")); + let code = &self.text[end..code_end]; + return Ok((start, Tok::Use(code), code_end)); + } + + let tok = + // search for a keyword first; if none are found, this is + // either a MacroId or an Id, depending on whether there + // is a `<` immediately afterwards + KEYWORDS.iter() + .filter(|&&(w, _)| w == word) + .map(|&(_, ref t)| t.clone()) + .next() + .unwrap_or_else(|| { + match self.lookahead { + Some((_, '<')) => MacroId(word), + _ => Id(word), + } + }); + + Ok((start, tok, end)) + } + + fn word(&mut self, idx0: usize) -> Spanned<&'input str> { + match self.take_while(is_identifier_continue) { + Some(end) => (idx0, &self.text[idx0..end], end), + None => (idx0, &self.text[idx0..], self.text.len()), + } + } + + fn take_while(&mut self, mut keep_going: F) -> Option + where + F: FnMut(char) -> bool, + { + self.take_until(|c| !keep_going(c)) + } + + fn take_until(&mut self, mut terminate: F) -> Option + where + F: FnMut(char) -> bool, + { + loop { + match self.lookahead { + None => { + return None; + }, + Some((idx1, c)) => { + if terminate(c) { + return Some(idx1); + } else { + self.bump(); + } + }, + } + } + } + + fn take_until_and_consume_terminating_character(&mut self, terminate: F) -> Option + where + F: FnMut(char) -> bool, + { + self.take_until(terminate) + .and_then(|_| self.bump().map(|p| p.0)) + } + + fn expect_char(&mut self, c: char) -> Option> { + match self.lookahead { + Some((idx0, cc)) if c == cc => { + self.bump(); + Some(Ok((idx0))) + }, + Some((idx0, _)) => { + self.bump(); + Some(error(UnrecognizedToken, idx0)) + }, + None => None, + } + } +} + +impl<'input> Iterator for Tokenizer<'input> { + type Item = Result>, Error>; + + fn next(&mut self) -> Option>, Error>> { + match self.next_unshifted() { + None => None, + Some(Ok((l, t, r))) => Some(Ok((l + self.shift, t, r + self.shift))), + Some(Err(Error { location, code })) => Some(Err(Error { + location: location + self.shift, + code: code, + })), + } + } +} + +fn is_identifier_start(c: char) -> bool { + UnicodeXID::is_xid_start(c) || c == '_' +} + +fn is_identifier_continue(c: char) -> bool { + UnicodeXID::is_xid_continue(c) || c == '_' +} diff --git a/third_party/rust/lalrpop-snap/src/tok/test.rs b/third_party/rust/lalrpop-snap/src/tok/test.rs new file mode 100644 index 000000000000..d09c3d674a4c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/tok/test.rs @@ -0,0 +1,707 @@ +use super::{Error, ErrorCode, Tok, Tokenizer}; +use super::Tok::*; + +enum Expectation<'a> { + ExpectTok(Tok<'a>), + ExpectErr(ErrorCode), +} + +use self::Expectation::*; + +fn gen_test(input: &str, expected: Vec<(&str, Expectation)>) { + // use $ to signal EOL because it can be replaced with a single space + // for spans, and because it applies also to r#XXX# style strings: + let input = input.replace("$", "\n"); + + let tokenizer = Tokenizer::new(&input, 0); + let len = expected.len(); + for (token, (expected_span, expectation)) in tokenizer.zip(expected.into_iter()) { + let expected_start = expected_span.find("~").unwrap(); + let expected_end = expected_span.rfind("~").unwrap() + 1; + println!("token: {:?}", token); + match expectation { + ExpectTok(expected_tok) => { + assert_eq!(Ok((expected_start, expected_tok, expected_end)), token); + }, + ExpectErr(expected_ec) => assert_eq!( + Err(Error { + location: expected_start, + code: expected_ec, + }), + token + ), + } + } + + let tokenizer = Tokenizer::new(&input, 0); + assert_eq!(None, tokenizer.skip(len).next()); +} + +fn test(input: &str, expected: Vec<(&str, Tok)>) { + let generic_expected = expected + .into_iter() + .map(|(span, tok)| (span, ExpectTok(tok))) + .collect(); + gen_test(input, generic_expected); +} + +fn test_err(input: &str, expected: (&str, ErrorCode)) { + let (span, ec) = expected; + gen_test(input, vec![(span, ExpectErr(ec))]) +} + +#[test] +fn basic() { + test( + "extern foo", + vec![("~~~~~~ ", Extern), (" ~~~", Id("foo"))], + ); +} + +#[test] +fn eol_comment() { + test( + "extern // This is a comment$ foo", + vec![ + ("~~~~~~ ", Extern), + (" ~~~", Id("foo")), + ], + ); +} + +#[test] +fn code1() { + test( + "=> a(b, c),", + vec![ + ("~~~~~~~~~~ ", EqualsGreaterThanCode(" a(b, c)")), + (" ~", Comma), + ], + ); +} + +#[test] +fn rule_id_then_equalsgreaterthancode_functioncall() { + test( + "id => a(b, c),", + vec![ + ("~~ ", Id("id")), + (" ~~~~~~~~~~ ", EqualsGreaterThanCode(" a(b, c)")), + (" ~", Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_dot_then_equalsgreaterthancode_functioncall() { + test( + r#" "\." => a(b, c),"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\."#)), + (r#" ~~~~~~~~~~ "#, EqualsGreaterThanCode(" a(b, c)")), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_dot_then_equalsgreaterthancode_many_characters_in_stringliteral() { + test( + r#" "\." => "Planet Earth" ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\."#)), + ( + r#" ~~~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" "Planet Earth" "#), + ), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_dot_then_equalsgreaterthancode_one_character_dot_in_stringliteral() { + test( + r#" "\." => "." ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\."#)), + (r#" ~~~~~~~ "#, EqualsGreaterThanCode(r#" "." "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_openningbracket_then_equalsgreaterthancode_one_character_openningbracket_in_stringliteral( +) { + test( + r#" "\(" => "(" ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\("#)), + (r#" ~~~~~~~ "#, EqualsGreaterThanCode(r#" "(" "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_openningbracket_then_equalsgreaterthancode_empty_stringliteral() { + test( + r#" "\(" => "" ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\("#)), + (r#" ~~~~~~ "#, EqualsGreaterThanCode(r#" "" "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_dot_then_equalsgreaterthancode_one_character_dot() { + test( + r#" "\." => '.' ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\."#)), + (r#" ~~~~~~~ "#, EqualsGreaterThanCode(r#" '.' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn rule_stringliteral_slash_openningbracket_then_equalsgreaterthancode_one_character_openningbracket( +) { + test( + r#" "\(" => '(' ,"#, + vec![ + (r#" ~~~~ "#, StringLiteral(r#"\("#)), + (r#" ~~~~~~~ "#, EqualsGreaterThanCode(r#" '(' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_openningbracket() { + test( + r#"=> '(' ,"#, + vec![ + (r#"~~~~~~~ "#, EqualsGreaterThanCode(r#" '(' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_escaped_n() { + test( + r#"=> '\n' ,"#, + vec![ + (r#"~~~~~~~~ "#, EqualsGreaterThanCode(r#" '\n' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_escaped_w() { + test( + r#"=> '\w' ,"#, + vec![ + (r#"~~~~~~~~ "#, EqualsGreaterThanCode(r#" '\w' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_escaped_planet123() { + test( + r#"=> '\planet123' ,"#, + vec![ + ( + r#"~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" '\planet123' "#), + ), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_openningcurlybracket() { + test( + r#"=> '{' ,"#, + vec![ + (r#"~~~~~~~ "#, EqualsGreaterThanCode(r#" '{' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_openningsquarebracket() { + test( + r#"=> '[' ,"#, + vec![ + (r#"~~~~~~~ "#, EqualsGreaterThanCode(r#" '[' "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_openningbracket_wrapped_by_brackets() { + test( + r#"=> ('(') ,"#, + vec![ + (r#"~~~~~~~~~ "#, EqualsGreaterThanCode(r#" ('(') "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_one_character_closingbracket_wrapped_by_brackets() { + test( + r#"=> (')') ,"#, + vec![ + (r#"~~~~~~~~~ "#, EqualsGreaterThanCode(r#" (')') "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_tuple() { + test( + r#"=> (1,2,3) ,"#, + vec![ + (r#"~~~~~~~~~~~ "#, EqualsGreaterThanCode(r#" (1,2,3) "#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_statement_with_lifetime() { + test( + r#"=> HuffmanTable::>::new() ,"#, + vec![ + ( + r#"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" HuffmanTable::>::new() "#), + ), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_statement_with_many_lifetimes() { + test( + r#"=> (HuffmanTable::>::new()),"#, + vec![ + ( + r#"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" (HuffmanTable::>::new())"#), + ), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn equalsgreaterthancode_nested_function_with_lifetimes() { + test( + r#"=> fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {} ,"#, + vec![ + ( + r#"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {} "#), + ), + ( + r#" ~"#, + Comma, + ), + ], + ); +} + +#[test] +fn where_with_lifetimes() { + test( + r#"where <'a,bar<'b,'c>>,baz;"#, + vec![ + (r#"~~~~~ "#, Where), + (r#" ~ "#, LessThan), + (r#" ~~ "#, Lifetime("'a")), + (r#" ~ "#, Comma), + (r#" ~~~ "#, MacroId("bar")), + (r#" ~ "#, LessThan), + (r#" ~~ "#, Lifetime("'b")), + (r#" ~ "#, Comma), + (r#" ~~ "#, Lifetime("'c")), + (r#" ~ "#, GreaterThan), + (r#" ~ "#, GreaterThan), + (r#" ~ "#, Comma), + (r#" ~~~ "#, Id("baz")), + (r#" ~"#, Semi), + ], + ); +} + +#[test] +fn forall() { + test( + r#"for<'a, 'b, 'c> FnMut"#, + vec![ + (r#"~~~ "#, For), + (r#" ~ "#, LessThan), + (r#" ~~ "#, Lifetime("'a")), + (r#" ~ "#, Comma), + (r#" ~~ "#, Lifetime("'b")), + (r#" ~ "#, Comma), + (r#" ~~ "#, Lifetime("'c")), + (r#" ~ "#, GreaterThan), + (r#" ~~~~~"#, Id("FnMut")), + ], + ); +} + +#[test] +fn where_forall_fnmut_with_return_type() { + test( + r#"where F: for<'a> FnMut(&'a T) -> U;"#, + vec![ + (r#"~~~~~ "#, Where), + (r#" ~ "#, Id("F")), + (r#" ~ "#, Colon), + (r#" ~~~ "#, For), + (r#" ~ "#, LessThan), + (r#" ~~ "#, Lifetime("'a")), + (r#" ~ "#, GreaterThan), + (r#" ~~~~~ "#, Id("FnMut")), + (r#" ~ "#, LeftParen), + (r#" ~ "#, Ampersand), + (r#" ~~ "#, Lifetime("'a")), + (r#" ~ "#, Id("T")), + (r#" ~ "#, RightParen), + (r#" ~~ "#, MinusGreaterThan), + (r#" ~ "#, Id("U")), + (r#" ~"#, Semi), + ], + ); +} + +#[test] +fn equalsgreaterthancode_error_unbalanced() { + test_err(r#"=> (,"#, (r#"~ "#, ErrorCode::UnterminatedCode)) +} + +#[test] +fn equalsgreaterthancode_error_unbalanced_closingbracket_character() { + test_err( + r#"=> (,')',"#, + (r#"~ "#, ErrorCode::UnterminatedCode), + ) +} + +#[test] +fn equalsgreaterthancode_error_unterminated_string_literal() { + test_err( + r#"=> "Jan III Sobieski"#, + ( + r#" ~ "#, + ErrorCode::UnterminatedStringLiteral, + ), + ) +} + +#[test] +fn equalsgreaterthancode_error_unterminated_character_literal() { + test_err( + r#"=> '\x233 "#, + (r#" ~ "#, ErrorCode::UnterminatedCharacterLiteral), + ) +} + +#[test] +fn equalsgreaterthancode_error_end_of_input_instead_of_closing_normal_character_literal() { + test_err( + r#"=> 'x"#, + (r#" ~ "#, ErrorCode::UnterminatedCharacterLiteral), + ) +} + +#[test] +fn equalsgreaterthancode_single_quote_literal() { + test( + r#"=> { println!('\''); },"#, + vec![ + ( + r#"~~~~~~~~~~~~~~~~~~~~~~ "#, + EqualsGreaterThanCode(r#" { println!('\''); }"#), + ), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn code_paren() { + // Issue #25 + test( + r#"=> a("(", c),"#, + vec![ + (r#"~~~~~~~~~~~~ "#, EqualsGreaterThanCode(r#" a("(", c)"#)), + (r#" ~"#, Comma), + ], + ); +} + +#[test] +fn code_regex_paren() { + // Issue #25 + test( + r###"=> a(r##"("#""##, c),"###, + vec![ + ( + r###"~~~~~~~~~~~~~~~~~~~~ "###, + EqualsGreaterThanCode(r###" a(r##"("#""##, c)"###), + ), + (r###" ~"###, Comma), + ], + ); +} + +#[test] +fn code_comment_eol() { + test( + "=> a(// ( +),", + vec![ + ( + "~~~~~~~~~ +~,", + EqualsGreaterThanCode(" a(// (\n)"), + ), + ( + "=> a(// ( +)~", + Comma, + ), + ], + ); +} + +#[test] +fn code2() { + test( + "=>? a(b, c),", + vec![ + ("~~~~~~~~~~~ ", EqualsGreaterThanQuestionCode(" a(b, c)")), + (" ~", Comma), + ], + ); +} + +#[test] +#[should_panic] +fn code_forgot_comma() { + test( + "=> a(b, c),", + vec![ + ("~~~~~~~~~~ ", EqualsGreaterThanCode(" a(b, c)")), + // intentionally forget the comma token; this is more of a test of `test` + ], + ); +} + +#[test] +fn various_kinds_of_ids() { + test( + "foo>", + vec![ + ("~~~ ", MacroId("foo")), + (" ~ ", LessThan), + (" ~ ", MacroId("T")), + (" ~ ", LessThan), + (" ~~ ", Lifetime("'a")), + (" ~ ", Comma), + (" ~ ", Id("U")), + (" ~ ", Comma), + (" ~~~~~~ ", Escape("Z*{}")), + (" ~ ", GreaterThan), + (" ~", GreaterThan), + ], + ); +} + +#[test] +fn string_literals() { + test( + r#"foo "bar\"\n" baz"#, + vec![ + (r#"~~~ "#, Id("foo")), + (r#" ~~~~~~~~~ "#, StringLiteral(r#"bar\"\n"#)), + (r#" ~~~"#, Id("baz")), + ], + ); +} + +#[test] +fn use1() { + test( + r#"use foo::bar; baz"#, + vec![ + (r#"~~~~~~~~~~~~ "#, Use(" foo::bar")), + (r#" ~ "#, Semi), + (r#" ~~~"#, Id("baz")), + ], + ); +} + +#[test] +fn use2() { + test( + r#"use {foo,bar}; baz"#, + vec![ + (r#"~~~~~~~~~~~~~ "#, Use(" {foo,bar}")), + (r#" ~ "#, Semi), + (r#" ~~~"#, Id("baz")), + ], + ); +} + +#[test] +fn where1() { + test( + r#"where ,baz;"#, + vec![ + (r#"~~~~~ "#, Where), + (r#" ~ "#, LessThan), + (r#" ~~~ "#, Id("foo")), + (r#" ~ "#, Comma), + (r#" ~~~ "#, Id("bar")), + (r#" ~ "#, GreaterThan), + (r#" ~ "#, Comma), + (r#" ~~~ "#, Id("baz")), + (r#" ~"#, Semi), + ], + ); +} + +#[test] +fn regex1() { + test( + r#####"raa r##" #"#"" "#"##rrr"#####, + vec![ + (r#####"~~~ "#####, Id("raa")), + ( + r#####" ~~~~~~~~~~~~~~~~ "#####, + RegexLiteral(r##" #"#"" "#"##), + ), + (r#####" ~~~"#####, Id("rrr")), + ], + ); +} + +#[test] +fn hash_token() { + test(r#" # "#, vec![(r#" ~ "#, Hash)]); +} + +#[test] +fn shebang_attribute_normal_text() { + test( + r#" #![Attribute] "#, + vec![(r#" ~~~~~~~~~~~~~ "#, ShebangAttribute("#![Attribute]"))], + ); +} + +#[test] +fn shebang_attribute_special_characters_without_quotes() { + test( + r#" #![set width = 80] "#, + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute("#![set width = 80]"), + ), + ], + ); +} + +#[test] +fn shebang_attribute_special_characters_with_quotes() { + test( + r#" #![set width = "80"] "#, + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "80"]"#), + ), + ], + ); +} + +#[test] +fn shebang_attribute_special_characters_closing_sqbracket_in_string_literal() { + test( + r#" #![set width = "80]"] "#, + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "80]"]"#), + ), + ], + ); +} + +#[test] +fn shebang_attribute_special_characters_opening_sqbracket_in_string_literal() { + test( + r#" #![set width = "[80"] "#, + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = "[80"]"#), + ), + ], + ); +} + +#[test] +fn shebang_attribute_special_characters_nested_sqbrackets() { + test( + r#" #![set width = [80]] "#, + vec![ + ( + r#" ~~~~~~~~~~~~~~~~~~~~ "#, + ShebangAttribute(r#"#![set width = [80]]"#), + ), + ], + ); +} + +#[test] +fn regex2() { + test(r#"r"(123""#, vec![(r#"~~~~~~~"#, RegexLiteral(r"(123"))]); +} + +#[test] +fn char_literals() { + test( + r#"'foo' 'a 'b '!' '!!' '\'' 'c"#, + vec![ + (r#"~~~~~ "#, CharLiteral("foo")), + (r#" ~~ "#, Lifetime("'a")), + (r#" ~~ "#, Lifetime("'b")), + (r#" ~~~ "#, CharLiteral("!")), + (r#" ~~~~ "#, CharLiteral("!!")), + (r#" ~~~~ "#, CharLiteral("\\'")), + (r#" ~~"#, Lifetime("'c")), + ], + ); +} diff --git a/third_party/rust/lalrpop-snap/src/util.rs b/third_party/rust/lalrpop-snap/src/util.rs new file mode 100644 index 000000000000..f400dd37cd2c --- /dev/null +++ b/third_party/rust/lalrpop-snap/src/util.rs @@ -0,0 +1,52 @@ +use std::fmt::{Display, Error, Formatter}; + +pub use std::collections::btree_map as map; +pub struct Sep(pub &'static str, pub S); + +impl<'a, S: Display> Display for Sep<&'a Vec> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let &Sep(sep, vec) = self; + let mut elems = vec.iter(); + if let Some(elem) = elems.next() { + try!(write!(fmt, "{}", elem)); + while let Some(elem) = elems.next() { + try!(write!(fmt, "{}{}", sep, elem)); + } + } + Ok(()) + } +} + +pub struct Escape(pub S); + +impl Display for Escape { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let tmp = format!("{}", self.0); + for c in tmp.chars() { + match c { + 'a'...'z' | '0'...'9' | 'A'...'Z' => try!(write!(fmt, "{}", c)), + '_' => try!(write!(fmt, "__")), + _ => try!(write!(fmt, "_{:x}", c as usize)), + } + } + Ok(()) + } +} + +pub struct Prefix(pub &'static str, pub S); + +impl<'a, S: Display> Display for Prefix<&'a [S]> { + fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { + let &Prefix(prefix, vec) = self; + let mut elems = vec.iter(); + while let Some(elem) = elems.next() { + try!(write!(fmt, "{}{}", prefix, elem)); + } + Ok(()) + } +} + +/// Strip leading and trailing whitespace. +pub fn strip(s: &str) -> &str { + s.trim_matches(char::is_whitespace) +} diff --git a/third_party/rust/lalrpop-util/.cargo-checksum.json b/third_party/rust/lalrpop-util/.cargo-checksum.json index d49d29b9f3a9..60e3bfb2b7a8 100644 --- a/third_party/rust/lalrpop-util/.cargo-checksum.json +++ b/third_party/rust/lalrpop-util/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"1cd189477069b0a27727a466c61e32eaa7ef000bf7ba1fc6a6d334e04574a9c6","src/lib.rs":"8f6000d5a84b1b51ca4dd2cfe3dd66cb102d166ceebdb9e57fcd6e6fb4f6b868"},"package":"488da0d45c65af229321623c62660627d02b0e7fbc768a4c3fcd121815404ef1"} \ No newline at end of file +{"files":{"Cargo.toml":"fa076800ee4d48f6dde5b670410e2ae068b2a54fe6b0c8c4a931431b934e26d6","src/lib.rs":"25a8d8ceb12f59ce3e5371f0858b71e27b83cb7c2bb655a8b9ceff0b88de8b14"},"package":"2400aeebcd11259370d038c24821b93218dd2f33a53f53e9c8fcccca70be6696"} \ No newline at end of file diff --git a/third_party/rust/lalrpop-util/Cargo.toml b/third_party/rust/lalrpop-util/Cargo.toml index 4215fb9f23a2..9a6fc5d27e5d 100644 --- a/third_party/rust/lalrpop-util/Cargo.toml +++ b/third_party/rust/lalrpop-util/Cargo.toml @@ -12,7 +12,7 @@ [package] name = "lalrpop-util" -version = "0.16.2" +version = "0.16.0" authors = ["Niko Matsakis "] description = "Runtime library for parsers generated by LALRPOP" license = "Apache-2.0/MIT" diff --git a/third_party/rust/lalrpop-util/src/lib.rs b/third_party/rust/lalrpop-util/src/lib.rs index 3ec27d3cb1df..15fc1673543f 100644 --- a/third_party/rust/lalrpop-util/src/lib.rs +++ b/third_party/rust/lalrpop-util/src/lib.rs @@ -1,202 +1,202 @@ -use std::error::Error; -use std::fmt; - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum ParseError { - /// Generated by the parser when it encounters a token (or EOF) it did not - /// expect. - InvalidToken { location: L }, - - /// Generated by the parser when it encounters a token (or EOF) it did not - /// expect. - UnrecognizedToken { - /// If this is `Some`, then an unexpected token of type `T` - /// was observed, with a span given by the two `L` values. If - /// this is `None`, then EOF was observed when it was not - /// expected. - token: Option<(L, T, L)>, - - /// The set of expected tokens: these names are taken from the - /// grammar and hence may not necessarily be suitable for - /// presenting to the user. - expected: Vec, - }, - - /// Generated by the parser when it encounters additional, - /// unexpected tokens. - ExtraToken { token: (L, T, L) }, - - /// Custom error type. - User { error: E }, -} - -impl ParseError { - fn map_intern( - self, - loc_op: FL, - tok_op: FT, - err_op: FE, - ) -> ParseError - where - FL: Fn(L) -> LL, - FT: Fn(T) -> TT, - FE: Fn(E) -> EE, - { - let maptok = |(s, t, e): (L, T, L)| (loc_op(s), tok_op(t), loc_op(e)); - match self { - ParseError::InvalidToken { location } => ParseError::InvalidToken { - location: loc_op(location), - }, - ParseError::UnrecognizedToken { token, expected } => ParseError::UnrecognizedToken { - token: token.map(maptok), - expected: expected, - }, - ParseError::ExtraToken { token } => ParseError::ExtraToken { - token: maptok(token), - }, - ParseError::User { error } => ParseError::User { - error: err_op(error), - }, - } - } - - pub fn map_location(self, op: F) -> ParseError - where - F: Fn(L) -> LL, - { - self.map_intern(op, |x| x, |x| x) - } - - pub fn map_token(self, op: F) -> ParseError - where - F: Fn(T) -> TT, - { - self.map_intern(|x| x, op, |x| x) - } - - pub fn map_error(self, op: F) -> ParseError - where - F: Fn(E) -> EE, - { - self.map_intern(|x| x, |x| x, op) - } -} - -impl fmt::Display for ParseError -where - L: fmt::Display, - T: fmt::Display, - E: fmt::Display, -{ - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use self::ParseError::*; - match *self { - InvalidToken { ref location } => write!(f, "Invalid token at {}", location), - UnrecognizedToken { - ref token, - ref expected, - } => { - match *token { - Some((ref start, ref token, ref end)) => try!(write!( - f, - "Unrecognized token `{}` found at {}:{}", - token, start, end - )), - None => try!(write!(f, "Unrecognized EOF")), - } - if !expected.is_empty() { - try!(writeln!(f, "")); - for (i, e) in expected.iter().enumerate() { - let sep = match i { - 0 => "Expected one of", - _ if i < expected.len() - 1 => ",", - // Last expected message to be written - _ => " or", - }; - try!(write!(f, "{} {}", sep, e)); - } - } - Ok(()) - } - ExtraToken { - token: (ref start, ref token, ref end), - } => write!(f, "Extra token {} found at {}:{}", token, start, end), - User { ref error } => write!(f, "{}", error), - } - } -} - -impl Error for ParseError -where - L: fmt::Debug + fmt::Display, - T: fmt::Debug + fmt::Display, - E: fmt::Debug + fmt::Display, -{ - fn description(&self) -> &str { - "parse error" - } -} - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub struct ErrorRecovery { - pub error: ParseError, - pub dropped_tokens: Vec<(L, T, L)>, -} - -/// Define a module using the generated parse from a `.lalrpop` file. -/// -/// You have to specify the name of the module and the path of the file -/// generated by LALRPOP. If the input is in the root directory, you can -/// omit it. -/// -/// # Example -/// ```ignore -/// // load parser in src/parser.lalrpop -/// lalrpop_mod!(parser); -/// -/// // load parser in src/lex/parser.lalrpop -/// lalrpop_mod!(parser, "/lex/parser.rs"); -/// -/// // define a public module -/// lalrpop_mod!(pub parser); -/// ``` - -#[macro_export] -macro_rules! lalrpop_mod { - ($(#[$attr:meta])* $modname:ident) => { - lalrpop_mod!($(#[$attr])* $modname, concat!("/", stringify!($modname), ".rs")); - }; - - ($(#[$attr:meta])* pub $modname:ident) => { - lalrpop_mod!($(#[$attr])* pub $modname, concat!("/", stringify!($modname), ".rs")); - }; - - ($(#[$attr:meta])* $modname:ident, $source:expr) => { - $(#[$attr])* mod $modname { include!(concat!(env!("OUT_DIR"), $source)); } - }; - - ($(#[$attr:meta])* pub $modname:ident, $source:expr) => { - $(#[$attr])* pub mod $modname { include!(concat!(env!("OUT_DIR"), $source)); } - }; -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test() { - let err = ParseError::UnrecognizedToken:: { - token: Some((1, "t0", 2)), - expected: vec!["t1", "t2", "t3"] - .into_iter() - .map(|s| s.to_string()) - .collect(), - }; - assert_eq!( - format!("{}", err), - "Unrecognized token `t0` found at 1:2\n\ - Expected one of t1, t2 or t3" - ); - } -} +use std::error::Error; +use std::fmt; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum ParseError { + /// Generated by the parser when it encounters a token (or EOF) it did not + /// expect. + InvalidToken { location: L }, + + /// Generated by the parser when it encounters a token (or EOF) it did not + /// expect. + UnrecognizedToken { + /// If this is `Some`, then an unexpected token of type `T` + /// was observed, with a span given by the two `L` values. If + /// this is `None`, then EOF was observed when it was not + /// expected. + token: Option<(L, T, L)>, + + /// The set of expected tokens: these names are taken from the + /// grammar and hence may not necessarily be suitable for + /// presenting to the user. + expected: Vec, + }, + + /// Generated by the parser when it encounters additional, + /// unexpected tokens. + ExtraToken { token: (L, T, L) }, + + /// Custom error type. + User { error: E }, +} + +impl ParseError { + fn map_intern( + self, + loc_op: FL, + tok_op: FT, + err_op: FE, + ) -> ParseError + where + FL: Fn(L) -> LL, + FT: Fn(T) -> TT, + FE: Fn(E) -> EE, + { + let maptok = |(s, t, e): (L, T, L)| (loc_op(s), tok_op(t), loc_op(e)); + match self { + ParseError::InvalidToken { location } => ParseError::InvalidToken { + location: loc_op(location), + }, + ParseError::UnrecognizedToken { token, expected } => ParseError::UnrecognizedToken { + token: token.map(maptok), + expected: expected, + }, + ParseError::ExtraToken { token } => ParseError::ExtraToken { + token: maptok(token), + }, + ParseError::User { error } => ParseError::User { + error: err_op(error), + }, + } + } + + pub fn map_location(self, op: F) -> ParseError + where + F: Fn(L) -> LL, + { + self.map_intern(op, |x| x, |x| x) + } + + pub fn map_token(self, op: F) -> ParseError + where + F: Fn(T) -> TT, + { + self.map_intern(|x| x, op, |x| x) + } + + pub fn map_error(self, op: F) -> ParseError + where + F: Fn(E) -> EE, + { + self.map_intern(|x| x, |x| x, op) + } +} + +impl fmt::Display for ParseError +where + L: fmt::Display, + T: fmt::Display, + E: fmt::Display, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + use self::ParseError::*; + match *self { + InvalidToken { ref location } => write!(f, "Invalid token at {}", location), + UnrecognizedToken { + ref token, + ref expected, + } => { + match *token { + Some((ref start, ref token, ref end)) => try!(write!( + f, + "Unrecognized token `{}` found at {}:{}", + token, start, end + )), + None => try!(write!(f, "Unrecognized EOF")), + } + if !expected.is_empty() { + try!(writeln!(f, "")); + for (i, e) in expected.iter().enumerate() { + let sep = match i { + 0 => "Expected one of", + _ if i < expected.len() - 1 => ",", + // Last expected message to be written + _ => " or", + }; + try!(write!(f, "{} {}", sep, e)); + } + } + Ok(()) + } + ExtraToken { + token: (ref start, ref token, ref end), + } => write!(f, "Extra token {} found at {}:{}", token, start, end), + User { ref error } => write!(f, "{}", error), + } + } +} + +impl Error for ParseError +where + L: fmt::Debug + fmt::Display, + T: fmt::Debug + fmt::Display, + E: fmt::Debug + fmt::Display, +{ + fn description(&self) -> &str { + "parse error" + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct ErrorRecovery { + pub error: ParseError, + pub dropped_tokens: Vec<(L, T, L)>, +} + +/// Define a module using the generated parse from a `.lalrpop` file. +/// +/// You have to specify the name of the module and the path of the file +/// generated by LALRPOP. If the input is in the root directory, you can +/// omit it. +/// +/// # Example +/// ```ignore +/// // load parser in src/parser.lalrpop +/// lalrpop_mod!(parser); +/// +/// // load parser in src/lex/parser.lalrpop +/// lalrpop_mod!(parser, "/lex/parser.rs"); +/// +/// // define a public module +/// lalrpop_mod!(pub parser); +/// ``` + +#[macro_export] +macro_rules! lalrpop_mod { + ($(#[$attr:meta])* $modname:ident) => { + lalrpop_mod!($(#[$attr])* $modname, concat!("/", stringify!($modname), ".rs")); + }; + + ($(#[$attr:meta])* pub $modname:ident) => { + lalrpop_mod!($(#[$attr])* pub $modname, concat!("/", stringify!($modname), ".rs")); + }; + + ($(#[$attr:meta])* $modname:ident, $source:expr) => { + $(#[$attr])* mod $modname { include!(concat!(env!("OUT_DIR"), $source)); } + }; + + ($(#[$attr:meta])* pub $modname:ident, $source:expr) => { + $(#[$attr])* pub mod $modname { include!(concat!(env!("OUT_DIR"), $source)); } + }; +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let err = ParseError::UnrecognizedToken:: { + token: Some((1, "t0", 2)), + expected: vec!["t1", "t2", "t3"] + .into_iter() + .map(|s| s.to_string()) + .collect(), + }; + assert_eq!( + format!("{}", err), + "Unrecognized token `t0` found at 1:2\n\ + Expected one of t1, t2 or t3" + ); + } +} diff --git a/third_party/rust/lalrpop/.cargo-checksum.json b/third_party/rust/lalrpop/.cargo-checksum.json index 899911f0b1c3..6039726cd9a1 100644 --- a/third_party/rust/lalrpop/.cargo-checksum.json +++ b/third_party/rust/lalrpop/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"bdfa408225c56a8f267b3d54b1df1ab5b1918239a07e0c17ce58b8c2f5c9755d","src/api/mod.rs":"9363a43459a23e81d0b3fe0bc4a8efc19af1048485137fc4c7c5d2e2e5e55165","src/build/action.rs":"4e248693c6c7a4b34b65b29bc002f1f0b6ec74c72d70f8bcb16457fb384bd8be","src/build/fake_term.rs":"feb889394c01fd6a81a954cdb023741adfd00c6d3f0a0a68a4846c1b241faee7","src/build/mod.rs":"3a4388ba07aa3a9c3863496e9147b7700f2382e32e9599ee2f1afc650d83b22d","src/collections/map.rs":"ca912574f6cd14b4fb5397b77c2df48bc2a3c175737c0c55d36d6886c97bdbb6","src/collections/mod.rs":"bad5daf81ee122b626fee1f31e32f695a268ae88c18d91685de37e1cffb868cf","src/collections/multimap.rs":"2843cdc675ab80010d0c8d6b5cb9b66264a8572f6d4d1323cb1dae69f60d9dee","src/collections/set.rs":"1dc34480d7163f840ad682e55cd8264ff0a0bd803a4b120b9b07a7bf33a3fdca","src/file_text.rs":"6115857e1ffb5a893dc82b1caba25ab1ac745e26c66f065cb502cb240a6df583","src/generate.rs":"af8a4cc2184ab96210d95b56cdc5ec4d55d0bae956d5b7dc59dc6a7bea09bd09","src/grammar/consts.rs":"aff93cd0edf49c8d9300d6f72cb8990c1ed6fda15afd87bdbd0f70f382b20635","src/grammar/mod.rs":"165375374fc5b623d4c11952de8cf325dd3bbf6a5cca56a8584255630e016356","src/grammar/parse_tree.rs":"9e1e8376a198f7086e0e39a338b429affe81e986960b2ce0f5fc5e40e3627610","src/grammar/pattern.rs":"23aaf7a61502d0a80475f5e70fffb6c9a4b490b059fc3071b39ff02cd18ac310","src/grammar/repr.rs":"f6d4ac051bb1788b661eb81bc47b53f231df434b950392535ba90e73be25c2f4","src/grammar/token/mod.rs":"303d5f66a01674892be3cb004992b51eab400524654c847989ef412ab2731184","src/grammar/token/test.rs":"7eb70257593da06f682a3ddda54a9d260d4fc514f645237f5ca74b08f8da61a6","src/kernel_set.rs":"6832c67948587a1b49d74b6648bcdf88ee0a950e2bcbc5645206625cedca86d2","src/lexer/dfa/interpret.rs":"a5cfa57398562e27053afc912e65e9d2378e8daddeb3c77905299264767ff7e9","src/lexer/dfa/mod.rs":"ad6f66dbe60afabd695e6ae69b1d0daae6c0d558ea4639a5cba87a1588752f36","src/lexer/dfa/overlap.rs":"110a246c742504544303862e6ea1777fa58978ebf96c1f93508cfe29b7674a6e","src/lexer/dfa/test.rs":"ce33f4bebc1ffda5c9d5eef0b7239e24c398d11313617c97e34b25359b199fcf","src/lexer/intern_token/mod.rs":"ddd3a6c4a0a95d2e1ae5b609c3807b39f3578e58d72856d2340f6f8028afd828","src/lexer/mod.rs":"a0bb0fc79637fb1e253509c1cc649e6355283548ea1546020d39f299acf39dfd","src/lexer/nfa/interpret.rs":"2098da66821da22e8fbbdaab4d36ffa0d2d0ba56b51c28682e52064a0e01f77e","src/lexer/nfa/mod.rs":"4f1a0456e6f7e14e527c56cd1d149e08852aa581d099fd1f8e23d79776a3db9d","src/lexer/nfa/test.rs":"5a529255d69f62385dc59d3c5ca3606629a51c0939c8d0d16508f311d285aa1c","src/lexer/re/mod.rs":"935b10ef4473a23afde90c3d64506eb07c6854f4a0b5f352fe6aac778acd705e","src/lexer/re/test.rs":"81912421079ae1166e37fda15291c4ded27c676155f244f724d61dca25dd8f92","src/lib.rs":"3393d1ff4824f4e4b78d502117e7f06aa62e1a639daf6b1bed3055793e4c3a82","src/log.rs":"b24d880c8df5217c4597300d8b459e5bc43e1fb87e0dde98de0e24687afba43a","src/lr1/build/mod.rs":"1e820e7ddccf9ef461b035ba5a08a6a2dbcd3c2423989cc73cb160ba1403774b","src/lr1/build/test.rs":"c4f83d0cabe7c46b17254babcaf082b2fd3187b6107f389078c4d62e60eb5ef2","src/lr1/build_lalr/mod.rs":"98c6234ce508ae174d47defdd65a9f6c022971306162621416b4073a8536533c","src/lr1/build_lalr/test.rs":"cc636034e22800f7bfc72a2da3f1171ef8f3e81efec21a665e20a66ead19f12e","src/lr1/codegen/ascent.rs":"fd29c54ea1967cf146435f662e9bcc5d6b543631453dd80ece2100de390ebf3f","src/lr1/codegen/base.rs":"8c26aadb932ddc6314d3ae1f629a1c5496598d69927273cc16fa86950233ad4e","src/lr1/codegen/mod.rs":"65814518dd4578d64f0169375a383eedd2fbb1e2d8b5566823021acac4a367b8","src/lr1/codegen/parse_table.rs":"2014c83eeaf902aa0ab3e83225b5256b78cb081a97de2a2ff2e8bb2795f1f1d4","src/lr1/codegen/test_all.rs":"6409b948e31aaf19dca5e89623a2647cb0ee9cd0fb03af4bca5e8f6a3ced68be","src/lr1/core/mod.rs":"6336395cb39b777861133551d6e8775d2e299958b39b5606fa54e3df0445dd31","src/lr1/error/mod.rs":"db9cf941d0d3312aa84db6a6261e9fd9a0cc47b8d9c1da2eceb8957b92e84678","src/lr1/error/test.rs":"f7f8c4e82d65bd4bb6ce831e43efcd169964a299d67009a4e1d914d278247c6c","src/lr1/example/mod.rs":"294e69da88a5ce926cc38a54638189a921c68487b902e6ffa854db4b9297c8ad","src/lr1/example/test.rs":"4a92f8e79cb276482cc6db756be59b4b5f9208dd0853bd60196b8aec2ceb3d3a","src/lr1/first/mod.rs":"6aeee7518e37a863f0c68231dcb91772ae281aa13b013745913d9bbc547c28ab","src/lr1/first/test.rs":"c424d30c9c9245addf8fa322e6869a52fc36b4ca8e029c4abc3804c209cb120c","src/lr1/interpret.rs":"c0338f26396a26758e8ef287071168c716d8f7343f3e969c5acfbe672abb9f52","src/lr1/item.rs":"7eb70257593da06f682a3ddda54a9d260d4fc514f645237f5ca74b08f8da61a6","src/lr1/lane_table/README.md":"e4953e620b5d8a95894dd07e0faa3d202e4b7589f7f9354a3e86eae8c9ef29a6","src/lr1/lane_table/construct/merge.rs":"dbfceecdaadd511e9b75cd9ca6d598ce3f95e4b9f035f275d73725e588a60769","src/lr1/lane_table/construct/mod.rs":"222bce55d4def8ab744ce0bf879bb7bd89ff8278df399a133d0066b57d27c6c8","src/lr1/lane_table/construct/state_set.rs":"9059a579efb12c14b6f4340fdfa923e1536ebb22d0c7e8240faa8332019a908c","src/lr1/lane_table/lane/mod.rs":"4a4ca7056e6f5ac7225f7a64781948f4b1a143063c97e9b9633b10b1f689c43a","src/lr1/lane_table/mod.rs":"240ca489a10caf553352147ee336996010901457346cfb494a5f77a31b8f7aba","src/lr1/lane_table/table/context_set/mod.rs":"0f52df514aef2d85dfe34a1b7f569e258bc32cf093a1382b389f1e21dac24b9c","src/lr1/lane_table/table/context_set/test.rs":"c5f48501a9aa5f04eafab25af6aaa3bdb1c77d878f204225cd627f2c3a91924a","src/lr1/lane_table/table/mod.rs":"e895479e27d68703187f8b8b3ca8abf779a654a98d6464099231dd3c85c268f3","src/lr1/lane_table/test.rs":"d0e1e10137126b9f45f742b50bdec15546826e3e87bad11750f8ae1e99a6b411","src/lr1/lookahead.rs":"2467d6930d37878a60c084ff79293d41fbb69a2e035243022328eafb861b4d4c","src/lr1/mod.rs":"ad6fbf6502afd8528228df99c1d0890b089c570e6524c5e5bbf4509f3c66982c","src/lr1/report/mod.rs":"7e7dfff26db591cfae820902aedeb7300de8ea49025f230ec7eface56620084e","src/lr1/state_graph.rs":"f51025ea29065cdb816e26efd92de75e913ab061490bf9012ffb5fd47ff104e9","src/lr1/tls.rs":"1bea5ce53287fc2e099f9673de2dfbb4e29c804af0d18db583505e988cf962b0","src/lr1/trace/mod.rs":"8f6063a7b66a688980d20b343f2c57b0e854979fc499f7b90d78a40d9a23a2fc","src/lr1/trace/reduce/mod.rs":"ba99a0980b660274a1688855ab3f1a7b3273443f01dcbfec391f03467c60c057","src/lr1/trace/reduce/test.rs":"0f8ddbe341ec10efe190ae0723a057be0f8861b66dc348c2fdc9b43d9d0617ec","src/lr1/trace/shift/mod.rs":"417821491d4b0804e2b42f510484fa8d274d00c7036fd8e4ed4dfa6895d4d2e9","src/lr1/trace/shift/test.rs":"90ecf70dcf63d2f02ea677a6b2be15dbe1e95d625eef99812daf22209e243658","src/lr1/trace/trace_graph/mod.rs":"779810949e373f3f610337a827fb870a8a1df11bff6c24b68517fe378f44e5c8","src/lr1/trace/trace_graph/test.rs":"eb21708d86cd2ef271d6fa7222eda2ad3a048490ed5e688f5ff6f5714c34137c","src/main.rs":"0919b128c30defc12d26733d975bc59b59b1f41f084195dd16d2cbb38bb57088","src/message/builder.rs":"8087162745c4c107dd420625f504901de0c9f84a3c0ab766fb27956c21546d1d","src/message/horiz.rs":"72878ca4a6db3381d4ee86a2eabb7a0784dca26c2a3c4c1a3a6eb54ef558d86f","src/message/indent.rs":"9d564a2d9fc0b0f8e27e2d768c367d79e45c8e22bfb2671f899605c18693840e","src/message/message.rs":"d188ef2074f6d8563911f16818e203777ab0700da92fbe068d76d98ac88d416f","src/message/mod.rs":"e34eb18fa8760ffa1d5f76f568eb5aa24e7d75106e1b9587fa07bdf2f99b4007","src/message/styled.rs":"9b67a3f10d842a799288c4bef232c18014f5c7fe290d66fe3b1b863839a65a9c","src/message/test.rs":"3de7dfa70d3de58cf9cfabd76c48b51932580ad5904dac5bc597795c6a3dc7db","src/message/text.rs":"c449700e5900c6020ddf6980cb7466cad7c4112ba2d002c4a2ba564d55c66d45","src/message/vert.rs":"f906d07bcc2b3ec5ea66559615467b5e2f6e65a47dc77247755db6f228d4b602","src/message/wrap.rs":"102b01629ae553592500cfe12a246636d0f28f60580b8a6d775bc9fb9d064b2a","src/normalize/inline/graph/mod.rs":"4cc82aeb13e4af5c90f592fcd2efcf9be6865f2a9cb0c8780e15eddff28074ce","src/normalize/inline/graph/test.rs":"e6da6acc9c2ead1774c3e8ff7c2df6b8908ae65c7a11820a61f52d446c1db750","src/normalize/inline/mod.rs":"53368f9b2b01539d5751f565db09fdf3afbae9d49bd49a3b3698a23874a300e7","src/normalize/inline/test.rs":"552e133c9dcc825ab15702de56d90652e850e91b90f2572a9dfbcd60765ce292","src/normalize/lower/mod.rs":"8472d804ef29dc9ae8c604e6ec67411df2041d3657368954e932aaaefe94a4b1","src/normalize/macro_expand/mod.rs":"dc696d5d235f23a3637258e04939b23e38a61a5566a33a8f9e150a240cfe0873","src/normalize/macro_expand/test.rs":"bd164ece6b080001403f23dae859fc0cbe2e1eae7cb33573e7d5e771bbbeb37d","src/normalize/mod.rs":"2a99aabd842259ca92bff03035b46b5d1a89fdd3f326b2f15023dad327bc969b","src/normalize/norm_util.rs":"c58460f2265320b9f5f1df12451401527c72a61358ba9e8f1ad834f4b7cd6420","src/normalize/prevalidate/mod.rs":"b6d78b81ed2d0c8d487b7926921e5e4bcc05a08e797d295f224eacea8f710801","src/normalize/prevalidate/test.rs":"90cb06443754052efb45c50aceba24c6c64417619949bac5227f6752ecb860cf","src/normalize/resolve/mod.rs":"1a35bc4c4fb3c37e2cdf6a0962c7a1d34760a2b0c5bfb2b04b7d777b8daaca9a","src/normalize/resolve/test.rs":"aab9ff2d276253dd0409ea08f1abb959d09a36df83fa2b289cd41423e0bbcf4b","src/normalize/token_check/mod.rs":"c176dd9980e465bec1b34b33f642afbcc6dc97e9f7b7c6277642b327c9775db5","src/normalize/token_check/test.rs":"34962c77cd700c8c27fc0609f764d9fd31518032dd2f8e069dde70ef511718e6","src/normalize/tyinfer/mod.rs":"cd48070753a6e2c2cb1daf667c5444ac441ac80cd3b21f69f471d7fad10aaf37","src/normalize/tyinfer/test.rs":"b751b0aa91b4d54fc9a18bccbb5fd175c78cf074c99c5b727289597e1d91dd9f","src/parser/lrgrammar.lalrpop":"ff8e66bf9bffcc39fd4d5baa2fca2d43c14f758db82e5c6ea620a3edf8dccc74","src/parser/lrgrammar.rs":"792f8b3c50c87c3bb940346d0ef1a796f7320cc5815832faa727470496086480","src/parser/mod.rs":"57ccfc1976cbd213bb5620fc1078961f3e478c1ac0898992520eb7cf405aa2a0","src/parser/test.rs":"5462a1d242007417d18bccf3f4b72e18849cdcd02be8245043ea875e1f69f197","src/rust/mod.rs":"182c1ca3ed82e6e5c08b554d4bc7dee8f208fac51069148f022dc802bfd56ece","src/session.rs":"1ff5691b038636f4250445a5de6492ef14f51659590bdc16feb5e2ce2aa46d59","src/test_util.rs":"9737ccf5bb5e24ce4f14e1c517e3a167ac9be8cec7d8cc9d77dcde4d3c9f6354","src/tls/mod.rs":"c8e59fbb0d076805e9ba7578cf3ae724d0731a42898f4a41777a3ded836ec6e9","src/tok/mod.rs":"1cd1cd5cc3011eb1349b9398cc08c1b0b264bdb40258ad8aa95e86cf651c7572","src/tok/test.rs":"d152ba0f17bfc670d72ab681654181c76aa6e9fa64328531b6180cfa4388c2bc","src/util.rs":"89d30a47bacbad6b4a46f9db6c00b3d67bd835d7d8699801a4f6e2418c057882"},"package":"02888049e197dff0c5c9fd503bd2458ea373c5e845c2f5460db1f9e43050d55e"} \ No newline at end of file +{"files":{"Cargo.toml":"e4d50853869021008ead3ab977f0ed03f2f717dc06573bc123b7de32991344e3","build.rs":"75173d40f6765aadd571c380fd28a88c09b8e4a12af7a1940575105984c41fbc","src/api/mod.rs":"1f24cc0686ba4bac3ffb57b99a3b9dd0aeade682000991709e7a81b446297d53","src/build/action.rs":"a0fdb1a9228e5043cd3da3d0effb46d29bbbb01c8a5be820862692b674393460","src/build/fake_term.rs":"0356fa66487dc6bce478deafb1ad9a1976499281f79172ed049228d0e454cb2a","src/build/mod.rs":"1ac1706bb82985ce52ee0036d0748e38b95a56fc744af486c86f318889dfb343","src/collections/map.rs":"12042df3cede0e7b76539aa10068a7a143490dbbc6463ba10a33ab49fe70d760","src/collections/mod.rs":"51c4f28da5d201b3ed7e06f9c12883a288e5a55f4ee49824414b30d661c1a380","src/collections/multimap.rs":"aa84c44400fef4635b772f78e09be56aaea370feac045ef6336f8309cfb58a64","src/collections/set.rs":"55c9f8942bcdc79b6f404e9b3ec0b0de33b1ff73b97c46ec7ac337b728d92a70","src/file_text.rs":"39ea19ed379054fcea047a879f178aa801ba9ce41db4d4389e3bba46ee0c0cf3","src/generate.rs":"084ff538a44ea7c1a67e56ffd66060ec9f3c389f40a723989a3048e8aef8a050","src/grammar/consts.rs":"ac3d60118674c065b99c69428842f6a4e389563ebc51aead98568495c13133d6","src/grammar/mod.rs":"6b8bd7a7df0ed18486c8e0ac12304135c3277aeffe6f6faf8bf49a29edb50f6b","src/grammar/parse_tree.rs":"1f147a0ce70dd0cc03cfdf64c8b4df2dcc84b9dc1a3ffe8d1cfc5b418dac978e","src/grammar/pattern.rs":"7314b4e6321aa2811f92d1ed605ebf993007e54a91aae875d8186d7008fbef98","src/grammar/repr.rs":"a6f10b639e28f1d0b5dacea4bfd54898392aabdd495d8842b60a728bbbd8968f","src/grammar/token/mod.rs":"347c171330eed42c23356e42c9e9b30cc7564b5fdc5bf6625573c44fdb885cdf","src/grammar/token/test.rs":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","src/kernel_set.rs":"c6da6013debabd7e4624571a31984ba8cb3902b4e4afb61f48ae2277e61a2e8e","src/lexer/dfa/interpret.rs":"3fe65d62acada89c3d39c4f89f96860573a55ccb0195ee518361aca2b24b4cd7","src/lexer/dfa/mod.rs":"8b8e75795cbfdd121d7c905e8cf0b03df21dfc5693a8190adcf6eec7960b7ad2","src/lexer/dfa/overlap.rs":"5373f47905ca913ba747a44295dce338b085d30a2fa47fe740e832fd526000ca","src/lexer/dfa/test.rs":"f3b8510b644906d7529a45574f24edbe78238bd7b92dc4f27eeb47c875873273","src/lexer/intern_token/mod.rs":"661a1f335cc24fa890cf30e682850e0bab5f392f45714971bb15990559a634ff","src/lexer/mod.rs":"427cd764234bc844b1653a3e32f5d2aed344e3dbd5b16d10d318ae337bc03a4e","src/lexer/nfa/interpret.rs":"0232acd16c1f74b4b10b4e2b62362d0c638ccedfb2d39c4ed6578fecb55090df","src/lexer/nfa/mod.rs":"7fe0ce93e6c12f49b293a59499f4dcb7142cede200c4874483213f45629a32c3","src/lexer/nfa/test.rs":"c4fc89d218d67a56b414635991409061ba8c7c34c539f83118748b5f2ddbd699","src/lexer/re/mod.rs":"59135f56d8b453bf1c4fe44a03b1f49d9dd06df32b5655f7e36097537d7ab727","src/lexer/re/test.rs":"c32af553e10cafc7d5c975fd347041dc065e1e17d380f9c8800282a3f0bb7957","src/lib.rs":"9dcbbc00e495c0f518bc59df3b00d1bedfab52216a583fed0f3ea210dbbf9a15","src/log.rs":"44b4d616801c0bc46bb07051d393b21dd3c9f9686627a0b7583a06664a2ef4ea","src/lr1/build/mod.rs":"658217bd35f43c6761b480ef66dbb4e4d74385f8d46f8f8aa136d2572361111c","src/lr1/build/test.rs":"d3082486e4836d979fc71adc661429f9bcb2255e73785de3aa7afb1f98579cbb","src/lr1/build_lalr/mod.rs":"ec59df171ce24317b22be2eb2efddf8fcdd732e12c6f90c0f9f4efbf1c666f9a","src/lr1/build_lalr/test.rs":"ee40db2b645373440720577e57d1b54c4d8f302e448246ed44ee41129f80e295","src/lr1/codegen/ascent.rs":"708e016e83cb158a5c62355d1f130f44661ae53109931a472fd09344f45a2e0f","src/lr1/codegen/base.rs":"0301b6a742a7411e298b0f54b216247d06c9b8a90c1de6faf47e38ae0dbc82bd","src/lr1/codegen/mod.rs":"7189f8aa348bd2b6fcf37daa5f7e819849f5b6f0915f1c31d21b356d2f9df7b6","src/lr1/codegen/parse_table.rs":"bec8141a35bc73647774061585af63ca18a7dd3a0bb34e893c15aead6e1f6027","src/lr1/codegen/test_all.rs":"7e560a2ea981d7dab60b39db6d000cacbad9fa186212c748499b21254f705a66","src/lr1/core/mod.rs":"c953b6ae599a0ea0c71fe8f33c349d70c5a5b7772cf94228da7fd2c01efb7460","src/lr1/error/mod.rs":"58f1ddabccf7a59548148b49cd014994afc2e21545b3e9d7bce71dc744ab0fa8","src/lr1/error/test.rs":"0399afaa009a760ffe0fde63ffa8ff7e77dc83edd76c4681caecafc3e9151baa","src/lr1/example/mod.rs":"5fa766e7ea6baefe9b8c8766e5b772e0d13d800007eb9e96b38c67f3ab21e6e4","src/lr1/example/test.rs":"53bb8d20c8673ab67490c18004505c676b2a9d0cc171283dbfcd7f28f681f7d5","src/lr1/first/mod.rs":"1480361d3d468506f02755d562f2c7717b22a3f60b20ff1261de40796b199111","src/lr1/first/test.rs":"483c4c555f46136db01fcadb3cf205019b2337870aca42c6881c75570919f5da","src/lr1/interpret.rs":"c6b988be0adf7c5e833a2ba0d80be40875f4d9073ea82e1ec8e86c5484a93b87","src/lr1/item.rs":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","src/lr1/lane_table/README.md":"494de731bd3ac5c44dc05c84497e59e713bbc1e50c24b4dd199a6576ae72f925","src/lr1/lane_table/construct/merge.rs":"f0632f5fb091148a6843744b9ae15736aa083981604188b2301ddf6368740e7c","src/lr1/lane_table/construct/mod.rs":"df28da66af2152f25c1d3ccba1c403a2982a208fe1346bfee65274ed69d16766","src/lr1/lane_table/construct/state_set.rs":"89d860ca09c30a65d13db8944d1dd0bca749aa1d4312cd28d828e831b6ca0d9a","src/lr1/lane_table/lane/mod.rs":"690efee0f32af107dd4ee05f90c0dcb0b67ae4b553c0f95e7d92fc9e896e1475","src/lr1/lane_table/mod.rs":"6f671cc10a8df06f7dc807193521b4af27a207b74e181e9a073f0d43da0415df","src/lr1/lane_table/table/context_set/mod.rs":"94cc5922b13126b88dd452845803c6ce0d96f23e527a60fb9240315589d0192d","src/lr1/lane_table/table/context_set/test.rs":"b4f8ea549fe8247264aa8d8d891894f45f409aab247d3989638e480d5d9686d2","src/lr1/lane_table/table/mod.rs":"535084856c85e1e7d6de47ec5b19c8bcaba9b9c3b917a4c7c245e3a6c722528e","src/lr1/lane_table/test.rs":"1ab1447a5a16e95fc2e0a2674da3091041aafb6156ad4cfbe8bddd8f2d6d651a","src/lr1/lookahead.rs":"5c368c28e8101d59f18b5ee57adcc0fe34462ae39884a13bc1d6b652e3838ca9","src/lr1/mod.rs":"0c968f46ac56b4606d1e2119411e3e65a49c15cc3a7d0c79d298f139bb9b233c","src/lr1/report/mod.rs":"b67fc309b725d9eff58ea57ea5c219001d8023d93ab6e40f1a796f6d4f331d1a","src/lr1/state_graph.rs":"4168fa99fee5e7ac47e23a4506c90f16239c3b6a1dc756d9b3efbdca4a8505ce","src/lr1/tls.rs":"f40f9bacab9a471b58029eea4244996fe48dc41ee41cfb31c51b015bf20f4dfe","src/lr1/trace/mod.rs":"d71cf150567f3f0af3bf2c3bcaf1c443d9785edb27d9900393c6b3515cb1f17a","src/lr1/trace/reduce/mod.rs":"fe976f6de97d8dd4c9d582ba538fc0fdde0489313f07ab4fcb8769f0aab27eb7","src/lr1/trace/reduce/test.rs":"56789d4af6b330c65cac4099e31bf54a02c98d8a7607f010e9d404dbce208bdc","src/lr1/trace/shift/mod.rs":"a85b17d3ec5c60990b438f5912eda8fe41d878e11fc613d897aee414780f8bf5","src/lr1/trace/shift/test.rs":"2c727135de13d45198d9fd62abf3bbabb356cf6888071e9d35aa1cb1cf39742b","src/lr1/trace/trace_graph/mod.rs":"e37bb24a2b37e780e83735a8fc33005bcd1a5117caa956c23a2b462954fbfd2e","src/lr1/trace/trace_graph/test.rs":"be123da8f47641b49878eb6da1f77a237ea9e14f620de09de7eb5c93eaf1cba9","src/main.rs":"2d3c69bb5c4503c3fc52d0d6a8ced73a3465d6adfb8c6c9997ffae191e366d3e","src/message/builder.rs":"9ba48b51f12a8f21210ba82e6dd51b37442d5a0e1a25cee13e967bf36a04ea7b","src/message/horiz.rs":"8354a19142434ab05958f1bbd26e36244fcf57f101997fcb1bf210d168ff7970","src/message/indent.rs":"0e739f0a445bcb5165d2d4406c89b139057df4cccbc6a37a9b63792e6996925d","src/message/message.rs":"c217f00b20243771b6d4c002a88321501ff78a66346f1cdc39bd49e3635d346b","src/message/mod.rs":"1df6aade06d6a56cfb23faeb27da328ff3e3281364f91376cea5a54e3dca067b","src/message/styled.rs":"f027ef2bd3fe90a865f2437cde9cbe857b5dc1ffff986e6eded7ed96252a5e60","src/message/test.rs":"5cb26ccff7242f2acde35e78077b77955c053da30f1badf7cc2e7962942b351a","src/message/text.rs":"c98f53953ed215e0933de12657ccc3cd97476cca0d8730ada51e8789bb6d2958","src/message/vert.rs":"d204e54edce130d45d830b4e5018863dc3be9083e037c357b38b61ced42921e2","src/message/wrap.rs":"a27c8d93e5d357b5ad0e451ea5b6476b0536cf458ecbdd421506bba6c4372c97","src/normalize/inline/graph/mod.rs":"26700d5d96ddd62433a83ac14f836e1a7bebf7b78e0fb0179f33f733d6a1a87e","src/normalize/inline/graph/test.rs":"ca2fc54bbe5187fcdbbeff2b13cf7d0df67d369c4b9b9a83ace5626c93f9f839","src/normalize/inline/mod.rs":"c2ce84a9fdfe77e8ddb6c2a0497a2da1c6165264dccf142c8885352eb8242a7f","src/normalize/inline/test.rs":"69b1c44e297c177efd0d929ff626583aab02ffcdf51b8772a629d3ce2b178e0e","src/normalize/lower/mod.rs":"1cf4dc078f4cc72be239ef84fa2f8054bf7c4f08b18eedca2fd2a2ad6c3594c7","src/normalize/macro_expand/mod.rs":"5ffe55674045d8b7be8036e2f36a87d7d5b74f76f4bad5c040b3a546b1a5ec5b","src/normalize/macro_expand/test.rs":"9745129ddfa458bc15923606904ca698b377c570776725b9b80e9969cb2ae87e","src/normalize/mod.rs":"5bf1a73ae9148cbac1c662520b56c7904a49ab367cd78909926253372c9642ab","src/normalize/norm_util.rs":"f1bbf8c58fc56670e5dd88d3f1fac7951fb79b5809dc6e734d2063405aa74930","src/normalize/prevalidate/mod.rs":"3abc85becedf6ba1fc499390ff2130bb8afa706dd0e00b17b8198504cf48481c","src/normalize/prevalidate/test.rs":"95bfc751eeb49b741ac0037628452e2db1637f17394fdffbc31fef7c7383c2bd","src/normalize/resolve/mod.rs":"8fae0ab78e3ca4ee1c8e1b2e84729316ec3c1d62f452fe48f59e83287156bb88","src/normalize/resolve/test.rs":"39007967a516be901f59a9f6b0846df2cd28233f77d0c7813b20318166db9c04","src/normalize/token_check/mod.rs":"f25cc20b45a68c185ec652b123190b2546fc903980e436bc88b96f02d0c2cbc7","src/normalize/token_check/test.rs":"ab4776f54cd03ca08f763b01b224e89b4a4a11df2c6327e6c02436da4387bec1","src/normalize/tyinfer/mod.rs":"cc258da8b5c8421cf9ae850d6356e8512c634a9c70f789f3c44f46a1b9972d20","src/normalize/tyinfer/test.rs":"0bfc25cedb4f683ffff5c9363439d8e6d92bcab30c14ef1a0608c6820cf92a1f","src/parser/lrgrammar.lalrpop":"a9b247138bff174a38065cf0ca30818619d9714a365ccfd504f45f3d0f0a8f8d","src/parser/mod.rs":"ec25dcd0ca5a624f0394583a9fb7239ed904ecbaacf4e2622f69e1ae7bde23c0","src/parser/test.rs":"b5f7f65a65d1546e82afe2cf96382da4512803db0c5cc1151830a5192af058a7","src/rust/mod.rs":"13eb8a26c8eba832ae31cbbcc228a6558988667421ef9d054daf357eb1fc3460","src/session.rs":"409ab312e9ed87bac43544cd5e63f282e2fa343871305bf789612139906637c1","src/test_util.rs":"5aa61b5051c1f5930ef80dbd0e88d19cff2477824cd40069b9735ba279e58da2","src/tls/mod.rs":"35463d95c5d0476da7ac94cc633d4ccff28d890c2e88401c54fe95314c9a5839","src/tok/mod.rs":"3373dcd94bd08d1fdc2ad3d5bb5d2729d4ddee562dd08fb97ae897d48ced4229","src/tok/test.rs":"9818d57f6c70a3bc1f2e41a80fb3e0760bc70ff2739e2e61f628587a76adac8e","src/util.rs":"228ef527b92dedbe3caa9b16d906254d7b3e6fe8bbb32b312b613640d5cf18a1"},"package":"9f7014afd5642680074fd5dcc624d544f9eabfa281cba2c3ac56c3db6d21ad1b"} \ No newline at end of file diff --git a/third_party/rust/lalrpop/Cargo.toml b/third_party/rust/lalrpop/Cargo.toml index 176a4fbfe86a..bd5ce6740d92 100644 --- a/third_party/rust/lalrpop/Cargo.toml +++ b/third_party/rust/lalrpop/Cargo.toml @@ -12,9 +12,9 @@ [package] name = "lalrpop" -version = "0.16.2" +version = "0.16.0" authors = ["Niko Matsakis "] -exclude = ["build.rs"] +build = "build.rs" description = "convenient LR(1) parser generator" readme = "../README.md" keywords = ["parser", "generator", "LR", "yacc", "grammar"] @@ -36,17 +36,21 @@ version = "0.5" [dependencies.diff] version = "0.1.9" +[dependencies.digest] +version = "0.7" +features = ["std"] + [dependencies.docopt] -version = "1" +version = "0.8" [dependencies.ena] -version = "0.10" +version = "0.9" [dependencies.itertools] version = "0.7" [dependencies.lalrpop-util] -version = "0.16.2" +version = "0.16.0" [dependencies.petgraph] version = "0.4.13" @@ -64,7 +68,7 @@ version = "1.0" version = "1.0" [dependencies.sha2] -version = "0.8.0" +version = "0.7.0" [dependencies.string_cache] version = "0.7.1" @@ -75,7 +79,6 @@ version = "0.4.5" [dependencies.unicode-xid] version = "0.1" [dev-dependencies.rand] -version = "0.5" - -[features] -test = [] +version = "0.4" +[build-dependencies.lalrpop-snap] +version = "0.16.0" diff --git a/third_party/rust/lalrpop/build.rs b/third_party/rust/lalrpop/build.rs new file mode 100644 index 000000000000..7269d3d1b5ee --- /dev/null +++ b/third_party/rust/lalrpop/build.rs @@ -0,0 +1,5 @@ +extern crate lalrpop_snap; + +fn main() { + lalrpop_snap::process_root().unwrap(); +} diff --git a/third_party/rust/lalrpop/src/api/mod.rs b/third_party/rust/lalrpop/src/api/mod.rs index 0ee14df0a8ba..843e6deb01a0 100644 --- a/third_party/rust/lalrpop/src/api/mod.rs +++ b/third_party/rust/lalrpop/src/api/mod.rs @@ -1,250 +1,214 @@ -use build; -use log::Level; -use session::{ColorConfig, Session}; -use std::default::Default; -use std::env; -use std::env::current_dir; -use std::error::Error; -use std::path::{Path, PathBuf}; -use std::rc::Rc; - -/// Configure various aspects of how LALRPOP works. -/// Intended for use within a `build.rs` script. -/// To get the default configuration, use `Configuration::new`. -#[derive(Clone, Default)] -pub struct Configuration { - session: Session, -} - -impl Configuration { - /// Creates the default configuration; equivalent to `Configuration::default`. - pub fn new() -> Configuration { - Configuration::default() - } - - /// Always use ANSI colors in output, even if output does not appear to be a TTY. - pub fn always_use_colors(&mut self) -> &mut Configuration { - self.session.color_config = ColorConfig::Yes; - self - } - - /// Never use ANSI colors in output, even if output appears to be a TTY. - pub fn never_use_colors(&mut self) -> &mut Configuration { - self.session.color_config = ColorConfig::No; - self - } - - /// Use ANSI colors in output if output appears to be a TTY, but - /// not otherwise. This is the default. - pub fn use_colors_if_tty(&mut self) -> &mut Configuration { - self.session.color_config = ColorConfig::IfTty; - self - } - - /// Specify a custom directory to search for input files. This - /// directory is recursively searched for `.lalrpop` files to be - /// considered as input files. This configuration setting also - /// impacts where output files are placed; paths are made relative - /// to the input path before being resolved relative to the output - /// path. By default, the input directory is the current working - /// directory. - pub fn set_in_dir